写点什么

HDFS 时序图

用户头像
ashuai1106
关注
发布于: 2020 年 07 月 29 日
HDFS时序图

请画出 DataNode 服务器节点宕机的时候,HDFS 的处理过程时序图。

HDFS 架构图



HDFS 采用的 master/slave 架构。一个 HDFS 集群通常由一个 Active 的 NameNode 和若干 DataNode 组成,为了避免 NameNode 单点问题,通常会做一个 NameNode 的 standby 作为备份。在整个 hdfs 涉及到许多的核心概念

  • NameNode: NameNode 是一个中心服务器,负责管理文件系统的名字空间以及客户端的访问,比如文件的打卡、关闭、重命名文件或者目录。它负责确定数据块到具体的存储节点的映射。在其同意调度下进行数据块的创建、删除、复制。

  • DataNode: DataNode 是 HDFS 的实际存储节点,负责管理它所在节点的存储;客户端的读写请求。并且定期上报心跳和块的存储位置。

  • Block: HDFS 上文件,从其内部看,一个文件其实是被分成一个或者多个数据块存储的,这些数据块存储在一组 DataNode 上。

  • Edits: 在 HDFS 发起的创建、删除等操作其实是一个事物,事物在 NameNode 上以 Edit 对象存储在 edits 文件中,持久化在 NameNode 的本地磁盘上。

  • FSimage: FSimage 是 NameNode 的元数据存储快照,持久化在 NameNode 的本地磁盘上。


Client:切分文件;访问或通过命令行管理 HDFS;与 NameNode 交互,获取文件位置信息;与 DataNode 交互,读取和写入数据。

NameNode:Master 节点,只有一个,管理 HDFS 的名称空间和数据块映射信息;配置副本策略;处理客户端请求。

DataNode:Slave 节点,存储实际的数据;执行数据块的读写;汇报存储信息给 NameNode。


其中,HDFS 的读写时序图如下:


服务节点宕机时候分读异常和写异常,流程处理如下


HDFS 读取发生异常处理

       如果在读数据的时候,DFSInputStream 和 datanode 的通讯发生异常,就会尝试正在读的 block 的排第二近的 datanode,并且会记录哪个 datanode 发生错误,剩余的 blocks 读的时候就会直接跳过该 datanode。DFSInputStream 也会检查 block 数据校验和,如果发现一个坏的 block,就会先报告到 namenode 节点,然后 DFSInputStream 在其他的 datanode 上读该 block 的镜像

HDFS 读操作设计思考

       客户端直接连接 datanode 来检索数据并且 namenode 来负责为每一个 block 提供最优的 datanode,namenode 仅仅处理 block location 的请求,这些信息都加载在 namenode 的内存中,hdfs 通过 datanode 集群可以承受大量客户端的并发访问。

HDFS 文件写入失败

       如果在写的过程中某个 datanode 发生错误,会采取以下几步:

       1.pipeline 被关闭

       2.为了防止防止丢包 ack quene 里的 packet 会同步到 data quene

       3.把产生错误的 datanode 上当前在写但未完成的 block 删

       4.block 剩下的部分被写到剩下的两个正常的 datanode

       5.namenode 找到另外的 datanode 去创建这个块的复

       这些操作对客户端来说是无感知的。


读写失败处理时序图如下:


https://blog.csdn.net/woshiwanxin102213/article/details/19990487?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight

用户头像

ashuai1106

关注

还未添加个人签名 2017.10.20 加入

还未添加个人简介

评论

发布
暂无评论
HDFS时序图