Hadoop(六)搭建分布式HBase集群

接上一章节,在单机版的HBase中,HMaster,HRegionServer,Zookeeper都在一个JVM进程中运行,通过两个阶段来搭建、学习分布式的HBase,伪分布式和分布式。

一,伪分布式HBase

HBase仍然在单个主机上运行,但是每个HBase的守护进程(HMaster,HRegionServer,Zookeeper)作为一个单独的进程运行。分布式,伪分布式的HBase对于生产环境来说没有意义,仅限于学习。

首先搭建好配置号Hadoop和Hdfs,并且运行正常,且使用Hadoop2。搭建文档见链接。

如果已经运行了HBase,先停止HBase。

1.1,配置Hbase

编辑Hbase根目录下conf目录下的hbase-site.xml配置文件,首先添加以下属性指示hbase以分布式模式运行,一个守护进程对应一个JVM进程。

<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>

接下来,该表hbase.rootdir配置,从本地文件系统到HDFS实例的地址,使用hdfs://标记,在这个例子中,HDFS在172.16.0.2:9000运行,确认删除hbase.unsafe.stream.capability.enforce配置,或者设置为true。

<property>
    <name>hbase.rootdir</name>
    <value>hdfs://172.16.0.2:9000/hbase</value>
</property>

不需要在hdfs中创建目录,HBase会自动创建,如果你创建了HBase会尝试迁移。

1.2,启动Hbase

[root@ecs-7bc6-0001 hbase-2.2.0]# ./bin/start-hbase.sh

如果配置正确的话jps命令会有HMaster,HRegionServer进程运行。

[root@ecs-7bc6-0001 hbase-2.2.0]# jps
30979 HMaster
31097 HRegionServer

1.3,检查HDFS中hbase目录

[root@ecs-7bc6-0001 hbase-2.2.0]# hdfs dfs -fs hdfs://172.16.0.2:9000/ -ls /
Found 5 items
drwxr-xr-x   - root supergroup          0 2019-07-25 14:39 /hbase

伪分布式的HBase已经搭建ok,可以使用hbase shell操作hbase了。

1.4,启动和停止备用的HBase Master(HMaster)服务。

HBMaster服务管理HBase集群,可以最多启动9个备用的HMaster服务,这样就有10个HMaster服务。要启用备份的HMaster服务,使用local-master-backup.sh,对于要启动的每个备用服务,需要传递主HMaster服务端口的偏移量,每个HMaster使用两个端口(默认是16000和16010),端口在默认端口(16000,16010)基础上偏移,因此使用偏移量2,备用的HMaster将使用端口(16002,16012),以下命令启动两个备用的HMaster,端口偏移量分别是1,2.。

[root@ecs-7bc6-0001 hbase-2.2.0]# ./bin/local-master-backup.sh start 1 2
running master, logging to /home/work/docker/hbase/hbase-2.2.0/bin/../logs/hbase-root-1-master-ecs-7bc6-0001.novalocal.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/work/package/hadoop/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/work/docker/hbase/hbase-2.2.0/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 /home/work/docker/hbase/hbase-2.2.0/bin/../logs/hbase-root-2-master-ecs-7bc6-0001.novalocal.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/work/package/hadoop/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/work/docker/hbase/hbase-2.2.0/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]

在jps查看jvm进程

[root@ecs-7bc6-0001 hbase-2.2.0]# jps
30979 HMaster
32694 HMaster
488 Jps
31097 HRegionServer
331 HMaster

可以看到现在有三个HMaster进程

要在不停止集群的情况下停止备用的HMaster服务,需要找到HMaster进程的PID,PID存储在/tmp/hbase-USER-X-master.pid文件中,使用kill命令杀死进程。

1.5,启动和停止额外的RegionServer

HRegionServer按照HMaster的指示管理其StoreFiles中的数据,通常,一个HRegionServer在集群中的每一个节点上运行。

使用local-regionservers.sh命令可以运行多个RegionServer,工作方式与local-master-backup.sh类似,提供参数代表端口的偏移量,每个RegionServer需要两个端口,默认端口为16020和16030,如果要修改默认端口,请在脚本local-regionservers.sh中修改HBASE_RS_BASE_PORT和HBASE_RS_INFO_BASE_PORT,设置为需要使用的端口。以下启动2个本地的RegionServer.

[root@ecs-7bc6-0001 hbase-2.2.0]# ./bin/local-regionservers.sh start 1 2
running regionserver, logging to /home/work/docker/hbase/hbase-2.2.0/bin/../logs/hbase-root-1-regionserver-ecs-7bc6-0001.novalocal.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/work/package/hadoop/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/work/docker/hbase/hbase-2.2.0/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 regionserver, logging to /home/work/docker/hbase/hbase-2.2.0/bin/../logs/hbase-root-2-regionserver-ecs-7bc6-0001.novalocal.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/work/package/hadoop/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/work/docker/hbase/hbase-2.2.0/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]

使用jps命令查看jvm进程

[root@ecs-7bc6-0001 hbase-2.2.0]# jps
1328 HRegionServer
30979 HMaster
32694 HMaster
1432 HRegionServer
31097 HRegionServer
331 HMaster
1519 Jps

可以看到共有三个HRegionServer进程。

1.6,停止RegionServier

.bin/local-regionservers.sh stop 3

二,分布式HBase

实际上,需要完全分布式配置才能完全测试HBase并在实际场景中使用HBase。在分布式配置中,集群包含多个节点,每个节点运行一个或者多个HBase守护进程,这些包括主要和备用HMaster,多个Zookeeper节点,多个RegionServer节点。

接下来搭建添加两个节点以上的集群,结构如下表。

Node Name

Master

ZooKeeper

RegionServer

master2

yes

yes

no

slave3

backup

yes

yes

slave4

no

yes

yes

首先,保证三台主机在一个网络中,保证三个节点有所有的连接权限,没有防火墙限制,如果出现no route to host错误,先检查防火墙。如果已经启动了其他Habase进程,先停止HBase进程。

2.1,配置不需要密码登录的SHH访问

master2需要可以登录到slave3,slave4和自己去启动守护进程,最简单的做法是在所有的主机上使用相同的用户名,配置不需要密码登录的shh到其他节点。参考《配置不需要密码登录ssh》配置。

2.2,准备master2节点

master2节点将运行主HMaster和Zookeeper,不运行RegionServer。配置不在master2上启动RegionServer.

2.2.1,编辑conf/regionservers并删除包含localhost的行,添加slave3和slave4的主机或者ip配置到配置中。

即使确实想在master2节点上运行RegionServer,也不能使用localhost,其他节点会使用他的ip或者主机名和他通信。

2.2.2,配置HBase使用slave3作为一个备用的HMaster。

创建一个新文件在conf/名称为backup-masters,在文件中添加slave3的主机或者ip。

2.2.3,配置Zookeeper

实际上,你需要仔细的考虑Zookeeper的配置, 您可以在zookeeper部分找到有关配置ZooKeeper的更多信息,根据这个配置,HBase启动和管理集群每个节点上的Zookeeper实例。

在master2上修改hbase-site.xml,增加如下属性。

<property>
  <name>hbase.zookeeper.quorum</name>
  <value>master2,slave3,slave4</value>
</property>
<property>
  <name>hbase.zookeeper.property.dataDir</name>
  <value>/root/zookeeper</value>
</property>

2.3,准备slave3和slave4节点
下载HBase安装包,解压,从master复制配置文件到slave3,slave4.

2.4,启动测试集群

2.4.1,确保没有HBase在任何节点运行

如果没有停止之前运行的HBase进程,接下来的步骤会出现错误,使用jps命令检查HBase是否在任何节点上运行,查找进程HMaster,HRegionServer,HQuirunmPeer如果存在,kill掉。

2.4.2,启动

在master2,使用start-hbase.sh启动hbase。Zookeeper首先启动,接下来是master,下来是regionServer,最后是备用master。

2.4.3 ,验证processes运行

在每个节点运行jps,查看jvm进程,验证是不是正确的进程列表。

ZooKeeper进程,HQuorumPeer进程是一个Zookeeper实例,有HBase管理,如果以这种方式使用Zookeeper,则每个集群节点仅限一个实例,并且只适用于测试。如果Zookeeper在HBase之外运行,则该进程称为QuorunmPeer。

2.4.4,查看Web UI

在HBase0.98.x以上的版本中,HBase的Web UI的端口,Master从60010变为16010,region从60030变为16030.

如果所有都配置正确,您就可以连接到http://master2:16010/或者备用master  http://slave3:16010/,也可以通过主机或IP加端口查看其他regionserver的web UI。

(完)(^_^)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值