当前位置:首页 > 经验

简述hadoop和opc的通信 hadoop文档仓库

先看下数据写入的流程图

图文详解大数据Hadoop分布式文件系统HDFS文件写流程

一个packet写入流程

以文字形式梳理上述步骤

目标

  • 将一个本地文件a.txt上传到hdfs文件系统中,hdfs中默认blockSize=128M
  • 复制因子默认为3

详细步骤

  1. 客户端根据配置信息与NameNode建立连接,并告诉NameNode,将a.txt文件上传到hdfs的/tmp/a.txt路径
  2. NameNode生成一个值为1的blockId(用来创建对应blockId的block文件),并根据复制因子3返回对应个数的可用来存放当前block的DataNode节点到客户端,比如(DN1、DN2、DN3)
  3. 客户端与DN1建立连接然后将blockId、DN2、DN3等相关数据先发送给DN1
  4. DN1接收到这个信息之后与DN2建立连接然后将blockID、DN3等相关数据发送给DN2
  5. DN2接收到这个数据之后与DN3建立连接然后将blockID发送给DN3
  6. 客户端读取本地文件内容并放入内存缓冲区中,当缓冲区满,开始将缓冲区中的数据取出,并计算校验和(每512字节的实际数据会计算出一个4字节的校验和,这512字节的数据和校验和称为一个chunk),然后这个chunk写入到一个dataPacket中,当dataPacket中chunk的数量或实际数据大小达到一定阈值后将这个dataPacket发送给DN1并将这个dataPacket放入到一个ackQueue队列中(当客户端接收到DN1的确认写入的信息之后才将这个dataPacket从队列中移除)
  7. DN1接收到客户端发送的数据之后,将dataPacket中的数据和校验和写入本地文件中,然后将dataPacket发送给DN2
  8. DN2接收到DN1发送的数据之后,将dataPacket中的数据和校验和写入本地文件中,然后dataPacket发送给DN3
  9. DN3接收到DN2发送的数据之后,将dataPacket中的数据和校验和写入本地文件中,然后发送确认信息给DN2
  10. DN2接收到DN3的确认消息之后将DN2自己的确认信息和DN3的确认信息发送给DN1
  11. DN1接收到DN2发来的确认信息后(包含DN2和DN3的确认信息),将DN1自己的确认信息和DN2、DN3的确认信息一起响应给客户端
  12. 客户端接收到信息之后对DN1、DN2、DN3的确认信息进行验证,验证成功,则将ackQueue中的dataPacket移除
  13. 客户端继续执行同样的操作,直到发送出的真实数据量达到blockSize大小,此时一个block的写入完毕

注意

  • 当客户端发送数据的字节数量达到一个blockSize之后,会向NameNode重新请求一个新的blockId及相关的DataNode信息哦

下面以流程图的方式加深数据写入DataNode过程的理解

图示(以一个packet写入为例)

图文详解大数据Hadoop分布式文件系统HDFS文件写流程

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信

相关文章