这篇教程已经配置好了基于 Zookeeper 的 Hadoop HA,https://blog.csdn.net/weixin_43311978/article/details/106099052,在此基础上,我们继续配置 Hbase 的高可用(HA)
我的主机规划
主机名 | ip | 进程 |
---|---|---|
Master | 192.168.150.141 | HMaster(主),HRegionServer |
Worker1 | 192.168.150.142 | HMaster(备),HRegionServer |
Worker2 | 192.168.150.143 | HRegionServer |
我的版本信息
软件 | 版本 |
---|---|
hadoop | 3.2.1 |
zookeeper | 3.6.1 |
hbase | 2.2.4 |
hbase,jdk,hadoop版本对应表
http://hbase.apache.org/book.html#java
一、安装Hbase
1、下载HBase
根据上面的版本对应表下载兼容的 Hbase 版本
Apache HBase 官网:
https://hbase.apache.org/downloads.html
以我的为例,进入官网
点击 bin
右键复制链接地址
然后在虚拟机中使用 wget 命令下载
cd software
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.2.4/hbase-2.2.4-bin.tar.gz
2、解压到 /usr/local 目录下
sudo tar -zxvf hbase-2.2.4-bin.tar.gz -C /usr/local
重命名为 hbase
cd /usr/local
sudo mv hbase-2.2.4 hbase
更改权限(我使用的用户名叫 hadoop)
sudo chown hadoop:hadoop hbase
3、配置环境变量
vim ~/.bashrc
添加
export HBASE_HOME=/usr/local/hbase
在 PATH 后面添加
$HBASE_HOME/bin
注意冒号隔开
如下图是我的配置
使环境变量生效
source ~/.bashrc
二、配置Hbase
1、配置 hbase-site.xml
cd /usr/local/hbase/conf
vim hbase-site.xml
我的配置如下
<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://myNameService1/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>Master:2181,Worker1:2181,Worker2:2181</value>
</property>
<!-- 指定缓存文件存储的路径 -->
<property>
<name>hbase.tmp.dir</name>
<value>/tmp/hbase-${user.name}</value>
</property>
<!-- 指定Zookeeper数据存储的路径 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/hbase/zookeeperData</value>
</property>
<!-- 完全分布式式必须为false -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
创建上面指定的 zookeeper 数据的存储路径(这个路径你可以自己设置,但要存在)
mkdir /usr/local/hbase/zookeeperData/
注意:hbase-site.xml 的 hbase.rootdir 的 value 值(包括主机和端口号)与 core-site.xml 的 fs.default.name 的 value 值(包括主机和端口号)一致
2、配置 hbase-env.sh
cd /usr/local/hbase/conf
vim hbase-env.sh
有几个地方需要改,hbase-env.sh 中本来就存在这些变量的配置,我们只需要删除前面的#并修改配置内容即可
大概在第28行,jdk 换成你自己的路径
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
大概在第31行,Hbase 底层存储依靠 HDFS,因此需要 hadoop 配置参数,hadoop 路径换成你自己的
export HBASE_CLASSPATH=/usr/local/hadoop/etc/hadoop
大概在第126行,Hbase 如果使用自带的 zookeeper 则设置为 true,如果依赖外部 zookeeper,则设置为 false,我这里使用外置 zookeeper 因此设置为 false
export HBASE_MANAGES_ZK=false
3、配置 regionservers
cd /usr/local/hbase/conf
vim regionservers
里面原本应该是 localhost,改成你想要作为 HRegionServer 的机器名或 ip, 比如我的将内容改为
三、配置Hbase高可用
为了保证 HBase 集群的高可靠性,HBase 支持多 Backup Master 设置,当Active Master 挂掉后,Backup Master 可以自动接管整个HBase的集群
该配置很简单,在 conf 目录下新增配置文件 backup-masters,在里面添加要作为 Backup Master 的节点 机器名或 ip
vim /usr/local/hbase/conf/backup-masters
我这里用 Worker1 作为备用 master
将配置好的 hbase 目录传到到其他机器上
sudo scp -r /usr/local/hbase Worker1:/usr/local
sudo scp -r /usr/local/hbase Worker2:/usr/local
更改其他机器的 hbase 所属,在另外两台机器上执行
sudo chown -R hadoop:hadoop /usr/local/hbase/
并配置环境变量,方法跟前面一样
四、启动Hbase集群
先在三台机上启动 zookeeper 集群
zkServer.sh start
在 Master 上启动 hadoop 集群
start-dfs.sh
start-yarn.sh
Master 上启动 Hbase
start-hbase.sh
jps 命令查看进程
Master
Worker1
Worker2
浏览器访问 Master:16010,看以看到 Hbase 集群的信息
关闭集群的顺序
关闭 Hbase --> 停止 hadoop集群 --> 停止 zookeeper 集群
五、遇到的错误
启动 Hbase 后,发现本来应该作为主 HMaster 的节点没有启动,备用的 HMaster 反倒启动了,查阅资料发现在 hbase-site.xml 配置文件中添加以下配置然后重启 Hbase 即可解决
<!-- 完全分布式式必须为false -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
六、总结
Hbase 对时间比较敏感,每个节点的时间不能相差太大,相差太大的话是没有办法正常启动的,相对于 hadoop安装与配置高可用,Hbase 高可用的配置相对来说简单很多,没有像配置 hadoop 时遇到那么多让人头疼的错误