面试官:你知道 HDFS 高可用机制吗?

HDFS 高可用机制

了解 HDFS 的朋友一定知道,在非高可用模式下的 HDFS 集群是一个主从架构,一般由一个 NameNode 和若干个 DataNode 组成。

对于这种情况,NameNode 是存在单点故障的风险的,即使单节点 NameNode 可以减少数据一致性带来的烦恼,可一旦 NameNode 挂掉了,整个集群就直接瘫了。

为了避免这种情况,在生产中需要配置 HDFS 高可用模式,对 NameNode 配置主备节点。我们将主节点称为 Active NameNode,备用节点称为 Standby NameNode.

ZKFC

主备节点的切换,一般需要依赖于 zookeeper,而对 NameNode 状态监控及切换,主要靠 ZKFC(ZooKeeperFailoverContronller) 来实现。

ZKFC 内置了 zookeeper 的客户端操作,它会定期向 NameNode 发起健康检查的请求,若 NameNode 没有正常返回,则表示该节点可能出现了问题。

同时,如果 Active NameNode 处于健康状态,它会持有一个独占锁,ZKFC 会尝试去获取该锁,若获取成功,则表示 Active NameNode 可能有问题,则需要重新选举切换备节点了。

主备数据同步

假如 Active NameNode 真的挂掉了,Standby NameNode 切换为主节点,需要注意一个问题,即主备节点之间的数据一致性问题。所以需要讨论一下主备节点间的数据同步情况。

同步阻塞方式

若数据采用同步阻塞的方式进行同步,即 Active NameNode 把数据发给 Standby NameNode 后,等待 Standby NameNode 收到并返回确认信息。

这种方式可以保证数据的一致性,但如果 Standby NameNode 出现问题,或者处理时间比较长,那 Active NameNode 则需要持续等待,会导致集群可用性较差。

异步非阻塞方式

若数据采用异步非阻塞的方式进行同步,即 Active NameNode 把数据发给 Standby NameNode,不等待其确认就认为其成功了。

但是如果 Standby NameNode 短暂挂掉了,那么数据一致性就成了问题。

JournalNode

为了均衡 NameNode 主备节点切换的一致性与可用性,HDFS 引入了 JournalNode.

JournalNode 是一个中转节点,加入它后,数据的同步过程就发生了改变: Active 将数据同步给 JournalNode 节点,然后 Standby 会从 JournalNode 获取需要同步的数据。

这样即使 Standby 节点挂掉了或是其他问题,元数据也还是存储在了 JournalNode,后续只需要再从 JournalNode 取即可。

这时候可能有朋友会问了,那 JournalNode 挂了不也是一样?

没错,为此,可以搞多几台节点,将 JournalNode 作为一个集群,提高其可靠性。

Active 会和 JournalNode 集群的主节点,主节点再将数据发送给其他节点,只要过半的节点完成了数据存储,主节点就会返回成功信息给 Active NameNode.

总结

综上,HDFS 高可用模式下的架构图就如图所示。

希望文章对你有帮助,欢迎点赞加关注!

#大数据##面试#
大数据从入门到放弃 文章被收录于专栏

写点大数据相关的内容,一起交流进步

全部评论

相关推荐

1 5 评论
分享
牛客网
牛客企业服务