Hadoop (HDFS) HA架构通信机制
Posted 守护石论数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop (HDFS) HA架构通信机制相关的知识,希望对你有一定的参考价值。
HA高可用架构体系
首先,HDFS HA架构,一般指的是namenode的高可用,即:
1、一主一备两个namenode,他们通过Journalnode集群实现元数据等状态保持一致,一个出现健康问题,另一个就切换成新主,保证namenode稳定局面是保证hdfs集群稳定的关键所在
2、通过ZKFC持续监听两个namenode健康状态监控,若活跃节点出现健康问题,将由zookeeper对namenode锁释放,实现namenode高可用切换。
通过一张图我们除了看看namenode高可用通信机制,也同时看看datanode与namenode的通信情况:
如上图所示:
1. NameNode一主一备,当然是在不考虑联邦模式(Federation,联邦模式说白了也就是namenode的水平化伸缩,目的就是别把元数据和RPC操作都集中到一个地方,变成瓶颈,适合超大规模数据存储)的情况下。两个namenode通过对zookeeper集群目录的活跃锁争夺,来明确谁是活跃的(active)。
2. FailoverControllerActive(ZKFC)每个namenode上都有一个这样的服务,就是监控namenode健康,并把健康心跳不断报告给zookeeper,活动namenode不心跳了,zookeeper就把锁给另一个备着的namenode,那么它就成为Active namenode状态了。
3. 由多个Journalnode组成QJM高可用集群,提供active namenode各项元数据的状态信息存储服务,并为备用namenode提供这些信息状态同步服务,因此备用namenode就可以随时等待active namenode故障时,zookeeper对活跃锁的释放,使其切换成新的活动首领。
namenode和datanode直接通信关系
它们两个之间一种是直接通信的情况,另一种是客户端与它们两者建立直接通信(相当于两者是间接通信关系了)。
1. datanode初始化阶段,会创建namenode的代理对象,通过RPC调用,将datanode注册给namenode,包括存储信息、主机地址、UUID、端口、版本等等...,而namenode接收到datanode信息后,会记录到自己的网络拓扑数据结构中,namenode也是根据网络拓扑结构为客户端提供最佳位置(最近)的datanode副本。
2. 注册好以后,datanode通过namenode代理向其发送心跳(heartbeat),一般3秒建立一次心跳连接,如果在超过约定间隔,namenode探测到没与datanode的建立心跳,namende会认为这个datanode节点挂了,然后寻求一个新的datanode数据节点,根据相应挂掉节点的副本数据,为新的节点增加副本数据。
namenode和datanode间接通信的关系
由客户端主导并参与其中的通信机制——namenode和datanode之间没有直接通信关系,始终通过客户端保持一种间接通信的关系。
HDFS客户端读取流程概括图
如上图所示:
1. 客户端向hdfs namenode节点发送Path文件路径的数据访问的请求
2. Namenode会根据文件路径收集所有数据块(block)的位置信息,并根据数据块在文件中的先后顺序,按次序组成数据块定位集合(located blocks),回应给客户端。
3. 客户端拿到数据块定位集合后,创建HDFS输入流,定位第一个数据块所在的位置,并读取datanode的数据流。之后根据读取偏移量定位下一个datanode并创建新的数据块读取数据流,以此类推,完成对HDFS文件的整个读取。
HDFS客户端写入流程概括图
如上图所示:
1. 客户端先通过namenode代理,请求namenode创建数据块和分配datanode。
2. 客户端通过HDFS输出流的方式将dfs包写入namenode指定的datanode数据块中,datanode通过写入链的方式完成其他副本的数据块写入,并依次返回完成确认。
3. 客户端的HDFS输出流在得到完成确认(ACK)之后,关闭HDFS文件流,并向namenode汇报完成。
以上是关于Hadoop (HDFS) HA架构通信机制的主要内容,如果未能解决你的问题,请参考以下文章
大数据面试题——hadoop(hdfsmapreduceyarn)
Hadoop系列之HDFS架构
Hadoop_HDFS HA 及解决方案
Hadoop2.7.6_07_HA高可用
Hadoop的HA机制浅析
Hadoop-2.8.5的HA集群搭建