欢迎投稿

今日深度:

zookeeper和hbase,

zookeeper和hbase,


Client客户端、Master、Region都会通过心跳机制(RPC通信)与zookeeper保持联系。

当在Hbase中插入或读取数据时流程如下;

1、在Client中写一个Java类运行,客户端只需要连接zookeeper客户端会从zookeeper中得到Regionserver的映射信息,之后客户端会直接连接到Region Server,

2、RegionServer在启动之后会向zookeeper汇报信息(通过心跳RPC):本身有多少Region,有哪些数据,当前机器的运行状况等等。

3、master 启动后也会向zookeeper汇报信息,并且从zookeeper中得到Region Server的一些信息。例如当一台Region Server当掉之后,zookeeper会得知,之后Master也会通过zookeeper得到该Region Server当掉的信息。

4、客户端Client在做DDL(创建,修改,删除表)时,会通过zookeeper获取到Master的地址,而Master中保存了表的元数据信息,之后Client就可以直接与Master进行通信,进行表的DDL操作

5、当Region中数据不断增大,MAster会向Region Serve发送指令,讲分割出来的Region进行转移,

Zookeeper

1】保证任何时候,集群中只有一个活跃的master,因为为保证安全性会启动多个Master

2】存储所有Region的寻址入口。知道那个Region在哪台机器上。

3】实时监控Region Server的状态,将Region Server的上下线的信息汇报给HMaster。(因为每间隔一段时间,RegionServer与Master都会zookeeper发送心跳信息),Region Server不直接向Master发送信息的原因是为了减少Master的压力因为只有一个活跃的Master,所有的RegionServer同时向他汇报信息,压力太大。而若有100台RegionServer时,Region Server可以分每10台向一个zookeeper汇报信息,实现zookeeper的负载均衡。

4】存储Hbase的元数据(Schema)包括,知道整个Hbase集群中有哪些Table,每个 Table 有哪些column family(列族)

Client

Client包含了访问Hbase的接口,Client维护这些Cache来加快对Hbase的访问,比如Region的位置信息,zookeeperzookeeper保证了任何时候群众只有一个Master存储所有的Region中的寻址入口还有实时监控RegionServer上的状态,将RegionServer的上线和下线信息实时通知给Master,存储hbase 的Schema,包括有哪些table,每个Table有哪些Column Family

Master

Master有以下特点:

1、为RegionServer分配Region

2、负责RegionServer的负载均衡

3、发现失效的RegionServer并重新分配其上的Region

4、HDFS上的垃圾文件回收

5、处理Schema更新请求

RegionServer有以下几点:

1、RegionServer维护Master分配给他的 Region,处理对这些Region的IO请求

2、RegionServer负责切分在运行过程中变得过大的Region,

因此可看出,Client访问Hbase上的数据的过程并不需要Master的参与(寻址访问zookeeper和Region Serve,写数据访问Region Server)Master仅仅维护着table和Region的元数据信息。负载很低。


链接:https://www.jianshu.com/p/4d3f31bf158d

   Zookeeper作用在于:

                1、hbase regionserver 向zookeeper注册,提供hbase regionserver状态信息(是否在线)。

                2、hmaster启动时候会将hbase系统表-ROOT- 加载到 zookeeper cluster,通过zookeeper cluster可以获取当前系统表.META.的存储所对应的regionserver信息。

 

zookeeper是hbase集群的"协调器"。由于zookeeper的轻量级特性,因此我们可以将多个hbase集群共用一个zookeeper集群,以节约大量的服务器。多个hbase集群共用zookeeper集群的方法是使用同一组ip,修改不同hbase集群的"zookeeper.znode.parent"属性,让它们使用不同的根目录。比如cluster1使用/hbase-c1,cluster2使用/hbase-c2,等等。

 

        HMaster主要作用在于,通过HMaster维护系统表-ROOT-,.META.,记录regionserver所对应region变化信息。此外还负责监控处理当前hbase cluster中regionserver状态变化信息。

        hbase regionserver则用于多个/单个维护region。

        region则对应为hbase数据表的表分区数据维护。

hbase.zookeeper.zookeeperwatcher.java 类

ZooKeeper Watcher.  One instance of this is instantiated for each Master, RegionServer, and client process. 每一个Master、RS和客户端进程都会创建一个zookeeperwatcher的实例。

1、初始化ZooKeeper连接和watcher

①      设置节点名称

②      ZKUtil.connet

③      如果连接成功,则新建一些节点,如ZKUtil.createAndFailSilent(this, baseZNode); 如果节点存在,则不再创建。不加watch。此处创建的是持久性节点,并具有open access性。

ZooKeeperListener.java

package org.apache.hadoop.hbase.zookeeper;

抽象类,实现HBase内部ZooKeeper事件的监听。ZooKeeperWatcher会执行适当的方法来实现该类。为了从watcher接收到事件,每个监听者必须要通过ZooKeeperWatcher注册。子类需要重写需要的方法。值得注意的是监听者的watcher在执行这些方法时会引起阻塞,因此不能长期运行这些方法。

在构造函数中就初始化了一个ZooKeeperWatcher。

 

监听的事件包括nodeCreated(String path)、nodeDeleted(String path)、nodeDataChanged(String path)、nodeChildrenChanged(String path)。

ActiveMasterManager.java

作用:处理所有master方面的master选举的事务。监听并回应master znode的zookeeper通知,包括nodeCreated(节点创建)和nodeDeleted(节点删除)。

包含阻断方法,备master等待主master失败。?

在HMaster构造函数的blockUntilBecomingActiveMaster方法中实例化该类。

 

实现了抽象类ZooKeeperListener中的nodeCreated(节点创建)和nodeDeleted(节点删除)方法。

 

 

HBase中使用zookeeper的场景(未完)

1、主备master切换时

应用场景

使用类

调用函数

备注

Master启动

HMaster

HMaster(构造函数)

连接zookeeper

主备master切换

HMaster

becomeActiveMaster(MonitoredTask startupStatus)

注册一个Listener

client连接HBase

 

HConnectionManager

 

 

HConnectionImplementation

 



www.htsjk.Com true http://www.htsjk.com/hbase/42411.html NewsArticle zookeeper和hbase, Client 客户端 、Master、Region都会通过心跳机制(RPC通信)与 zookeeper 保持联系。 当在Hbase中插入或读取数据时 流程 如下; 1、 在Client中写一个Java类运行, 客户端 只需要...
相关文章
    暂无相关文章
评论暂时关闭