HBase - 多节点集群搭建部署教程
作者:hangge | 2024-11-18 08:51
我之前写过文章介绍如何在 CentOS 系统下进行单机版的 HBase 安装(点击查看)。而在生产环境,为了使系统具备高可用性和横向扩展性,以满足日益增长的数据处理需求,通常需要在多节点环境中搭建 HBase 集群。本文将演示如何在多节点上搭建 HBase 集群。
(2)为方便后续 HBase 集群的配置,我们在三台服务上均执行如下命令编辑的 host 文件,使得可以通过主机名相互访问:
(3)不同与之前单机版 HBase 我们直接使用本地磁盘作为存储,HBase 集群需要建立在 Hadoop 文件系统(HDFS)之上。因此我们首先要搭建好 Hadoop 集群,具体步骤可以参考我之前写的文章:
(2)接着执行如下命令解压下载下来的压缩:
(3)最后将解压出来的文件夹移动到合适的位置,这个可以根据个人习惯修改:
(2)首先编辑 hbase-env.sh 文件:
(3)接着编辑 hbase-site.xml 文件:
(4)最后,修改 regionservers 文件:
(2)接着执行如下命令将 node1 上修改完配置的 HBase 安装包复制到 node3 上。
(2)接着依次进入各节点的 ZooKeeper 的 bin 目录后执行如下命令启动 ZooKeeper 服务。
(3)最后,在 node1 上执行如下命令启动 HBase 集群。
1,准备工作
(1)首先我们准备三台 linux 服务器进行集群搭建,具体信息如下:
主机名 | 内网 IP | 外网 IP |
node1 | 172.31.4.99 | 13.211.44.248 |
node2 | 172.31.3.72 | 3.106.170.197 |
node3 | 172.31.6.103 | 3.25.88.196 |
(2)为方便后续 HBase 集群的配置,我们在三台服务上均执行如下命令编辑的 host 文件,使得可以通过主机名相互访问:
echo ' 172.31.4.99 node1 172.31.3.72 node2 172.31.6.103 node3' >> /etc/hosts
(3)不同与之前单机版 HBase 我们直接使用本地磁盘作为存储,HBase 集群需要建立在 Hadoop 文件系统(HDFS)之上。因此我们首先要搭建好 Hadoop 集群,具体步骤可以参考我之前写的文章:
提示:如果 HBase 集群和 Hadoop 集群使用相同的机器部署,
建议把 HBase 集群的从节点和 Hadoop 集群的从节点部署在相同的机器上,这样可以最大化利用数据本地化特性。
(4)由于 HBase 集群需要 Zookeeper 来协调和管理分布式环境下的各个节点,因此我们还需安装好 ZooKeeper,具体步骤可以参考我之前写的文章:
(5)最后,HBase 集群需要依赖 JDK,我们确保各个节点上都安装了 JDK,具体步骤可以参考我之前写的文章:
2,下载并解压 HBase 安装包
wget https://dlcdn.apache.org/hbase/2.5.7/hbase-2.5.7-bin.tar.gz
(2)接着执行如下命令解压下载下来的压缩:
tar -zxvf hbase-2.5.7-bin.tar.gz
(3)最后将解压出来的文件夹移动到合适的位置,这个可以根据个人习惯修改:
mv hbase-2.5.7 /usr/local/hbase
3,修改 HBase 的配置文件
(1)进入 HBase 配置文件目录:
cd /usr/local/hbase/conf
(2)首先编辑 hbase-env.sh 文件:
vi hbase-env.sh
- 在文件末尾添加如下内容,注意 JAVA_HOME 根据实际情况修改:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.392.b08-3.el9.x86_64 export HBASE_MANAGES_ZK=false export HBASE_LOG_DIR=/data/hbase/logs export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
注意:最后一个配置不能省略,否则 HBase 的 jar 包和 Hadoop 的 jar 包会有冲突,导致服务无法正常启动,日志报“java.lang.IllegalArgumentException: object is not an instance of declaring class”错误
(3)接着编辑 hbase-site.xml 文件:
vi hbase-site.xml
- 修改 hbase-site.xml 文 件 中 hbase.cluster.distributed 、 hbase.tmp.dir 和 hbase.unsafe.stream.capability.enforce 这 3 个参数的值。
<!--是否为分布式模式部署,true 表示分布式部署--> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 本地文件系统 tmp 目录--> <property> <name>hbase.tmp.dir</name> <value>/data/hbase/tmp</value> </property> <!-- 在分布式情况下一定设置为 false --> <property> <name>hbase.unsafe.stream.capability.enforce</name> <value>false</value> </property>
- 接着,在 hbase-site.xml 文件末尾添加以下配置,注意节点名字根据实际情况修改:
<!--设置 HBase 表数据,即 HBase 数据在 HDFS 上的存储根目录--> <property> <name>hbase.rootdir</name> <value>hdfs://node1:9000/hbase</value> </property> <!--Zookeeper 集群的 URL 配置,多个 host 之间用逗号隔开--> <property> <name>hbase.zookeeper.quorum</name> <value>node1,node2,node3</value> </property> <!--HBase 在 Zookeeper 上数据的根目录 znode 节点--> <property> <name>zookeeper.znode.parent</name> <value>/hbase</value> </property> <!--设置 Zookeeper 通信端口,不配置也可以,Zookeeper 默认就采用 2181 端口--> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property>
(4)最后,修改 regionservers 文件:
vi regionservers
- 在其中添加 HBase 集群从节点的 IP 地址或者主机名:
node2 node3
4,其他节点的配置
(1)执行如下命令将 node1 上修改完配置的 HBase 安装包复制到 node2 上。scp -rq /usr/local/hbase node2:/usr/local/
(2)接着执行如下命令将 node1 上修改完配置的 HBase 安装包复制到 node3 上。
scp -rq /usr/local/hbase node3:/usr/local/
5,启动集群
(1)首先,在 node1 上执行如下命令启动 Hadoop 集群。start-all.sh
(2)接着依次进入各节点的 ZooKeeper 的 bin 目录后执行如下命令启动 ZooKeeper 服务。
./zkServer.sh start
(3)最后,在 node1 上执行如下命令启动 HBase 集群。
cd /usr/local/hbase bin/start-hbase.sh
6,验证集群
(1)我们 node1 上执行 jps 命令,会发现多了 1 个 HMaster 进程,这个就是 HBase 集群主节点中的进程。
(2)在 node2 或者 node3 上执行 jps 命令,会发现都多了 1 个 HRegionServer 进程,这个就是 HBase 集群从节点中的进程。如果发现 HMaster 进程和 HRegionServer 进程都在,则说明 HBase 进程成功启动了。
(3)HBase 提供了 Web 界面,可以通过浏览器访问该 Web 界面确认集群是否正常启动,地址为 http://主节点 IP:16010
7,停止 HBase 集群
如果要停止 HBase 集群,则需要在 node1 上执行如下命令:
cd /usr/local/hbase bin/stop-hbase.sh
全部评论(0)