HDFS的读写流程及故障恢复机制

216 阅读1分钟

HDFS的读流程

  • 客户端向NameNode请求元数据信息
  • NameNode返回数据块位置列表,并返回一个输入流对象
  • 客户端根据namenode返回的datanode列表,就进选择一个datanode建立输入流连接
  • datanode向输入流中写数据,以packet为单位进行校验
  • 关闭输入流

HDFS的写流程

  • 客户端向namenode发送一个写的请求
  • namenode检查写的权限,若通过检查,将操作写入EditLog,返回datanode列表,和一个输出流对象
  • client对文件按照128MB进行切片
  • client与datanode建立一个pipeline连接
  • client向pipeline中发送第一个packet,这个packet在管道中由第一个datanode传送到最后一个,在管道的反方向上,会发送一个ack,直到第一个datanode收到ACK,并将ack发送给客户端
  • 关闭管道
  • 客户端向namenode发送完成信号

HDFS的故障恢复机制

  • 首先关闭pipeline连接
  • 将确认队列中没有收到ack的数据包写回到数据队列中
  • 所有正常的datanode进行版本升级,根据namenode租约信息,获取最新的时间戳版本
  • 正常的DataNode中选出一个主节点,与其他节点建立连接,获取每个datanode的当前数据块大小,选择最小值,将每个datanode都同步该大小
  • 重新建立管道连接
  • 管线中删除故障节点,并把数据写入正常的节点
  • 文件关闭后,namenode会发现副本不足,会在另一个节点上创建一个新的副本
  • namenode发现少了一个