HBase2.2.3完全分布式集群部署

442 阅读4分钟

[TOC]

1. HBase与hadoop的版本对应关系

官网:hbase.apache.org/book.html

搜索:Hadoop version support matrix

下面有一个二维的支持关系表。

hbase 2.X 的版本 至少需要java8的支持:

hbase–hadoop 打对号的是官方测试过的,功能齐全的,可放心使用。

我们只需要使用打对号的即可,不要去尝试使用其他的版本,否则你可能会遇到一些意外的惊喜。

预装的 hadoop集群是3.1.1版本,这里Hbase选择 2.2.x版本

软件下载地址:

archive.apache.org/dist/hbase/

Hbase官方文档:hbase.apache.org/book.html

2. 前提条件

2.1 Zookeeper正常部署

首先保证Zookeeper集群的正常部署,并启动:

zkServer.sh start

2.2 Hadoop正常部署

Hadoop集群的正常部署并启动:

#启动 zookeeper:
192.168.1.91/92/93
zkServer.sh start
192.168.1.81:(具体 SSH 免密功能的主机)
# 启动hdfs集群
start-dfs.sh
81\82:
hdfs --daemon start zkfc
# 启动 yarn
81:
start-yarn.sh
JobHistory 启动
在 JosHistory 节点 192.168.115.82:
mapred --daemon start historyserver
mapred --daemon stop historyserver
http://192.168.115.82:19888/jobhistory
jps

[hadoop@hadoop81 data]$ which jps
/data/jdk1.8.0_241/bin/jps
[hadoop@hadoop81 sbin]$ xcall '/data/jdk1.8.0_241/bin/jps'
============= hadoop81 /data/jdk1.8.0_241/bin/jps =============
21862 DFSZKFailoverController
22967 Jps
22333 ResourceManager
20718 NameNode
============= hadoop82 /data/jdk1.8.0_241/bin/jps =============
20242 ResourceManager
20755 Jps
20600 JobHistoryServer
19389 NameNode
20031 DFSZKFailoverController
============= hadoop91 /data/jdk1.8.0_241/bin/jps =============
21185 Jps
19989 DataNode
20775 NodeManager
19421 QuorumPeerMain
20077 JournalNode
============= hadoop92 /data/jdk1.8.0_241/bin/jps =============
19827 JournalNode
20532 NodeManager
20935 Jps
19739 DataNode
19164 QuorumPeerMain
============= hadoop93 /data/jdk1.8.0_241/bin/jps =============
20883 Jps
20469 NodeManager
19159 QuorumPeerMain
19687 DataNode
19775 JournalNode

3. 安装HBase

3.1 部署软件

上传HBase软件,并解压

cd /data
tar zxvf /data/soft/hbase-2.2.3-bin.tar.gz
ln -sf hbase-2.2.3 hbase
xcall mkdir /data/logs/hbase

环境变量
vi ~/.bash_profile
export JAVA_HOME=/data/jdk1.8.0_261
export HADOOP_HOME=/data/hadoop
export HBASE_HOME=/data/hbase
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$HADOOP_HOME/sbin:/data/zookeeper/bin:$PATH

source ~/.bash_profile
hbase version

3.2 配置hbase-env.sh

在所有节点上配置:

$ cd /data/hbase/conf
$ vi hbase-env.sh
在文件尾加入:
export JAVA_HOME=/data/jdk1.8.0_241
export HBASE_MANAGES_ZK=false
export HADOOP_HOME=/data/hadoop
export HBASE_MASTER_OPTS="-server -Xms1G -Xmx1G -Xmn400m -Xss228k -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:+DisableExplicitGC -XX:HeapDumpPath=/data/logs/hbase -XX:ErrorFile=/data/logs/hbase/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/data/logs/hbase/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m ${HBASE_MASTER_OPTS}"
export HBASE_REGIONSERVER_OPTS="-server -Xms1G -Xmx1G -Xmn400m -Xss228k -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/hbase -XX:ErrorFile=/data/logs/hbase/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/data/logs/hbase/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m ${HBASE_REGIONSERVER_OPTS}"
export HBASE_SHELL_OPTS="-server -Xms1G -Xmx1G -Xmn400m -Xss228k -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/hbase -XX:ErrorFile=/data/logs/hbase/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/data/logs/hbase/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m ${HBASE_SHELL_OPTS}"

3.3 配置hbase-site.xml

在所有节点上配置:

$ cd /data/hbase/conf
$ vi hbase-site.xml

<configuration>
    <!--  这个目录是region服务器共享的目录,用来持久存储HBase的数据,
              		默认值为:${hbase.tmp.dir}/hbase,如果不修改这个配置,数据将会在集群重启时丢失。 -->
    <property>
        <name>hbase.rootdir</name>
        <!-- hadoop引入JQM负载均衡时,这里配置dfs.nameservices指定的集群逻辑名称 -->
        <value>hdfs://cluster1/hbase</value>
        <!-- 指定Hadoop master服务器的写法,hbase监听hdfs默认的端口是9000,这里的配置端口只能写9000 -->
        <!--<value>hdfs://hadoop81:9000/hbase</value>-->
    </property>
    
    <!-- 指定hbase集群为分布式集群 -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    
    <!-- 指定zookeeper集群,有多个用英文逗号分隔 -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>hadoop91:2181,hadoop92:2181,hadoop93:2181</value>
    </property>
    <!-- 备份的副本数(不会放在同一节点上),不能超过datanode的节点数。 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- Zookeeper元数据快照的存储目录(需要和Zookeeper的zoo.cfg 配置文件中的属性一致)  -->
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/data/zookeeper/data</value>
    </property>
    <!-- 指定HBase Master web页面访问端口,默认端口号16010 -->
    <property>
        <name>hbase.master.info.port</name>
        <value>16010</value>
    </property>
    <!-- 指定HBase RegionServer web页面访问端口,默认端口号16030 -->
	<property>
		<name>hbase.regionserver.info.port</name>
		<value>16030</value>
	</property>
    <!-- 解决启动HMaster无法初始化WAL的问题 -->
    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
</configuration>

3.4 backup-masters的配置

backup-masters文件包含应运行备份Master实例的每个节点的列表。除非主用主实例不可用,否则备份主实例将处于空闲状态。

根据我们的架构, 需要将hadoop82配置为备用master。 集群操作就是:在/data/hbase/conf/目录下创建一个名为back-masters文件。然后将hadoop82的IP或者域名写进去。

$ cd /data/hbase/conf
$ vi back-masters
hadoop82

3.5 regionservers的配置

regionservers文件中包含应在集群中运行RegionServer的节点的列表

这些节点需要安装HBase,并且需要使用与主服务器相同的conf /目录内容

$ cd /data/hbase/conf
$ vi regionservers
hadoop91
hadoop92
hadoop93

3.6 HDFS客户端配置

hadoop引入JQM负载均衡机制需要把Hadoop的core-site.xml和hdfs-site.xml两个文件拷贝到HBASE的配置文件目录中

cp /data/hadoop/etc/hadoop/hdfs-site.xml /data/hbase/conf/
cp /data/hadoop/etc/hadoop/core-site.xml /data/hbase/conf/
在$ {HBASE_HOME}/conf下添加hdfs-site.xml(或hadoop-site.xml)或更佳的符号链接的副本

3.7 分发HBASE安装目录

192.168.115.81:
xsync /data/hbase-2.2.3
xsync /home/hadoop/.bash_profile
xcall 'mkdir /data/logs/hbase'
xcall 'rm -f /data/hbase'
xcall 'ln -sf /data/hbase-2.2.3 /data/hbase'
xcall '/data/hbase/bin/hbase version'

4. 启停Hbase

在 Master上输入

192.168.115.81:
start-hbase.sh
stop-hbase.sh
xcall '$JAVA_HOME/bin/jps'

单独启动Hbase master:
hbase-daemon.sh start master
hbase-daemon.sh stop master

启停Regionserver(91/92/93)
hbase-daemons.sh start regionserver
hbase-daemons.sh stop regionserver
hbase-daemon.sh start regionserver
hbase-daemon.sh stop regionserver

5. 各主机的角色

节点角色
hadoop81============= hadoop81 /data/jdk1.8.0_241/bin/jps =============
20833 DFSZKFailoverController
21265 ResourceManager
23816 Jps
20457 NameNode
21627 HMaster
hadoop82============= hadoop82 /data/jdk1.8.0_241/bin/jps =============
20193 JobHistoryServer
19446 DFSZKFailoverController
19638 ResourceManager
22119 Jps
19291 NameNode
20365 HMaster
hadoop91============= hadoop91 /data/jdk1.8.0_241/bin/jps =============
21760 Jps
19573 QuorumPeerMain
19797 JournalNode
19709 DataNode
20349 HRegionServer
20095 NodeManager
hadoop92============= hadoop92 /data/jdk1.8.0_241/bin/jps =============
20274 HRegionServer
19732 JournalNode
20036 NodeManager
21719 Jps
19498 QuorumPeerMain
19644 DataNode
hadoop93============= hadoop93 /data/jdk1.8.0_241/bin/jps =============
19537 QuorumPeerMain
19825 JournalNode
20120 NodeManager
21832 Jps
19737 DataNode
20366 HRegionServer

6. 访问地址:

hbase shell
status
http://192.168.115.81:16010
http://192.168.115.82:16010
http://192.168.115.91:16030
http://192.168.115.92:16030
http://192.168.115.93:16030

[hadoop@hadoop81 conf]$ hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/data/hadoop-3.1.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/data/hbase-2.2.3/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.2.3, r6a830d87542b766bd3dc4cfdee28655f62de3974, 20200110日 星期五 18:27:51 CST
Took 0.0068 seconds                                                                                                                                                     
hbase(main):001:0> status
1 active master, 1 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 1.6550 seconds 

qLE9u8.png

qLEPHg.png

qLECDS.png

7. 问题

7.1 问题一

[hadoop@hadoop81 ~]$ start-hbase.sh 
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/data/hadoop-3.1.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/data/hbase-2.2.3/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
running master, logging to /data/hbase/logs/hbase-hadoop-master-hadoop81.out
hadoop92: running regionserver, logging to /data/hbase/bin/../logs/hbase-hadoop-regionserver-hadoop92.out
hadoop93: running regionserver, logging to /data/hbase/bin/../logs/hbase-hadoop-regionserver-hadoop93.out
hadoop91: running regionserver, logging to /data/hbase/bin/../logs/hbase-hadoop-regionserver-hadoop91.out
hadoop82: running master, logging to /data/hbase/bin/../logs/hbase-hadoop-master-hadoop82.out

将低版本的slf4j去掉

$ cd /data/hadoop-3.1.1/share/hadoop/common/lib/
$ mv slf4j-log4j12-1.7.25.jar slf4j-log4j12-1.7.25.jar.bak

8.HMaster主从切换演练

81:(手动停掉Current Active Master: hadoop81)
hbase-daemon.sh stop master
观察http://192.168.115.82:16010/变化(此时82角色由Backup Master>>>Master)
启动81观察81
hbase-daemon.sh start master
此时81HMaster角色转化为Backup Master hadoop81
截图略

至此HBase分布式集群部署及HMaster主从切换演练结束。