前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop-HDFS读写原理的超详细教程

Hadoop-HDFS读写原理的超详细教程

原创
作者头像
用户8639654
修改2021-07-16 10:41:30
2510
修改2021-07-16 10:41:30
举报
文章被收录于专栏:云计算运维

最近在答疑工作中,有很多小伙伴都在问HDFS的读写原理是什么,小编其实在刚开始学习大数据的时候,也对此有所困惑。

可见,同一个知识,同一个困惑啊~

为了让更多的小伙伴能够彻底解决这一困惑,小编下面就为大家介绍一下HDFS文件的读写原理。

敲黑板了啊,仔细听讲!

假设有一个文本文件1.txt,大小为300M,划分为3个数据块,即block_01、block_02、block_03。(这是我为大家举的例子)

看完了是不是一脸懵,其实呢HDFS中的写数据流程主要分为12个步骤。

(1)客户端发起文件上传请求,通过RPC(远程过程调用)与NameNode建立通讯。

(2)NameNode检查元数据文件的系统目录树。

(3)若系统目录树的父目录不存在该文件相关信息,返回客户端可以上传文件。

(4)客户端请求上传第一个Block数据块,以及数据块副本的数量(可以自定义副本数量,也可以使用集群规划的副本数量)。

(5)NameNode检测元数据文件中DataNode信息池,找到可用的数据节点(DataNode_01,DataNode_02,DataNode_03)。

(6)将可用的数据节点的IP地址返回给客户端。

(7)客户端请求3台节点中的一台服务器DataNode_01,进行传送数据(本质上是一个RPC调用,建立管道Pipeline),DataNode_01收到请求会继续调用服务器DataNode_02,然后服务器DataNode_02调用服务器DataNode_03。

(8)DataNode之间建立Pipeline后,逐个返回建立完毕信息。

(9)客户端与DataNode建立数据传输流,开始发送数据包(数据是以数据包形式进行发送)。

(10)客户端向DataNode_01上传第一个Block数据块,是以Packet为单位(默认64K),发送数据块。当DataNode_01收到一个Packet就会传给DataNode_02,DataNode_02传给DataNode_03;DataNode_01每传送一个Packet都会放入一个应答队列等待应答。

(11)数据被分割成一个个Packet数据包在Pipeline上依次传输,而在Pipeline反方向上,将逐个发送Ack(命令正确应答),最终由Pipeline中第一个DataNode节点DataNode_01将Pipeline的 Ack信息发送给客户端。

(12)DataNode返回给客户端,第一个Block块传输完成。客户端则会再次请求NameNode上传第二个Block块和第三块到服务器上,重复上面的步骤,直到3个Block都上传完毕。

2.HDFS读数据原理

HDFS中的读数据流程可以分为4个步骤,具体如下:

(1)客户端向NameNode发起RPC请求,来获取请求文件Block数据块所在的位置。

(2)NameNode检测元数据文件,会视情况返回Block块信息或者全部Block块信息,对于每个Block块,NameNode都会返回含有该Block副本的DataNode地址。

(3)客户端会选取排序靠前的DataNode来依次读取Block块(如果客户端本身就是DataNode,那么将从本地直接获取数据),每一个Block都会进行CheckSum(完整性验证),若文件不完整,则客户端会继续向NameNode获取下一批的Block列表,直到验证读取出来文件是完整的,则Block读取完毕。

(4)客户端会把最终读取出来所有的Block块合并成一个完整的最终文件(例如:1.txt)。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.HDFS读数据原理
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档