欢迎投稿

今日深度:

hbase集群部署,

hbase集群部署,


集群架构

集群相关概念

Client

HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC

Zookeeper

Zookeeper Quorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也避免了HMaster的单点问题,

HMaster

HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作:

HRegionServer

HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。
HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个Column Family中,这样最高效。

RegionServer 工作机制

Region 分配

任何时刻,一个 Region 只能分配给一个 RegionServer。master 记录了当前有哪些可用的 RegionServer。以及当前哪些 Region 分配给了哪些 RegionServer,哪些 Region 还没有分配。 当需要分配的新的 Region,并且有一个 RegionServer 上有可用空间时,Master 就给这个 RegionServer 发送一个装载请求,把 Region 分配给这个 RegionServer。RegionServer 得到请 求后,就开始对此 Region 提供服务。

RegionServer 上线

Master 使用 zookeeper 来跟踪 RegionServer 状态。当某个 RegionServer 启动时,会首先在 ZooKeeper 上的 server 目录下建立代表自己的 znode。由于 Master 订阅了 server 目录上的变 更消息,当 server 目录下的文件出现新增或删除操作时,Master 可以得到来自 ZooKeeper 的实时通知。因此一旦 RegionServer 上线,Master 能马上得到消息。

RegionServer 下线

当 RegionServer 下线时,它和 zookeeper 的会话断开,ZooKeeper 而自动释放代表这台 server 的文件上的独占锁。Master 就可以确定:

1、RegionServer 和 ZooKeeper 之间的网络断开了。

2、RegionServer 挂了。

无论哪种情况,RegionServer都无法继续为它的Region提供服务了,此时Master会删除server 目录下代表这台 RegionServer 的 znode 数据,并将这台 RegionServer 的 Region 分配给其它还 活着的同志。

Master 工作机制

Master 上线

Master 启动进行以下步骤:

1、从 ZooKeeper 上获取唯一一个代表 Active Master 的锁,用来阻止其它 Master 成为 Master。

2、扫描 ZooKeeper 上的 server 父节点,获得当前可用的 RegionServer 列表。

3、和每个 RegionServer 通信,获得当前已分配的 Region 和 RegionServer 的对应关系。

4、扫描.META. Region 的集合,计算得到当前还未分配的 Region,将他们放入待分配 Region 列表。

Master 下线

由于 Master 只维护表和 Region 的元数据,而不参与表数据 IO 的过程,Master 下线仅 导致所有元数据的修改被冻结(无法创建删除表,无法修改表的 schema,无法进行 Region 的负载均衡,无法处理 Region 上下线,无法进行 Region 的合并,唯一例外的是 Region 的 split 可以正常进行,因为只有 RegionServer 参与),表的数据读写还可以正常进行。因此 Master 下线短时间内对整个 hbase 集群没有影响。

从上线过程可以看到,Master 保存的信息全是可以冗余信息(都可以从系统其它地方 收集到或者计算出来)

因此,一般 HBase 集群中总是有一个 Master 在提供服务,还有一个以上的 Master 在等 待时机抢占它的位置。

集群规划

两台hbase master 安装在namenode节点
三台HRegionServer 安装在datanode节点上

HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。

所以这里要配置HBase高可用的话,只需要启动两个HMaster,让Zookeeper自己去选择一个Master Acitve。

准备工作

  • 先安装hadoop集群

安装

1、下载解压

[root@master] /usr/local$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.1.1/hbase-2.1.1-bin.tar.gz -P /opt/software/
[root@master] /opt/software$ tar -zxvf hbase-2.1.1-bin.tar.gz -C /usr/local/
[root@master] /usr/local$ mv hbase-2.1.1 hbase

2、修改hbase-env.sh文件

[root@master] /usr/local/hbase/conf$ vim hbase-env.sh

export JAVA_HOME=/usr/local/jdk
export HBASE_MANAGES_ZK=false

2.2 修改hbase-site.xml文件

<configuration>

    <!-- 指定hbase在HDFS上存储的路径 -->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://mycluster/hbase</value>
    </property>
    
    <!-- 指定hbase是分布式的 -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    
    <!-- 指定zk的地址,多个用“,”分割 -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>slave1.hanli.com:2181,slave2.hanli.com:2181,slave3.hanli.com:2181</value>
    </property>

    <property>
        <name>hbase.master.info.port</name>
        <value>16010</value>
    </property>

</configuration>

3、配置regionservers文件

[root@master] /usr/local/hbase/conf$ vim regionservers
 
slave1.hanli.com
slave2.hanli.com
slave3.hanli.com

4、 配置backup-masters

[root@master] /usr/local/hbase/conf$ vim backup-masters 

master2.hanli.com

5、将hbase目录分发到其他机器上

scp -rq /usr/local/hbase master2.hanli.com:/usr/local/hbase
scp -rq /usr/local/hbase slave1.hanli.com:/usr/local/hbase
scp -rq /usr/local/hbase slave2.hanli.com:/usr/local/hbase
scp -rq /usr/local/hbase slave3.hanli.com:/usr/local/hbase

6、 在所有节点上配置环境变量,并生效

[root@master] /usr/local/hbase/conf$ vim /etc/profile.d/hbase.sh

export HBASE_HOME=/user/local/hbase
export PATH=$PATH:$HBASE_HOME/bin
source /etc/profile

7、启动Hbase集群

在启动Hbase集群之前,需要先启动Hdfs集群和Zookeeper集群

[root@master] /usr/local/hbase/bin$ start-hbase.sh 
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.7.6/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hbase/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 /usr/local/hbase/logs/hbase-root-master-master.hanli.com.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.7.6/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hbase/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]
slave1.hanli.com: running regionserver, logging to /usr/local/hbase/logs/hbase-root-regionserver-slave1.hanli.com.out
slave2.hanli.com: running regionserver, logging to /usr/local/hbase/logs/hbase-root-regionserver-slave2.hanli.com.out
slave3.hanli.com: running regionserver, logging to /usr/local/hbase/logs/hbase-root-regionserver-slave3.hanli.com.out
master2.hanli.com: running master, logging to /usr/local/hbase/logs/hbase-root-master-master2.hanli.com.out

检查

[root@ansible] /etc/ansible/playbooks$ ansible test -m shell -a "jps"
master.hanli.com | SUCCESS | rc=0 >>
13634 HMaster
11043 DFSZKFailoverController
12070 ResourceManager
13926 Jps
11966 NameNode

slave3.hanli.com | SUCCESS | rc=0 >>
13827 DataNode
13413 JournalNode
15142 Jps
14007 NodeManager
14936 HRegionServer
11657 QuorumPeerMain

slave1.hanli.com | SUCCESS | rc=0 >>
21840 HRegionServer
18818 QuorumPeerMain
20840 DataNode
21020 NodeManager
22045 Jps
20382 JournalNode

master2.hanli.com | SUCCESS | rc=0 >>
12929 ResourceManager
17410 HMaster
17603 Jps
13000 NameNode
12124 DFSZKFailoverController

slave2.hanli.com | SUCCESS | rc=0 >>
13220 JournalNode
13636 DataNode
11462 QuorumPeerMain
13817 NodeManager
14987 Jps
14780 HRegionServer

HMaster进程端口为16000
HRegionServer客户端进程为16030
web界面端口为16010

web界面

master.hanli.com:16010

master2.hanli.com:16010

hbase shell操作

1、进入hbase命令行

[root@master] /usr/local/hbase/bin$ hbase shell

2、创建employee表

hbase(main):001:0> create 'employee','info'
Created table employee
Took 3.3137 seconds                                                                                                                  
=> Hbase::Table - employee

3、列出表

hbase(main):002:0> list
TABLE                                                                                                                                
employee                                                                                                                             
1 row(s)
Took 0.0833 seconds                                                                                                                  
=> ["employee"]

4、插入数据

hbase(main):003:0> put'employee','rowkey01','info:id','1001'
Took 0.5570 seconds                                                                                                                  
hbase(main):004:0> put'employee','rowkey01','info:name','Henry'
Took 0.0235 seconds                                                                                                                  
hbase(main):005:0> put'employee','rowkey01','info:address','Bangalore'
Took 0.0277 seconds                                                                                                                  
hbase(main):006:0> put'employee','rowkey02','info:id','1002'
Took 0.0155 seconds                                                                                                                  
hbase(main):007:0> put'employee','rowkey02','info:name','Messi'
Took 0.0304 seconds    

5、查看表数据

hbase(main):008:0> scan'employee'
ROW                                COLUMN+CELL                                                                                       
 rowkey01                          column=info:address, timestamp=1543419825420, value=Bangalore                                     
 rowkey01                          column=info:id, timestamp=1543419785421, value=1001                                               
 rowkey01                          column=info:name, timestamp=1543419807139, value=Henry                                            
 rowkey02                          column=info:id, timestamp=1543419842621, value=1002                                               
 rowkey02                          column=info:name, timestamp=1543419857162, value=Messi                                            
2 row(s)
Took 0.1655 seconds    

6、检索employee表中rowkey01的数据

hbase(main):009:0> get'employee','rowkey01'
COLUMN                             CELL                                                                                              
 info:address                      timestamp=1543419825420, value=Bangalore                                                          
 info:id                           timestamp=1543419785421, value=1001                                                               
 info:name                         timestamp=1543419807139, value=Henry                                                              
1 row(s)
Took 0.0959 seconds    

7、禁用表

hbase(main):010:0> disable'employee'
Took 1.3281 seconds         
                                                                                                         
hbase(main):011:0> get'employee','rowkey01'
COLUMN                             CELL                                                                                              

ERROR: Table employee is disabled!

For usage try 'help "get"'

Took 1.1028 seconds   

8、删除表

hbase(main):012:0> drop'employee'
Took 0.5492 seconds   
                                                                                                               
hbase(main):013:0> get'employee','rowkey01'
COLUMN                             CELL                                                                                              

ERROR: Unknown table employee!

For usage try 'help "get"'

Took 0.1431 seconds                                                                                                                  
hbase(main):014:0> 

HBase动态添加节点

HBase动态删除节点

参考 https://blog.csdn.net/carl810224/article/details/52174412

www.htsjk.Com true http://www.htsjk.com/hbase/42064.html NewsArticle hbase集群部署, 集群架构 集群相关概念 Client HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进...
相关文章
    暂无相关文章
评论暂时关闭