HDFS读写流程+NameNode和DataNode工作机制
HDFS写数据流程
- 客户端向NameNode请求上传文件,NameNode返回数据节点(考虑节点距离和负载均衡等)
- 客户端创建FSDataOutputStream(先以512字节的chunk为单位,然后传输是以64k的packet为单位),向DataNode建立Block传输管道
- 向DataNode传数据是接力的形式,即先向DataNode1传,然后DataNode1向DataNode2传,以此类推。向每个DataNode传数据的时候,一边在自己磁盘写,一边向下一个DataNode传。
- 传输完毕后,客户端将自己的ACK队列中的packet删除,如果没有发送成功,会将packet放入发送队列再发送。
节点距离计算
节点距离:两个节点到达最近的共同祖先的距离之和
机架感知
客户端到底往那几个DataNode写数据,由NameNode告诉他,副本节点选择策略如下:
- 本地节点
- 其他机架的一个节点
- 其他机架(跟第二个副本同一个机架)的另一个节点
源码在BlockPlacementPolicyDefault的chooseTargetInOrder方法中。
HDFS读数据流程
- 客户端向NameNode请求下载文件,NameNode返回元数据
- 客户端创建FSDataIntputStream,从DataNode读数据,如果一个DataNode负载很大,会从其他DataNode读取
- 读数据时,会按照block顺序串行读取
NameNode工作机制
NameNode的数据是存储在内存还是磁盘?内存读取速度快,但是可靠性低,而磁盘正好相反。HDFS的NameNode采取两者结合的方式工作:用fsImage镜像文件存储数据,用edit文件存储变更操作。每次断电又上电重启,会根据fsImage镜像文件和edit文件快速生成之前内存中的数据。如果操作很多,会造成edit文件很大,因此SecondaryNameNode会定时(或者当edit文件很大时)将fsImage镜像文件和edit文件成新的fsImage镜像文件。新的fsImage镜像文件会覆盖原来的镜像文件,但是edit文件好像会一直存在,而且会有一个正在运行(还未合并)的edit文件(名称中带有inprogress)。
FsImage镜像文件:HDFS文件系统的元数据的一个永久性的检查点,包含HDFS文件系统的所有目录和文件的inode序列化信息
查看命令:hdfs oiv -p 文件类型(eg: XML) -i fsimage的文件路径 -o 输出文件的路径
Edits文件:存放HDFS文件系统的所有更新操作/写操作
查看命令:hdfs oev -p 文件类型(eg: XML) -i edits的文件路径 -o 输出文件的路径
seen_txid文件:保存一个数字,即最后一个edits_的数字
SecondaryNameNode定时合并设置
在hdfs-default.xml中的dfs.namenode.checkpoint.period值,默认为3600s
当edits文件记录的操作次数达到100 0000次时,也会进行合并,在hdfs-default.xml中的dfs.namenode.checkpoint.txns值,SecondaryNameNode会每隔60s检查edits文件记录的操作次数,在hdfs-default.xml中的dfs.namenode.checkpoint.check.period值。
DataNode工作机制
HDFS集群启动后,DataNode会主动向NameNode汇报信息(自己的数据块信息、校验和等),然后周期性上报这些信息(默认周期为6h),同时NameNode和DataNode间会有心跳检测(看DataNode是否还活着),每隔3s进行一次,如果某次心跳检测失败了,不立即判定该DataNode挂了,而是等10分钟30s进行,如果10分钟30s还未收到DataNode的心跳,则认为该DataNode挂了。
掉线时限参数设置
上面提到的每隔6h,DataNode会向NameNode汇报块信息,这个6h位于hdfs-default.xml中的dfs.blockreport.intervalMsec值,当然如果要修改这个设置,最好连dfs.datanode.directoryscan.interval也一起修改,后者表示DataNode定时扫描自己块信息的周期。
心跳检测3s是在hdfs-default.xml中的dfs.heartbeat.interval值,而10分钟30s是由以下公式计算出来的:TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval 10 * dfs.heartbeat.interval
数据完整性校验
从HDFS下载文件时,会发现有一个.crc后缀的文件,这个就是校验文件,一般数据校验算法默认是crc(循环冗余校验)。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfkifeg
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01