zookeeper在HBase中的应用

HBase部署相对是一个较大的动作,其依赖于zookeeper cluster,hadoop HDFS。

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数据表的表分区数据维护。

参考:http://koven2049.iteye.com/blog/1150484

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性。

HBase中的znode

ZooKeeperWatcher的构造函数的作用就是初始化一个ZooKeeper连接并设置watcher。因此在ZookeeperWatcher初始化时创建的节点,表示只要HBase在连接ZooKeeper时就会创建这些节点。

1、/hbase的子节点:

2、HBase中的list命令和/hbase/table下的子节点对比:前者不包括-ROOT-和.META.表:

3、启动HBase时,/hbase/unassigned节点的变化:

ZooKeeperListener.java

packageorg.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切换时

Zookeeper交流遗留问题

1、Follower和Observer能否写数据,二者主要区别是什么?

ObserverRequestProcessor会将收到的任何修改状态的请求都发送给leader。遇到以下操作时,observer和follower都会发送请求给leader

switch(request.type) {

caseOpCode.sync:

zks.pendingSyncs.add(request);

zks.getFollower().request(request);

//zks.getObserver().request(request);

break;

caseOpCode.create:

caseOpCode.delete:

caseOpCode.setData:

caseOpCode.setACL:

caseOpCode.createSession:

caseOpCode.closeSession:

caseOpCode.multi:

zks.getFollower().request(request);

//zks.getObserver().request(request);

主要区别:Observer不参与leader选举和投票。

Follower可以写数据,Observer在客户端写数据时不参与,主要通过sync操作更新数据。

二者的主要区别是Follower参与选举和投票,Observer不参与选举和投票。

投票在写数据过程中的作用:客户端发送写数据操作时,follower或者Observer将写数据请求转发给leader,然后leader发送给具有投票权(也就是follower和leader)的角色;当这些节点有半数以上的节点反馈给leader投票,leader则认为写数据成功。

observer是zookeeper-3.3版本新添加的一个角色,,他们的引入是为了解决zookeeper集群扩大后,由于网络可靠性下降可能导致的拜占庭将军问题。

2、写数据的原子性如何保证?

ZooKeeper中读写数据都具有原子性。

读数据的原子性是指读某个节点的数据时,会将该节点所有的数据都返回给客户端。

写数据的原子性是指写数据不会部分失败或部分成功。一个成功的写操作必须保证被写入到大部分zookeeper服务器的永久存储上(不是上次说的所有服务器)。

3、/hbase/rs节点的子节点是持久节点还是临时节点?

临时节点。可以通过在shell脚本查看/hbase/rs节点的数据及其子节点的数据,/hbase/rs是持久节点,其子节点是临时节点,二者如下图。

/hbase/rs是持久节点:

这个znode[linux-jay1.jay,20020,1345715787547]是个临时znode,当该regionserver关闭后,这个znode会消失,那么设置了watcher的master就会第一时间感知到regionserver的退出。

备注:如果是持久节点ephemeralOwner的值为0。

Get的各个参数解释:

czxid : The zxid of the change that caused this znode to be created.

mzxid : The zxid of the change that last modified this znode.

ctime : The time in milliseconds from epoch when this znode was created.

mtime : The time in milliseconds from epoch when this znode was last modified.

version : The number of changes to the data of this znode.

cversion : The number of changes to the children of this znode.

aversion : The number of changes to the ACL of this znode

ephemeralOwner

: The session id of the owner of this znode if the znode is an

ephemeral node. If it is not an ephemeral node, it will be zero.

dataLength : The length of the data field of this znode.

numChildren : The number of children of this znode.

4、sync操作的作用是什么?

sync操作的作用是使客户端的znode视图与ZooKeeper同步,由于读操作可能会存在连接的某台zookeeper服务器上的数据并不是最新数据,因此zookeeper允许客户端用sync操作自身更新(如何实现涉及到ZooKeeper内核,目前还没有看这部分内容)。

5、watcher的设置是一次性的,为什么要如此设计?

Watch是由ZooKeeper服务的操作来设置,同时由服务的其他操作来触发,watcher只被触发一次。比如一个客户端对某个znode调用了exists操作并在这个节点上加了一个Watch,如果该节点不存在,则exists操作返回false。如果一段时间后,这个znode被另外一个客户端创建了,该Watch将被触发,通知第一台客户端znode被创建的消息。

由于是针对操作而设置的,因此很容易区别上次交流时所说的状态。ZooKeeper在读操作exists、getChildren、getData时设置watch,这些操作都由写操作create、delete和setData来触发。

如此看来,并不是所有的操作都会触发watch,也并不是所有的操作都会设置watch。而且通过znode的路径可以确定是哪个znode发生了改变,通过操作的类型可以确定该节点发生了何种改变。个人认为这样设置的确增加了通用性,同时也减少了资源消耗。

另外

ZooKeeper提供配置服务的手段是:用znode的路径来记录键,用znode的数据来存储值,因此正好可以使用znode来存储键值对。

比如,/hbase/root-region-server的路径表示存储的是-ROOT-表所在服务器的地址,然后用该znode的值来存储其地址值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容