糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > HDFS原理 | NameNode和DataNode工作原理(图形化通俗易懂)

HDFS原理 | NameNode和DataNode工作原理(图形化通俗易懂)

时间:2019-03-27 01:41:29

相关推荐

HDFS原理 | NameNode和DataNode工作原理(图形化通俗易懂)

NameNode和DataNode工作原理

组件模块说明NameNode工作原理第一阶段: NameNode 启动第二阶段: Secondary NameNode 工作DataNode 工作机制

组件模块说明

Hadoop:以下内容以V3.3版本

NameNode:存储文件的元数据。作用:管理HDFS的名称空间;配置副本策略;管理数据块(Block)映射信息;处理客户端读写请求。NameNode两个重要文件(内存中的镜像=fsimage+edits)。

fsimage:元数据镜像文件。NameNode的元数据存放在内存中,为了断电不丢数据,因此需要在磁盘中备份元数据。

edits:元数据操作日志(针对目录树的修改操作),被写入共享存储系统中, 如NFS、 JournalNode。当在内存中的元数据更新时,如果同时更新 FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦 NameNode 节点断电,就会产生数据丢失。 因此,引入 Edits 文件(只进行追加操作,效率很高) 。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到 Edits 中。 这样,一旦 NameNode 节点断电,可以通过 FsImage 和 Edits 的合并,合成元数据。

SecondaryNamenode:如果长时间添加数据到 Edits 中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行 FsImage 和 Edits 的合并,如果这个操作由 NameNode完成,又会效率过低。因此,引入一个新的组件SecondaryNamenode,专门用于 FsImage 和 Edits 的合并。

DataNode:在本地文件系统存储文件块数据,以及块数据的校验和。作用:存储实际的数据块;执行数据块的读/写操作。

Checkpoints: 作用就是合并fsimage和Edits文件,然后生成最新的fsimage。时间设置:1.定时时间到,默认每隔一小时执行一次(dfs.namenode.checkpoint.period)。2.数据满了,默认一分钟检查一次操作次数,当操作次数达到 1 百万时, SecondaryNameNode 执行一次(dfs.namenode.checkpoint.check.period和dfs.namenode.checkpoint.txns)。

NameNode工作原理

第一阶段: NameNode 启动

第一次启动 NameNode 格式化(hdfs namenode -format)后, 创建 Fsimage 和 Edits 文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。客户端对元数据进行增删改的请求。NameNode 记录操作日志,更新滚动日志,写入edits_inprogress,先记录文件再写入内存。NameNode 在内存中对元数据进行增删改。

第二阶段: Secondary NameNode 工作

Secondary NameNode 询问 NameNode 是否需要 CheckPoint。Secondary NameNode 请求执行 CheckPoint。NameNode 滚动正在写的 Edits 日志,生成edits_inprogress_002记录正在写的日志,再把edits_inprogress_001改为edits_001。将滚动前的编辑日志(edits_001)和镜像文件(fsimage)拷贝到 Secondary NameNode。Secondary NameNode 加载编辑日志(edits_001)和镜像文件(fsimage)到内存,并合并。生成新的镜像文件 fsimage.chkpoint。拷贝 fsimage.chkpoint 到 NameNode。NameNode 将 fsimage.chkpoint 重新命名成 fsimage。

DataNode 工作机制

一个数据块在 DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。DataNode 启动后向 NameNode 注册。注册成功。注册成功后,周期性(6 小时) 的向 NameNode 上报所有的块信息。心跳是每 3 秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令(如复制块数据到另一台机器,或删除某个数据块)。如果超过 10 分钟+30秒没有收到某个 DataNode 的心跳,则认为该节点不可用。

如果定义超时时间为TimeOut,则超时时长的计算公式为:

TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval

而默认的dfs.namenode.heartbeat.recheck-interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。即10 分钟+30秒。

源码位于hadoop-hdfs-project\hadoop-hdfs\src\main\java\org\apache\hadoop\hdfs\server\blockmanagement\DatanodeManager.java:

heartbeatIntervalSeconds = conf.getTimeDuration(DFSConfigKeys.DFS_HEARTBEAT_INTERVAL_KEY,DFSConfigKeys.DFS_HEARTBEAT_INTERVAL_DEFAULT, TimeUnit.SECONDS);heartbeatRecheckInterval = conf.getInt(DFSConfigKeys.DFS_NAMENODE_HEARTBEAT_RECHECK_INTERVAL_KEY, DFSConfigKeys.DFS_NAMENODE_HEARTBEAT_RECHECK_INTERVAL_DEFAULT); // 5 minutesthis.heartbeatExpireInterval = 2 * heartbeatRecheckInterval+ 10 * 1000 * heartbeatIntervalSeconds;

如果觉得《HDFS原理 | NameNode和DataNode工作原理(图形化通俗易懂)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。