【博学谷学习记录】超强总结,用心分享|Hadoop读写流程


写流程简化版

  1. 客户端向NameNode请求创建文件,NameNode进行检查并响应
  2. 客户端向离它最近的DataNode1传输文件
  3. DataNode1再向DataNode2传输,DataNode2再向DataNode3传输,串行传输,以此类推
  4. 客户端接到所有DataNode返回的确认信息,传输完成
  5. 客户端再向NameNode返回成功信息

读流程简化版

  1. 客户端向NameNode申请打开文件,NameNode进行检查并响应
  2. 客户端同时和多个DataNode创建连接,并发读取信息

写流程详细版

① 请求创建文件: 客户端向服务器发起上传请求(RPC)
② 执行检查,判断: 1. 目标文件是否存在2. 父目录是否存在3. 客户端是否具有操作权限
③ 反馈标记: 给客户端反馈是否可以上传标记
④ 切割: 客户端将要上传的文件按照片设置的Block大小进行切片
⑤ 请求上传Block: 客户端向NameNode请求上传第一个Block
⑥ 挑选主机: 收到上传Block的请求后,会根据副本放置策略和主机的优秀程度选出N台最优主机
⑦ 返回主机列表: 返回最优主机列表( node1, node2, nodeN … )
⑧ 建立pipeline: 客户端与拓扑距离最近的主机建立pipeline
⑨ 传输Block: 开始传输第一个Block,传输单位是package(64k)
⑩ 缓存package: 收到一个package就会缓存到内存中
11. 产生应答对列: 从最后一个DataNode开始,收到package,就会将一个ACK确认字符放入应答对列
12. 判断应答对列: 客户端判断应答对列中的ACK是否完整完整则判断此次package发送成功继续发送第二个
13. 落盘: 当最后一个package收到后DataNode会将缓存的所有package存储到硬盘上,也就是一个Block
14. 循环执行: 重新执行5-13步
15. 返回完成信息: 客户端向NameNode汇报文件上传完毕
16. 更新元数据: NameNode更新自己内存中的元数据

写流程思维导图


读流程详细版

① 发起请求: 客户端向服务器发起下载请求
② 执行检查,判断: 1. 目标文件是否存在2. 父目录是否存在3. 客户端是否具有操作权限
③ 获取Block列表: NameNode获取文件的Block信息列表,并且对每一个Block的主机根据策略进行排序
Block1: node1 node3 node4
Block2: node1 node2 node4
Block3: node2 node3 node4
④ 返回Block列表: 将文件的Block列表发送给客户端
⑤ 建立管道: 客户端分别和三个Block所在的主机建立管道
⑥ 读取数据: 客户端分别从三台主机读取数据,并行执行,读取单位也是package(64k)
⑦ 合并Block: 客户端将三个Block进行合并组成文件(字节数组的合并)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值