Hadoop-HDFS写(上传)和读(下载)数据机制

2022-04-29  本文已影响0人  Eqo

HDFS 上传数据(写入)数据机制

首先要了解三个概念

pipeline 管道

datanode 直接传输数据使用pipeline 线性传输

ACK响应

lACK (Acknowledge character)即是确认字符,在数据通信中,接收方发给发送方的一种传输类控制字符。表示发来的数据已确认接收无误。

l在HDFS pipeline管道传输数据的过程中,传输的反方向会进行ACK校验,确保数据传输安全。

接收方 接受完数据成功后 会给发送方一个确认回应 确保数据传输安全

副本存储策略- 默认3个副本

hdfs 会把存入的数据 备份两份到其他datanode 节点服务器上 总共是三份数据 为了安全

第一个副本:优先客户端本地 否则随机

第二副本:跟第一个副本不同的机架

第三个副本:跟第二个副本同机架的不同服务器

HDFS 上传数据(写入)数据机制(重要)

情景 :客户端要存入一个300M的数据1.txt, hdfs 默认分块大小为128m 所以要把这个数据 分为三块 blk1 -blk2-blk3

,又因为hdfs的副本存储策略 ,要把存入的数据进行备份 ,所以完成后 总共再hdfs内存放的是9块数据;

过程:

1.客户端 连接nn ,请求上传文件 1.txt

2.nn收到请求后,查询是否有相同的文件 如果有 就拒绝

3.如果没有 就给客户端发一个回应,让其上传

4,客户端收到回应之后,请求上传blk1 默认副本是3

5.nn收到请求到,会找到符合默认副本策略数量的datanode

6.把datanode位置信息 ,返回给客户端

7,建立客户端和datanode1,datanode2,datanode3之间的管道

8,客户端读取数据,数据一数据包的形式发送到客户端,客户端做一个缓存,到达一个数据包64k大小时 开始把数据packet发送给datanode1

9:datanode1接受完数据,包保存本地 ,并复制一份包给datanode2

10 期间 datanode1每接收一个packet 会返回一个ack校检

datanode2重复9 .10 传个datanode3,datanode3 返回一个ack校验给datanode2

11,当bk1创建完成后,客户端重新请求上传blk2(从第4步开始 重新请求副本 建立管道)

12,当全部文件块上传完成后,客户端通知nn 结束上传

对于每个块的副本来说 上传一个块就算成功,剩下的如果有缺少,nn就把成功的副本复制给其他的datanode

hdfs下载数据

1.客户端访问nn,请求下载某个文件

2.nn根据请求校检是否可以下载(是否存在,权限)

3.nn返回datanode的位置

4,客户端根据返回位置信息到指定的dn上读取数据块

5,客户端将读取的数据快根据编号依次拼接 ,在合并数据的时候采用CRC校检

上一篇下一篇

猜你喜欢

热点阅读