HDFS如何读写数据

发布时间:2021-12-09 11:15:27 作者:小新
来源:亿速云 阅读:187

这篇文章主要介绍HDFS如何读写数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

写:

HDFS如何读写数据

示例:上传一个200M的文件到HDFS分布式系统
执行流程:
1、client向NameNode发送上传文件的请求,NameNode会做校验。
--(检查是否具备权限,上传路径是否存在,文件是否以存在,是否执行覆盖操作等)

2、NameNode响应客户端,可以上传文件

3、client按照集群中块大小的设置对200M的数据进行切块,即切分为128M和72M两个block块,并请
求返回DataNode节点信息 。
     a.执行上传时,是一块一块进行上传,则先请求上传0~128M的块信息(第一个block块),因为
数据真实存在DataNode节点上,所以NameNode会返回dn1\dn2\dn3三个服务器节点存储数据。

--副本存储节点选择机制,如何选择节点并返回?(见图NameNode部分)
--为什么明明只往一个节点传,还要返回三个节点?(我觉得如果只返回一个节点,如果那个节点
挂了,就不知道往哪传了,所以返回三个,dn1故障了可以选择往dn2或dn3传。)

4、client得到dn的信息后,会和dn服务器节点建立链接,client发送请求建立block传输通道,执行写数据操作 
	a.client在和dn建立连接时,也会有选择,选择距离客户端最近的节点请求建立链接通道(假设dn1最近)
	b.client和dn1建立链接通道之后,dn1内部发请求到dn2,请求建立通道,dn2发请求到dn3,请求建立通道,
	dn3响应dn2,dn2响应dn1,dn1响应client ,均没有问题,通道建立成功
	
5、数据传输时,不是说将128M的文件直接进行传输,而是client向dn1以Packet为单位进行数据传输,(packet大小:64KB),
每次传输64KB,最后一次传输数据大小可能不够64KB。
     a.client向dn1传输64KB的数据到内存,dn1落盘(在当前节点服务器上将数据由内存写到本地),并分发给dn2(内存),
 dn2落盘,在发给dn3(内存),dn3落盘     	--逻辑上的说法
     b.chunk数据传输过程中的最小单位(512字节),每次从0~128M中读数据,先读取512字节放入chunk中,当chunk满
载时,对chunk内的数据进行校验,生成校验和(占4个字节),即共将516个字节放入Packet内,一个Packet存在N多个chunk								   --真实说法
     c.各节点内部Packet是如何进行传输的?
     在hdfs内部有一个队列,叫做dataQuene(缓冲队列),每传输一个Packet,就将当前Packet放入到DQ队列中,当dn1
接收到DQ中的Packet时,会将Packet从DQ队列中拉取出来,存入另一队列ackQuene中(应答队列),当dn1,dn2,dn3等节点均将ackq中的数据写成功之后,ackquene中的packet移除,表示packet传输完成

6、当dn1、dn2、dn3建立通道时,或者在数据传输过程中,如果某个节点出现问题,比如dn2宕机了,那么客户端会重新发
请求建立传输通道,这时,宕机的节点dn2不在请求应答,dn1 和 dn3直接建立通道,dn2不在使用,缺少副本数据,内部机器会重新配置一台来顶替dn2,保证真实节点数据和副本机
制设置的保持一致

7、数据传输完成之后,流关闭,执行第二个块的数据写操作,步骤同上

读:

HDFS如何读写数据

示例:从HDFS系统下载一个200M的文件到本地
1、client向NameNode发送下载文件请求,NameNode向client返回目标文件的元数据

2、client根据元数据,通过FSDataInputStream进行读取,client和距离客户端最近的dn节点建立传输通道
     a.注意:读数据,只需要与一个节点建立通道即可,只要可以读一次,取到真实数据就行

3、读数据也是以Packet为单位,注意,第一次读取时可能会取到第一个块的数据,但是第二个块可能存在其它
节点上,这时,其余数据的读取需要client与其它节点重新建立通道进行读取。

4、多个块读取到client之后,在client会进行缓存,然后合并写入目标文件,保证读取的真实数据的完整性

以上是“HDFS如何读写数据”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. HDFS的容错和文件的读写
  2. HDFS读写流程简介

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

hdfs

上一篇:Docker容器如何编译LNMP

下一篇:如何进行Deep Learning中常用loss function损失函数的分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》