ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HDFS的写流程

2021-06-03 10:04:57  阅读:183  来源: 互联网

标签:HDFS 上传 流程 DataNode NameNode 数据包 节点 客户端


1. HDFS的写流程
  A. 简单流程描述


    a. 客户端发起Create File,目的是获取HDFS文件的输出流。
    b. namenode收到请求后。namenode收到请求后会检测权限,以及路径的合法性。
    c. 如果检测都通过,namenode会为这个文件生成块的元数据信息,比如①为文件切块②分配块id③分配每个块在哪个datanode上
    d. 将元数据信息封装到输出流中,返回给客户端
    e. Client拿到输出流之后,采用PipeLine(数据流管道)机制做数据的上传,这样设计的目的在于利用每台服务的带宽,最小化推送数据的延时。
     packet是一个64kb大小的数据包。即客户端在发送文件块时,会把文件块变成一个一个的数据包发送。
    f. 每台datanode收到packet后,会向上游做ack确认,如果接受失败,会进行重发
    g. 当一个文件上传完后,关流

  B. 详细流程描述


    a. 由HDFS client创建一个分布式的文件系统类型的客户端Distributed FileSystem
    b. 向NameNode请求上传文件
    c. NameNode检查目录树是否可以创建文件①检查权限②检查目录结构(目录是否存在)
    d. NameNode向客户端响应可以上传文件
    e. 客户端向NameNode请求上传第一个Block(0~128M),请返回DataNode
    f. NameNode进行副本存储节点选择,包括本地节点,其他机架一个节点,其他机架的另一个节点
    g. NameNode向客户端返回DataNode节点列表,表示这些节点可以存储数据
    h. 客户端创建一个数据流FSDataOutputStream往DataNode上去写数据
    i. 客户端向首选的DataNode请求建立Block传输通道,DataNode向其他一台节点建立通道,直到满足副本个数
    j. 客户端向上游的DataNode发送数据包Package,上游DataNode向下游的DataNode发送数据包
       Package是一个64Kb的数据包,最小单位是chunk512byte加上chunksum4byte校验位
    k. 数据包首先传输到每台DataNode的ByteBuffer,一份写入本地磁盘,另一份传输给下一个DataNode的Bytebuffer
    l. 客户端和每一个DataNode节点都会有一个ack队列,当下游接受成功后会向上游返回ack确认,并从队列中移除
       接受失败时上游会向下游重发数据


  2. DataNode节点选择
    当NameNode需要给客户端返回DataNode节点时,
    首先根据节点距离最近原则,或本地化原则,例如在DataNode1上传时,优先选择DataNode1
    其次需要考虑负载均衡问题,会考虑是否有多个客户端同时往一个DataNode上去写

标签:HDFS,上传,流程,DataNode,NameNode,数据包,节点,客户端
来源: https://www.cnblogs.com/shangzq/p/14843969.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有