搭建HBase集群
下载Hbase
这里下载2.4.11版本的Hbase。下载网址:https://archive.apache.org/dist/hbase/2.4.11/
下载 hbase-2.4.11-bin.tar.gz。点击即可下载。
弄到/usr/local
目录下,可以借鉴zookeeper和hadoop的方法。接下来都是在/usr/local
目录下操作。
然后解压:
.tar后缀:
1 | sudo tar -xf hbase-2.4.11-bin.tar |
.tar.gz后缀:
1 | sudo tar -zxf hbase-2.4.11-bin.tar.gz |
然后改名:
1 | sudo mv hbase-2.4.11 hbase |
更改拥有者和所属用户组:
1 | sudo chown hadoop103 hbase |
删除压缩包(看你想不想删除,都行):
1 | sudo rm hbase-2.4.11-bin.tar |
配置Hbase
配置环境变量
1 | vim ~/.bashrc |
编写内容:
1 | #HBASE_HOME |
刷新:
1 | source ~/.bashrc |
测试是否有效:
1 | cd $HBASE_HOME |
如果从原本的/usr/local
目录跳转到你/usr/local/hbase
目录就正确了。
其他两台节点同样配置。
配置文件
配置文件目录:$HBASE/conf
主要配置hbase-env.sh
、hbase-site.xml
和regionservers
文件。
hbase-env.sh
1
vim $HBASE_HOME/conf/hbase-env.sh
找到
# export JAVA_HOME=/usr/java/jdk1.8.0/
放开注释,并修改为
export JAVA_HOME=$JAVA_HOME
下面三行
# export HBASE_CLASSPATH=
放开注释,并修改为:
export HBASE_CLASSPATH=/usr/local/hadoop/etc/hadoop
如图:
找到
# export HBASE_MANAGES_ZK=true
这个在倒数几行。放开注释,并改为false。如果想要用HBase自带的Zookeeper就不要修改这一步。
如图:
其实这里用true的话就可以用它内置的zookeeper了,但是我们部署好了zookeeper了,就不需要了,而且直接部署的zookeeper的稳定性更好。
这里应该需要强制保存退出,输入
:wq!
hbase-site.xml(如果Hadoop集群是高可用的,请仔细看这里的注释)
1
vim $HBASE_HOME/conf/hbase-site.xml
修改配置最终为(需要删除两个原本的property,原本有三个,只保留第一个并且value改为true):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop103,hadoop104,hadoop105</value>
<description>The directory sharedvi by RegionServers.</description>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop103:8020/hbase</value> <!-- 如果Hadoop集群是HA高可用集群,这里写hdfs://集群名称/hbase,例如我的:hdfs://myhacluster/hbase -->
<description>The directory shared by RegionServers.</description>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>hbase.wal.provider</name>
<value>filesystem</value>
</property>
</configuration>regionservers
这个和hadoop的workers类似
1
vim $HBASE_HOME/conf/regionservers
编写:
1
2
3hadoop103
hadoop104
hadoop105解决HBase和Hadoop的log4j兼容性问题,修改HBase的jar包,使用Hadoop的jar包:
1
sudo mv $HBASE_HOME/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar $HBASE_HOME/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar.bak
HBase的高可用(在hadoop103上操作)
1
2touch $HBASE_HOME/conf/backup-masters
echo hadoop104 > $HBASE_HOME/conf/backup-masters
分发hbase(注意,在分发前一定要在其他两台机器对应位置创建好目录,并且把权限改为对应用户):
1 | xsync $HBASE_HOME |
启动HBase服务
要提前确保HDFS和zookeeper是已经启动状态。即启动hadoop集群和zookeeper集群。
Zookeeper正常部署
如果使用HBase自带的Zookeeper就跳过这一步。
想要部署Hbase集群需要先部署运行Zookeeper集群,如果您还没有Zookeeper集群,请参看:搭建Zookeeper集群
启动Zookeeper集群,你如果是跟着我的步骤搭建的Zookeeper集群,那么你可以直接用启停脚本启动。
启动:
1 | zk start |
查看是否启动成功,查看状态。
1 | zk status |
如果你没有编写启停脚本,就每台节点都去执行一次启动命令也行。
Hadoop正常部署
Hbase也是基于Hadoop集群的,如果您没有搭建,请参看:hadoop集群搭建指南
启动hadoop集群,如果你是跟着我的指南搭建的hadoop集群,那么你可以直接使用启停脚本:
1 | myhadoop start |
如果你没有脚本,那么你就单独启动每台节点。
上两步效果:
启动HBase
单点启动
1
2$HBASE_HOME/bin/hbase-daemon.sh start master
$HBASE_HOME/bin/hbase-daemon.sh start regionserver群起
1
$HBASE_HOME/bin/start-hbase.sh
停止
1
$HBASE_HOME/bin/stop-hbase.sh
有时候停会一直出现省略号,等很久都停不掉。分别输入(每台节点都要去关,不能自动全关了):
1
2
3hbase-daemon.sh stop master
hbase-daemon.sh stop regionserver还不行就直接kiil -9 进程号。
进程号用
jps
查看,前面的数字就是进程号。
查看Hbase页面
HBase的管理页面,打开链接:http://hadoop103:16010
单点启动效果如图(只启动了hadoop103):
集群启动效果如图:
常见问题
总的来说,这样配置的HBase都不太稳定,建议配置高可用的Hadoop集群(可参看:搭建Hadoop HA(高可用)集群)。最好也配置上自己的Zookeeper,HBase自带的Zookeeper也不稳定。
出问题的话,hbase安装时需要考虑的东西是不多的,相比Hadoop简单很多(因为基本环境以及准备好了)。主要配置文件也就是hbase-env.sh
和hbase-site.xml
两个文件。主要问题应该是在版本上。我目前的版本:
- hadoop:3.3.1
- zookeeper:3.7.1
- hbase:2.4.11
版本不一定稳定,后续有问题会更新说明。
如果和我相同版本,出了问题,大概率就是你的配置文件和我的不同。
可以正常jpsall,但是无法访问web端。
原因:
1 | <property> |
这里的端口和hadoop的core-site.xml的内容不对应。
如果是jpsall之后成功启动了,但是过个十多二十秒,就自动关闭了,那就是没有配置集群时间同步(Ubuntu22.04自带有集群时间同步,大概率排出这个问题)。要配置集群时间同步请参看文章:集群时间同步