依赖
hbase 依赖 zookeeper、hdfs (较少需要 yarn),所以要先启动 zookeeper、hdfs,然后启动 hbase
说明
登录 hadoop1 虚拟机,进行下面操作
上传 hbase
上传 hbase-2.1.9-bin.tar.gz 到 /program 目录
解压
进入 /program 目录
cd /program
解压命令:
tar --no-same-owner -zxvf hbase-2.1.9-bin.tar.gz
查看解压结果
进入 /program 目录
cd /program
查看命令:
ll
看到 hbase-2.1.9 文件夹,说明成功
修改 hbase-env.sh
hbase-env.sh 配置了 hbase 的环境
进入 hbase 目录
cd /program/hbase-2.1.9/conf/
设置 JAVA_HOME
指定 java 绝对路径
使用 vim 编辑该文件:
vim hbase-env.sh
找到 export JAVA_HOME ,如果该行前面有 # ,就去掉 #,改成
# 指定jdk
export JAVA_HOME=/program/jdk1.8.0_202
可通过下面命令显示 java 绝对路径:
echo $JAVA_HOME
禁用自带ZooKeeper
找到 export HBASE_MANAGES_ZK ,如果该行前面有 # ,就去掉 #,改成
export HBASE_MANAGES_ZK=false
注意:如果不禁止,在启动 hbase 服务时,会自动篡改 3台服务器 zkData/myid 的值,导致整个 zk 服务不可启动
注意2:还需要将下面的 hbase.cluster.distributed 设置为 true,否则仍然会启动自带的 zookeeper
修改 hbase-site.xml
进入 hbase 目录
cd /program/hbase-2.1.9/conf/
vim hbase-site.xml
vim hbase-site.xml
增加内容
<!-- hbase数据在hdfs中的路径。namenode所在服务器 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop1:8020/hbase</value>
</property>
<!-- false单机模式(会启动自带的zookeeper),true是分布式模式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98 后的新变动,之前版本没有.port,默认端口为 60000 -->
<!-- <property> -->
<!-- <name>hbase.master.port</name> -->
<!-- <value>16000</value> -->
<!-- </property> -->
<!-- zookeeper集群地址,可省略2181端口号 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop1,hadoop2,hadoop3</value>
</property>
<!-- zookeeper快照的存放位置 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/program/zookeeper-3.4.14/zkData/</value>
</property>
<!-- v2.1版分布式情况下,设置为false -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>hbase.wal.provider</name>
<value>filesystem</value>
</property>
解释:
增加
hbase.unsafe.stream.capability.enforce配置,否则启动报错,详见 链接增加
hbase.wal.provider配置,否则启动后可能会报错
详见 hbase-2.1.x 错误 Could not initialize class org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper
修改 regionservers
配置 hbase 节点
vim regionservers
删掉原内容,添加下面内容:
hadoop1
hadoop2
hadoop3
注意:
- 不要有空行
- 左右不要有空格
复制 htrace.jar
必须复制,否则启动报错,找不到类,详见:hbase报错:java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder
cp /program/hbase-2.1.9/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar /program/hbase-2.1.9/lib/
删除冲突的jar包
hbase的 lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar 与 hadoop 的 jar包冲突,启动服务时显示警告信息
删除 hbase 的 jar包即可,执行下面命令
rm -f /program/hbase-2.1.9/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar
同步文件
同步到 hadoop2
rsync -av /program/hbase-2.1.9 root@hadoop2:/program
同步到 hadoop3
rsync -av /program/hbase-2.1.9 root@hadoop3:/program
验证文件是否正确
增加环境变量
将 hbase 目录加入到环境变量中
执行下面命令:
vim /etc/profile.d/bigdata_env.sh
在文件下面增加以下内容:
# 配置 HBASE_HOME
export HBASE_HOME=/program/hbase-2.1.9
export PATH=${HBASE_HOME}/bin:$PATH
立即生效
source /etc/profile
同步到 hadoop2
rsync -av /etc/profile.d/bigdata_env.sh root@hadoop2:/etc/profile.d
登录 hadoop2,执行下面命令,立即生效
source /etc/profile
测试,输入 start-hb ,按 tab 键,如果能补全 start-hbase.sh 命令,说明成功
同步到 hadoop3
rsync -av /etc/profile.d/bigdata_env.sh root@hadoop3:/etc/profile.d
登录 hadoop3,执行下面命令,立即生效
source /etc/profile
测试,输入 start-hb ,按 tab 键,如果能补全 start-hbase.sh 命令,说明成功