文章目录
1.前置环境准备
1.1 Zookeeper 正常部署
首先保证 Zookeeper 集群的正常部署,Zookeeper安装参考:Apache-Zookeeper3.7.1安装
[root@node01 zookeeper-3.7.1]$ bin/zkServer.sh start
[root@node02 zookeeper-3.7.1]$ bin/zkServer.sh start
[root@node03 zookeeper-3.7.1]$ bin/zkServer.sh start
1.2 Hadoop 正常部署
Hadoop 集群的正常部署,Hadoop集群安装参考:Apache-Hadoop3.3.3集群安装
[root@node01 hadoop-3.3.3]$ sbin/start-dfs.sh
[root@node02 hadoop-2.7.2]$ sbin/start-yarn.sh
1.3 HBase下载
HBase下载地址:HBase官方下载地址
注意:HBase与Hadoop的版本兼容性,下载对应Hadoop版本的HBase安装包,版本兼容矩阵参考HBase官方文档
官方文档参考:第4章《Basic Prerequisites》第1节
本次安装环境版本如下:
组件 | 版本号 |
---|---|
JDK | 8.+ |
Hadoop | 3.3.3 |
Zookeeper | 3.7.1 |
HBase | 2.4.12 |
1.4 集群规划
node01 | node02 | node03 | |
---|---|---|---|
Zookeeper | follower | leader | follower |
HBase | Regionserver | Regionserver / Backup HMaster | HMaster |
2.HBase安装
2.1 HBase 的解压
解压 HBase 到指定目录:
tar -zxvf hbase-2.4.12-bin.tar.gz -C /opt/soft/
2.2 HBase 的配置文件
修改 HBase 对应的配置文件
cd /opt/soft/hbase-2.4.12
(1)conf/hbase-env.sh 添加以下内容
vim hbase-env.sh
export JAVA_HOME=/opt/soft/jdk1.8.0_261
export HBASE_MANAGES_ZK=false
自搭建的zookeeper集群,设置HBASE_MANAGES_ZK为false
(2)conf/hbase-site.xml 添加以下内容
vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://node01:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98后的新变动,之前版本没有.port,默认端口为60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/soft/zookeeper-3.7.1/logs/zookeeper</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
(3)regionservers:
vim regionservers
node01
node02
node03
(4)软连接 hadoop 配置文件到 hbase:
ln -s /opt/soft/hadoop-3.3.3/etc/hadoop/core-site.xml /opt/soft/hbase-2.4.12/conf/core-site.xml
ln -s /opt/soft/hadoop-3.3.3/etc/hadoop/hdfs-site.xml /opt/soft/hbase-2.4.12/conf/hdfs-site.xml
远程发送到其他节点
ssh_do_scp.sh ~/bin/node.list /opt/soft/hbase-2.4.12/ /opt/soft/
2.3 HBase高可用配置
在 HBase 中 Hmaster 负责监控 RegionServer 的生命周期,均衡RegionServer 的负载,如果 Hmaster 挂掉了,那么整个 HBase 集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以 HBase 支持对 Hmaster 的高可用配置。
1.关闭 HBase 集群(如果没有开启则跳过此步)
stop-hbase.sh
2.在 conf 目录下创建 backup-masters 文件
[root@node01 bin]# cd /opt/soft/hbase-2.4.12/conf/
[root@node01 conf]# touch backup-masters
3.在 backup-masters 文件中配置高可用 HMaster 节点
[root@node01 conf]# echo node02 > backup-masters
4.将整个 conf 目录 scp 到其他节点
[root@node01 conf]# ssh_do_scp.sh ~/bin/node.list /opt/soft/hbase-2.4.12/conf/backup-masters /opt/soft/hbase-2.4.12/conf/
==================== node01 ====================
skip node01
==================== node02 ====================
param is file
backup-masters 100% 7 7.3KB/s 00:00
==================== node03 ====================
param is file
backup-masters
5.打开页面测试查看
http://node02:16010
2.4 HBase 服务的启动
1.启动HBase并验证
(1)配置HBase环境变量
vim /etc/profile
export HBASE_HOME=/opt/soft/hbase-2.4.12
export PATH=$PATH:$HBASE_HOME/bin
source /etc/profile
(2)启动HBase
start-hbase.sh
对应的停止服务:
stop-hbase.sh
(3)查看 HBase 页面
启动成功后,可以通过“host:port”的方式来访问 HBase 管理页面,例如:
http://node03:16010
(4)执行命令
hbase shell
hbase:003:0> create 'user', 'info'
Created table user
Took 0.6853 seconds
=> Hbase::Table - user
hbase:004:0> put 'user','rk01','info:name','zhangsan'
Took 0.1572 seconds
hbase:005:0> put 'user','rk01','info:age',20
Took 0.0077 seconds
hbase:006:0> scan 'user'
ROW COLUMN+CELL
rk01 column=info:age, timestamp=2022-06-07T11:11:15.073, value=20
rk01 column=info:name, timestamp=2022-06-07T11:11:10.954, value=zhangsan
1 row(s)
Took 0.0322 seconds
2.HBase启动脚本编写
vim myhbase.sh
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit;
fi
case $1 in
"start")
echo "-----------------启动HBase----------------"
ssh node03 "/opt/soft/hbase-2.4.12/bin/start-hbase.sh "
;;
"stop")
echo "-----------------停止HBase----------------"
ssh node03 "/opt/soft/hbase-2.4.12/bin/stop-hbase.sh "
;;
*)
echo "Input Args Error.."
;;
esac
使用脚本启动HBase
[root@node01 ~]# myhbase.sh start
-----------------启动HBase----------------
running master, logging to /opt/soft/hbase-2.4.12/bin/../logs/hbase-root-master-node03.out
node02: running regionserver, logging to /opt/soft/hbase-2.4.12/bin/../logs/hbase-root-regionserver-node02.out
node03: running regionserver, logging to /opt/soft/hbase-2.4.12/bin/../logs/hbase-root-regionserver-node03.out
node01: running regionserver, logging to /opt/soft/hbase-2.4.12/bin/../logs/hbase-root-regionserver-node01.out
node02: running master, logging to /opt/soft/hbase-2.4.12/bin/../logs/hbase-root-master-node02.out
3 异常问题
进到hbase shell中执行命令会失败,执行list命令报错:
ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not run yet.
查看HBase-Master日志:
WARN [RS-EventLoopGroup-1-1] concurrent.DefaultPromise: An exception was thrown by org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper$4.operationComplete()
java.lang.IllegalArgumentException: object is not an instance of declaring class
解决办法:
在hbase-site.xml中添加如下配置, 重启HBase
<property>
<name>hbase.wal.provider</name>
<value>filesystem</value>
</property>