HDFS 的读写流程

写数据:

1.hdfs 向 Namenode 请求上传文件;😀

2.NameNode 检查目标文件是否已存在,父目录是否存在,没问题响应可以上传文件

3. 客户端 hdfs 请求上传第一个 bloke,请求返回 DataNode

4.NameNode 返回 dn1,dn2,dn3, 表示采用这三个节点存储数据

   优化 Tip: 副本存储节点时优先选择本地节点,其次选择一个机架上的节点,(追求节点距离最近);除此之外,还要考虑负载均衡的问题,当检测到节点数据过多时,会将数据传输到另外一个节点距离较近的 DataNode.

5.hdfs 请求建立 Bloke 传输通道,先通过 dn1,dn1 接受到请求会调用 dn2,然后 dn2 调用 dn3. 搭建完成数据传输通道。

6.dn3,dn2,dn1 逐级应答

7.hdfs 开始传输 bloke 到 dn1,dn1 接受到后,一份数据在磁盘写入,一份数据传输给 dn2

        bloke 传输的最小单位 packet (64K):hdfs 写到数据流中时,会先创建一个缓冲队列  chunk512byte+chunksum (校验位) 4byte  缓冲队列攒到 64k 形成 Packet

                                                                packet 形成后会被发送到一个个的 DataNode

8.packet 被 dataNode 接受成功后,dn 会给出应答成功,返回给 hdfs,

            tip:packet 在发送时,还会有一个缓冲队列 ACK, 在 hdfs 接受到 dn 的应答成功信号后,缓冲队列才会被删除回收。

读流程

1.hdfs 请求下载文件向 NameNode

2.NameNode 查询是否有数据,有则返回目标文件的元数据

3.hdfs 向 dataNode1 发送读数据请求 blk_1,

发送第二个读数据请求时如果发现 dataNode1 处理的数据量已经足够大,hdfs 就会向 dataNode2 发送 blk_2。(负载问题的考虑,不止节点距离的考虑)

4.hdfs 获取到 dataNode 发送过来的数据后,进行串行读入数据

dn3
dn2

dn1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值