欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

hadoop--HDFS的读写数据流程

发布时间:2025/3/17 编程问答 20 豆豆
生活随笔 收集整理的这篇文章主要介绍了 hadoop--HDFS的读写数据流程 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

  • HDFS中block、packet、chunk的概念
    • 1. 数据块block
    • 2. packet
    • 3. chunk
  • HDFS读数据流程
  • HDFS写数据流程

HDFS中block、packet、chunk的概念

1. 数据块block

每个磁盘都有默认的数据块大小,这是磁盘进行数据读写的最小单位。
HDFS也有块(block)的概念,但是大得多,默认128MB,与单一磁盘上的文件系统相似,HDFS上的文件也被划分为块大小的多个分块(chunk),作为独立的存储单元。
但与面向单一磁盘的文件系统不同的是,HDFS中小于一个块大小的文件不会占据整个块的空间(如一个文件只有1MB存储在128MB的块中,文件只使用1MB的磁盘空间,而不是128MB)。

2. packet

client向datanode传输数据的最小单位称为packet (64k=512 byte +4 byte);

3. chunk

chunk是最小单位,默认为512byte,加上4byte的校验位chunksum;
HDFSClient创建FSDataInputStream/FSDataOutputStream流时会产生缓冲队列,存储512byte的chunk加4byte的校验位chunksum;

chunk–>Packet–>block

HDFS读数据流程

  • client通过创建Distributed FileSystem对象访问namenode,请求访问文件;
  • namenode判断是否具有权限以及集群是否存在目标文件,若具备条件,返回目标文件的元数据;
  • client通过创建FSDataInputStream流向dn1(节点距离最近原则)请求读取数据block1,
  • datanode1向client端传输数据;
  • client向dn2请求读取数据block2(负载能力原则);
  • dn2向client端传输数据;
  • tips: 通过串行读取数据,先读block1,再读block2追加在block1后面。

    HDFS写数据流程


    数据流–>chunk(512+4)–>Packet–>缓冲队列–>发送–>应答–>ack队列;
    ack队列在发送时会存储一份缓冲数据,只有应答成功之后,缓冲队列才会删除;

  • 客户端通过创建Distributed FileSystem向namenode发送消息请求上传文件;
  • namenode会检查该客户端是否具有权限,以及目标目录是否存在;然后响应客户端是否可以上传;
  • 客户端切分文件,请求上传第一个block(0-128MB)到哪些datenode服务器;
  • namenode返回dn1,dn2,dn3节点,表示这三个节点可以用来存储数据;
  • 客户端通过FSDataOutputStream模块请求与dn1(节点距离最近)建立传输通道,dn1收到请求继续调用dn2(负载均衡),dn2调用dn3,建立起通信管道;
  • dn1,dn2,dn3逐级应答客户端;
  • 客户端以packet (64k)为单位开始向dn1传输第一个block,dn1收到一个packet后就会传给dn2,dn2收到传给dn3;dn1每上传一个packet就会放入ack应答队列等待,只有应答成功后,这个缓冲数据才会被删除;
  • 当一个block传输完成后,客户端再次请求namenode上传第二个block的服务器;重复3-7;
  • tips:
    client端向dn1上传数据,上传成功后会有2份数据,其中1份写入磁盘,另一份存在内存中直接传给dn2。

    作业提交全过程(HDFS & YARN & MapReduce==>)

    总结

    以上是生活随笔为你收集整理的hadoop--HDFS的读写数据流程的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。