基于 Hadoop 集群部署 ZooKeeper 和 HBase 集群

摘要

之前的环境中配置了 Hadoop 集群以及 Yarm。现在基于 HDFS 部署 ZooKeeper 集群和 HBase 集群。

三台机器中,将 131 作为 Master、其余两台作为 Region。另外设置 132 为 backup-master。
三台机器都部署 zookeeper。

部署 Zookeeper

weilu131/weilu132/weilu135三台上部署 zookeeper。

开放端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
firewall-cmd --add-port=2888/tcp --permanent
firewall-cmd --add-port=3888/tcp --permanent

firewall-cmd --add-port=2181/tcp --permanent

firewall-cmd --add-port=16000/tcp --permanent
firewall-cmd --add-port=16010/tcp --permanent
firewall-cmd --add-port=16020/tcp --permanent

firewall-cmd --add-port=60000/tcp --permanent
firewall-cmd --add-port=50010/tcp --permanent
firewall-cmd --add-port=60020/tcp --permanent

firewall-cmd --add-port=60010/tcp --permanent
firewall-cmd --add-port=60030/tcp --permanent
firewall-cmd --reload

将安装包拷贝到 /usr/local/ 目录下,解压:

1
tar -zxvf zookeeper-3.4.5-cdh5.15.0.tar.gz

zoo.cfg

在 zookeeper 包的根目录创建一个文件夹,随意命名:

1
/usr/local/zookeeper-3.4.5-cdh5.15.0/zookeeperDataDir

进入 /usr/local/zookeeper-3.4.5-cdh5.15.0/conf 目录,拷贝一份 zoo_sample.cfg 文件,命名为 zoo.cfg

1
cp zoo_sample.cfg zoo.cfg

zoo.cfg 中配置以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# The number of milliseconds of each tick
tickTime=2000

# The number of ticks that the initial synchronization phase can take
initLimit=10

# The number of ticks that can pass between sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
dataDir=/usr/local/zookeeper-3.4.5-cdh5.15.0/zookeeperDataDir

# the port at which the clients will connect
clientPort=2181

server.1=weilu131:2888:3888
server.2=weilu132:2888:3888
server.3=weilu135:2888:3888

myid

在每台 ZooKeeper 节点的数据目录(dataDir目录)下存放一个 myid 文件,文件中存放一个集群中唯一的ID,表明这台机器的ID,ID范围是 1~255

分发配置

将 zoo.cfg 和 myid 分发到其他及台机器上,对应修改 myid。

1
scp zoo.cfg root@weilu135:/usr/local/zookeeper-3.4.5-cdh5.15.0/conf

分发目录时增加参数 -r

1
scp -r zookeeperDataDir/ root@weilu151:/usr/local/zookeeper-3.4.5-cdh5.15.0/zookeeperDataDir

启动 zookeeper

启动时需要分别在每个节点使用 bin/zkServer.sh 脚本启动:

1
/usr/local/zookeeper-3.4.5-cdh5.15.0/bin/zkServer.sh start

在所有节点启动完成之前,如果使用 ./zkServer.sh status 查看状态时,会提示

1
2
3
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5-cdh5.15.0/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

如果都启动之后,再次查看会得到:

1
2
3
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5-cdh5.15.0/bin/../conf/zoo.cfg
Mode: follower

部署 HBase

将安装包拷贝到 /usr/local/ 目录下,解压 Hbase:

1
tar -zxvf hbase-1.2.0-cdh5.15.0.tar.gz

hbase-env.sh

配置 JDK 环境:

1
export JAVA_HOME=/usr/local/jdk1.8.0_181

配置不使用 HBase 默认自带的 ZooKeeper:

1
export HBASE_MANAGES_ZK=false

hbase-site.xml

创建临时文件目录:

1
mkdir -p /home/hbase/tmp

配置

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
<configuration>
<property>
<name>hbase.tmp.dir</name>
<value>/home/hbase/tmp</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://weilu131:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>weilu131,weilu132,weilu135</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
<property>
<name>hbase.regionserver.info.port</name>
<value>60030</value>
</property>
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
</configuration>

regionservers

配置 Region 服务器列表,在 regionservers 文件中配置以下内容,类似于 Hadoop 集群的 slaves 列表:

1
2
weilu132
weilu135

backup-masters

conf/backup-masters 中用来配置备份 master 服务器。

1
weilu132

分发配置

1
2
3
4
5
6
7
8
9
10
11
# hbase-env.sh 文件
scp hbase-env.sh root@weilu132:/usr/local/hbase-1.2.0-cdh5.15.0/conf/

# hbase-site.xml
scp hbase-site.xml root@weilu132:/usr/local/hbase-1.2.0-cdh5.15.0/conf/

# regionservers
scp regionservers root@weilu132:/usr/local/hbase-1.2.0-cdh5.15.0/conf/

#backup-masters
scp backup-masters root@weilu132:/usr/local/hbase-1.2.0-cdh5.15.0/conf/

启动服务

1
/usr/local/hbase-1.2.0-cdh5.15.0/bin/start-hbase.sh

验证

对于 Master 可以访问以下地址,查看集群情况。

访问Master:http://192.168.0.131:60010

enter image description here

对于 Region 可以访问以下地址,查看情况。

访问Master:http://192.168.0.132:60030

enter image description here

问题

zookeeper.MetaTableLocator: Failed verification of hbase:meta

1
2
3
4
5
6
7
8
9
2018-11-05 22:27:04,735 INFO  [weilu131:60000.activeMasterManager] zookeeper.MetaTableLocator: Failed verification of hbase:meta,,1 at address=weilu135,60020,1541427295657, exception=org.apache.hadoop.hbase.NotServingRegionException: Region hbase:meta,,1 is not online on weilu135,60020,1541428018822
at org.apache.hadoop.hbase.regionserver.HRegionServer.getRegionByEncodedName(HRegionServer.java:2997)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.getRegion(RSRpcServices.java:1069)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.getRegionInfo(RSRpcServices.java:1349)
at org.apache.hadoop.hbase.protobuf.generated.AdminProtos$AdminService$2.callBlockingMethod(AdminProtos.java:22233)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2191)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:112)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:183)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:163)

这个问题是 zookeeper 的数据出错导致的,将 zookeeper 集群都停掉,然后将 Datadir目录中除了配置的 myid 以外的文件都删掉,然后启动 zookeeper,应该就可以了。