Hadoop-HDFS写(上传)和读(下载)数据机制
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校检