HBase单机环境搭建

在之前进行了单机版Hadoop安装之后,本文在之前的基础上进行Hbase单机环境的搭建:主要参考大神的博客和《HBase不睡觉书》

1. 服务器选择

《HBase单机环境搭建》 阿里云服务器基本信息

注意本文中的系统是
centos 7.3, 与centos7之前的版本可能有所不同。

2. 软件安装版本

2.1. 安装包下载

软件下载地址(各自官网):Hbase
对应的stable文件夹下的稳定版,本文选择hbase-1.4.9-bin.tar.gz(编译好不加密的包)

《HBase单机环境搭建》 Hbase版本下载

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查看配置状态,如下所示则代表配置成功。

《HBase单机环境搭建》 配置成功标志

3. 修改配置文件

进入/usr/local/hbase-1.4.9/conf文件夹下,对Hbase配置文件进行修改,包括了hbase-env.shhbase-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单机环境搭建》 成功启动

至此,单机版Hbase安装成功。

4. 安装遇到的问题

4.1 警告:某些配置选项在java8中不存在

如下图所示:显示某些配置选项不存在Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0

《HBase单机环境搭建》 配置文件

解决方案:如报错所示,在hbase-env.sh配置文件中存在某些在jdk8中不存在命令,查看配置文件发现如下场景:

《HBase单机环境搭建》 内存配置部分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日志所在目录),发现如下报错信息:

《HBase单机环境搭建》 jar包冲突

可以看出问及在于此处发生了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是否正确
    1. 我的解决方案:按照提示所建议的设置master端口即可,在hbase-site.xml文件中添加如下配置:
</property>
<!-- 设置master端口号 -->
<property>
    <name>hbase.master.port</name>
    <value>60010</value>
</property>
    原文作者:analanxingde
    原文地址: https://www.jianshu.com/p/f3247a14fda3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞