Zookeeper
-
核心: 不用开发, 要会用, 架构设计
-
定义:分布式协调服务组件 「帮别人解决问题的组件」
-
功能1:
-
辅助选举(HA高可用–对于主从架构集群,通过设置备份节点从而解决单点故障)
两个节点同时到ZK中争抢创建一个临时节点(生命周期随会话), 失败的节点监听active节点
-
HDFS中:有2个NameNode,一个是active(选举),一个是standby
Hadoop中的高可用机制需要zookeeper协调主节点(namenode)哪一个工作,哪一个standby
-
YARN中:有两个ResourceManager,一个是active(选举),一个是standby
-
Spark中:StandAlone也需要的主节点(Master)和从节点(worker),因此有2个Master,需要选举active
-
Hbase、Kafka…也如此
-
-
-
功能2:
-
存储元数据
HDFS分布式以blk块(128M)的形式存储在各个DataNode中,保存数据信息的数据(数据多大、类型、分成了几块、存储位置等)称为「元数据」
「元数据」存储在内存中,但因为内存不稳定(故障、关机清空)只能用于临时存储(保存最新最全的那一份),不用长时间且作为唯一存储形式,因此元数据会以不同形式:存储在不同的地方
-
以文件形式:存在 HDFS
fsimage(上次持久化在磁盘中的内存镜像文件)+edits(内存操作日志)=内存中最新最全的元数据(保存在NameNode中,定期通过SecondaryNameNode合并后持久化到磁盘中), 实际上这个文件(最新最全的元数据)会被加载到内存思考🤔:没有SSN行不行 回答:可以,NN启动时也会合并镜像和日志,但没有SSN的帮助(更新镜像)镜像不更新的情况下,日志文件累增,会影响nn的启动速度 NN负责3件事:管理所有从节点、负责管理元数据、负责接收客户端请求
-
-
RDBMS(MySQL):,Sqoop、HIVE(MySQL)、Oozie、Hue的元数据存在关系型数据库中
用RDBMS存储元数据的软件,一般不是分布式,请求量相对较小
-
ZooKeeper: Hbase、Kafka
用ZK存储元数据的软件,一般是分布式软件,请求并发量比较高,因为只有分布式才能扛住高并发
-
-
ZK怎么保证自己不出问题?(软件出问题或者机器出问题)
- ZK每个节点上存储的数据内容都是一致的
- 如何实现的? ZK是一种特殊的主从架构—「公平分布式架构」
主节点(leader)负责写,主节点将所有的数据广播给从节点(同步),保证所有节点数据一致 - 如果主节点故障了呢? 每个节点都有权利选举成为leader,不需要额外的主节点作Standby 因为ZK的每个节点都可以接收读写请求
- 因此ZK只能作为一个小数据的存储系统
- 如何实现的? ZK是一种特殊的主从架构—「公平分布式架构」
- ZK每个节点上存储的数据内容都是一致的
思考🤔:ZK的个数能不能是偶数个
可以,但最好是奇数,选举和机器个数的奇偶数没有关系,投票超过半数即可结束
关于zookeeper想了解的可以留言哦~