【Mac大数据开发】第八篇-HDFS读写机制详解

1. 写数据机制

Hadoop写入数据的机制和流程如下图所示
简述:客户端与namenode创建连接,namenode返回可以存放副本的datanode列表。客户端与datanode建立连接,datanode之间建立pipeline通道。文件以packet形式向首个datanode传输,并通过pipline自动传送给其他节点。所有节点收到后,进行确认,从发送队列和确认队列中移除packet。

【Mac大数据开发】第八篇-HDFS读写机制详解_第1张图片
上传流程
  1. 客户端首先通过Distributed FileSystem向NameNode发送上传文件请求,NameNode进行校验文件是否已经存在,是否有权限创建。校验通过记录文件,并返回FSDataOutputStream
  2. 客户端写数据,内部先将输出流数据切分成packet,拍成一个写出的data queue
  3. 客户端写出时,先从NameNode获取到应该上传的DataNode地址,将他们拍成一个链路通道,先传第一个节点,第一个节点又将数据通过通道传输到第二个节点。以此类推
  4. 客户端还保存一个确认数据队列,ack queue,同样又packet组成。当节点确认一个packet后,就移除ackqueue中对应的数据。
  5. 全部传输完成关闭FSDataOutputStream
  6. 等待最后一个ack信息,并标记文件为完成状态

注:如果通道中有节点异常,会执行以下同步操作(对客户端上层是无感的)

  • 通道会停止该节点的传输
  • 把ack packet的数据拷贝到dataqueue(放置丢包)
  • 删除datanode生未完成的block,将剩余的数据发送到另外的节点
  • 完成后datanode自动复制

2. 数据副本的机架感知

为了保证数据副本安全的同时提高数据传输效率,Hadoop会根据机架算法选择距离较近的机器。
根据数据中心、机架、节点,可以定义以下四种距离:

  • Distance(同中心、同机架、同节点) = 0
  • Distance(同中心、同机架、异节点) = 2
  • Distance(同中心、异机架、 - ) = 4
  • Distance(异中心、 - 、 - ) = 6

副本节点的选择如下
为了保证数据同步的高效,不存在不同中心的选择。以三个副本为例:

  1. 第一个副本 - 选择客户端所在的节点(客户端属于集群)或随机节点(客户端不属于集群-web)
  2. 第二个副本 - 与副本一同机架的随机节点
  3. 第三个副本 - 与副本一、二不同机架的随机节点
【Mac大数据开发】第八篇-HDFS读写机制详解_第2张图片
副本节点选择

3. 读数据机制

简述:
客户端从namenode获取要下载的文件block块列表;
客户端按顺序从各个节点创建流,获取下载数据。完成当前节点,执行下一节点;
最终执行block的合并;
如果中间某个节点的数据出现错误,客户端会上报给namenode,并返回其他副本的地址,重新下载。


【Mac大数据开发】第八篇-HDFS读写机制详解_第3张图片
下载机制

你可能感兴趣的:(【Mac大数据开发】第八篇-HDFS读写机制详解)