zookeeper

1 ZK到底是啥?

zookeeper是个服务,服务的对象我们都称为客户端,在大数据生态里面的客户,hadoop、hbase、hive…组件都是分布式部署,这些组件们利用zookeeper的服务做了一些维持自身平衡的事情,比如:

集群管理、

master选举、

消息发布订阅、

数据存储、

分布式锁  等

作为整个集群的心脏的存在,zookeeper本身也是分布式,只有在分布式的基础上才能实现高度可靠。


zk的数据结构类似一颗树,所有的节点都称为znode,

所有带子节点的znode也就是图中的蓝色的方框,我们都可以通俗理解为linux系统的目录,

最外层的znode,也就是图中的黄色的,可以理解为文件。

2、Znode 须知

(1)节点类型

Znode 分为两种:

临时节点:该节点的生命周期依赖于创建它们的会话。一旦会话结束临时节点将被自动删除,当然可以也可以手动删除。临时节点不允许拥有子节点。

永久节点:该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

3、基本功能

1 文件系统

zk和 linux 的文件系统很像,也是树状,这样就可以确定每个路径都是唯一的。

但是zk的所有Znode不管父子节点都能带数据,但linux的目录不能。

所以zk里面的路径不能叫文件夹也不能叫文件,统一称为Znode

2 集群管理

2.1 节点的加入和退出

a 在zk中创建持久节点 /parent 作为父节点, 父节点监听子节点的变化,

b client通过注册到zk,会在/parent 下创建临时节点,

c 临时节点的特性时当客户端与zk断开连接时会自动删除,

d 不论是创建和删除,zk server都会监听,通过Watcher监听与通知机制,并且会把变动的结果通知到到其它client,这样,其它所有client都知道了其它兄弟们的存活情况

2.2 Master的选举

a 各个master注册到zk的目录下,创建临时节点,成功在zk创建临时节点的目录,也就被选举为Master

b 其它备用的Master就会收到监听zk里面临时节点的变化,一旦删除,就会争夺创建临时节点的权利成为新的Master。

2.3 分布式锁

(1)排他锁

排他锁,又称写锁或独占锁。如果事务T1对数据对象O1加上了排他锁,那么在整个加锁期间,只允许事务T1对O1进行读取或更新操作,其他任务事务都不能对这个数据对象进行任何操作,直到T1释放了排他锁。

(2)共享锁

共享锁,又称读锁。如果事务T1对数据对象O1加上了共享锁,那么当前事务只能对O1进行读取操作,其他事务也只能对这个数据对象加共享锁,直到该数据对象上的所有共享锁都被释放。

共享锁与排他锁的区别在于,加了排他锁之后,数据对象只对当前事务可见,而加了共享锁之后,数据对象对所有事务都可见。

2.4、监听与通知机制

一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。

Watcher机制的特点:

1 注册的监听是一次的,如果你还需要监听第二次,那么就要重新注册。数据发生改变时,一个watcher event会被发送到client,但是client只会收到一次这样的信息

2 watcher event异步发送 watcher 的通知事件从server发送到client是异步的

4 实际应用

1 hadoop 

Hadoop HA:不论是namenode的HA或是yarn的HA,都通过zkfc机制来选举控制只有一个active状态的namenode和resourcemanager在工作,这里通过上面描述的master的选举功能,采用的是排他锁完成的选举,我们通过zk可视化客户端可以清晰地看到上图Znode的结构,yarn和hdfs的路径下各有一把锁的标记文件,同时文件的内容也带有active节点的信息。


yarn application容错:在yarn上跑任务时,所有application启动时都会把application的信息写入zk里面,右边是写入的一堆序列化的二进制信息,假如这时active状态的resourcemanager突然挂了,standby的转换成active状态后会接管挂之前的application,这样resourcemanager主从的切换对正在yarn运行的application不影响。

yarn的容错机制也带来一系列问题:

一个spark任务在yarn运行突然失败了,默认会重试,重试前会把上一次的driver端的信息写入zk,这时如果driver端的数据太大,比如你代码里broadcast一个很大的文件,这样很容易把zk写满写挂,直接导致zk不能工作,zk停止工作直接的代价是整个集群不能正常工作,简直毁灭性的代价,有幸经历过一次,后续会整理后发出来。

如上图的application的信息存放在zk里面是持久化的节点,不会自动删除,当yarn的历史任务运行太多的时候,zk里面会存一堆的application的历史信息,导致zk的内存占用越来越大,也影响性能,需要写脚本手工清除

2、hbase

zk在hbase应用的功能主要有两个:

hbase regionserver 向zookeeper注册,提供hbase regionserver状态信息(是否在线),HMaster通过watcher监听regionserver的存活情况,并不是HMaster跟Regionserver通过心跳机制检测。

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

3、kafka

zk在kafka的应用功能主要有三个:

broker的注册:我们上面描述的zk一个基本的功能是做集群的管理,所有broker会把自己的id号注册进zk的Znode里面,通过事件监听的机制,各个broker之间都知道所有兄弟的存活情况。当有broker启动时,会在zk里面创建Znode,并通知其它broker;当有broker下线或挂掉时,同样会通知其它broker。

topic的注册:当topic创建时,kafka会把topic的name、partition、leader、topic的分布情况等信息写入zk里面,当broker退出时,会触发zookeeper更新其对应topic分区的isr列表,并决定是否需要做消费者的负载均衡。

consumer的注册:当有新的消费者消费kafka数据时,会在zk中创建Znode保存一些信息,节点路径为ls /consumers/{group_id},其节点下有三个子节点,分别为[ids, owners, offsets]。在常用的offset的维护中,应用消费kafka数据时要设置参数enable.auto.commit为true才会自动更新offset。

4、hive

zk在hive的两个主要应用:

hiveserver2的选举:在上面的namenode选举中用的是排他锁,而hiveserver2用的锁是共享锁,


可以看到有两个节点在zk中注册,会创建有序的临时节点,每个Znode都有一串数字后缀,zk默认是同一个锁路径下id最小的那个znode获取锁,也就是上图中的后缀000000228所代表的hiveserver2节点是主的状态,假如这个节点挂了,这个znode会自动删除,watcher机制会通知另一个hiveserver2上位。

表数据锁:Hive 锁机制是为了让 Hive 支持并发读写的原子性而设计的 特性,比如,一个sql在insert数据,这时需要锁住表,不让其它sql去读取表数据,否则会有问题。等到释放锁之后,也就是insert完了其它客户端才能读取这个表,hive表的锁机制非常有必要,通过hive.support.concurrency=true来开启,后面打算专门一节来讲hive的锁机制,这里就不详述了。


本文主要参考了  https://blog.csdn.net/u013289115/article/details/105334765 

感谢 喜剧之皇 大佬的分享,如果本文能获得收入,我将全部转交给他

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

推荐阅读更多精彩内容