在之前进行了单机版Hadoop安装之后,本文在之前的基础上进行Hbase单机环境的搭建:主要参考大神的博客和《HBase不睡觉书》
1. 服务器选择
阿里云服务器基本信息注意本文中的系统是centos 7.3, 与centos7之前的版本可能有所不同。
2. 软件安装版本
2.1. 安装包下载
软件下载地址(各自官网):Hbase
对应的stable文件夹下的稳定版,本文选择hbase-1.4.9-bin.tar.gz
(编译好不加密的包)
2.2 安装包上传到服务器
rz名命令上传。如果显示不存在这个命令,则说明未安装rz,执行yum -y install lrzsz
安装后,上传Hbase安装包到服务器, rz 命令选择要上传的安装包即可。解压tar -zxvf hbase-1.4.9-bin.tar.gz
本课题中,解压后的目录为:/usr/local/hbase-1.4.9
2.3 环境配置
配置profile文件
执行vim /etc/profile
,打开profile文件,在文件中添加:
export HBASE_HOME=/usr/local/hbase-1.4.9
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HBASE_HOME}/bin:$PATH
执行source /etc/profile
使文件修改生效。输入hbase version
查看配置状态,如下所示则代表配置成功。
3. 修改配置文件
进入/usr/local/hbase-1.4.9/conf
文件夹下,对Hbase配置文件进行修改,包括了hbase-env.sh
和hbase-site.xml
3.1 建立相应的运行文件夹
为了方便后续的hbase环境配置,此处对后续配置中需要用的的文件夹进行组织,分别执行如下命令:
mkdir /root/hbase
mkdir /root/hbase/tmp
mkdir /root/hbase/pids
3.2 修改hbase-env.sh
对hbase的环境进行配置,执行vim hbase-env.sh
命令,在原有的hbase-env.sh文件中添加如下配置:
export JAVA_HOME=/usr/local/jdk1.8.0_201
export HADOOP_HOME=/usr/local/hadoop-2.8.4
export HBASE_HOME=/usr/local/hbase-1.4.9
export HBASE_CLASSPATH=/usr/local/hadoop-2.8.4/etc/hadoop
export HBASE_PID_DIR=/root/hbase/pids
export HBASE_MANAGES_ZK=false //HBASE_MANAGES_ZK=false 是不启用HBase自带的Zookeeper集群。
3.3 修改hbase-env.sh
对hbase-env.sh文件进行配置,执行vim hbase-env.sh
命令,在原有的hbase-env.sh文件中添加如下配置:
<property>
<name>hbase.rootdir</name>
<value>hdfs://test01:9000/hbase</value>
<description>The directory shared byregion servers.</description>
</property>
<!-- hbase的端口 -->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
<description>Property from ZooKeeper'sconfig zoo.cfg. The port at which the clients will connect.
</description>
</property>
<!-- 超时时间 -->
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<!-- zookeeper 集群配置。如果是集群,则添加其它的主机地址 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>test01</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/root/hbase/tmp</value>
</property>
<!-- false是单机模式,true是分布式模式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
说明:hbase.rootdir
:这个目录是region server的共享目录,用来持久化Hbase 。hbase.cluster.distributed
:Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面
3.4 启动查看结果
进入Hbase安装目录下的bin目录下,本文中指的是:``/usr/local/hbase-1.4.9/bin````下,执行./start-hbase.sh
启动hbase后,如果输入jps
,得到如下信息,则说明Hbase成功启动。
至此,单机版Hbase安装成功。
4. 安装遇到的问题
4.1 警告:某些配置选项在java8中不存在
如下图所示:显示某些配置选项不存在Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
解决方案:如报错所示,在hbase-env.sh配置文件中存在某些在jdk8中不存在命令,查看配置文件发现如下场景:
内存配置部分jdk8不兼容
如注释所说,将这里的两行配置信息
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m" export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
注释掉即可。
4.2 jar包冲突
当上述警告解决后,我还遇到了无法启动HBase的情况,``/usr/local/hbase-1.4.9/bin````下,执行./start-hbase.sh
启动hbase后,执行jps
没有出现HMaster进程,查看相应的日志(./start-hbase.sh命令执行后会在命令行给出log日志所在目录),发现如下报错信息:
可以看出问及在于此处发生了jar包冲突,冲突的两个jar包分别为:
file:/usr/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class
和file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class
,移除其中一个jar包即可。解决方案:进入其中一个jar包的目录下,移除相应jar包即可。分别执行下面命令:
cd /usr/local/hbase-1.4.9/lib/
rm slf4j-log4j12-1.7.10.jar
4.3 绑定端口错误
之后,我还遇到了无法启动HBase的情况,关于绑定端口错误,查看4.2中所示的日志文件,发现如下报错:
2019-02-01 12:47:42,613 ERROR [main] master.HMasterCommandLine: Master exiting
at org.apache.hadoop.hbase.util.JVMClusterUtil.createMasterThread(JVMClusterUtil.java:143)
at org.apache.hadoop.hbase.LocalHBaseCluster.addMaster(LocalHBaseCluster.java:227)
at org.apache.hadoop.hbase.LocalHBaseCluster.<init>(LocalHBaseCluster.java:162)
at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:225)
at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:138)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:127)
at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2821)
at org.apache.hadoop.hbase.LocalHBaseCluster.addMaster(LocalHBaseCluster.java:227)
at org.apache.hadoop.hbase.LocalHBaseCluster.<init>(LocalHBaseCluster.java:162)
at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:225)
at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:138)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:127)
at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2821)
Caused by: java.io.IOException: Problem binding to test01/47.106.221.38:0 : Cannot assign requested address. To switch ports use the 'hbase.master.port' configuration property.
at org.apache.hadoop.hbase.regionserver.RSRpcServices.<init>(RSRpcServices.java:1130)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.<init>(RSRpcServices.java:1078)
at org.apache.hadoop.hbase.master.MasterRpcServices.<init>(MasterRpcServices.java:243)
at org.apache.hadoop.hbase.master.HMaster.createRpcServices(HMaster.java:614)
at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:561)
at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:449)
at org.apache.hadoop.hbase.master.HMasterCommandLine$LocalHMaster.<init>(HMasterCommandLine.java:315)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.hadoop.hbase.util.JVMClusterUtil.createMasterThread(JVMClusterUtil.java:139)
... 7 more
Caused by: java.net.BindException: Cannot assign requested address
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
仔细分析,发现是端口错误。debug分为两步:
- 1.检查ip主机映射文件sudo vi /etc/hosts查看映射master对应的ip是否正确
- 我的解决方案:按照提示所建议的设置master端口即可,在hbase-site.xml文件中添加如下配置:
</property>
<!-- 设置master端口号 -->
<property>
<name>hbase.master.port</name>
<value>60010</value>
</property>
网友评论