首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NameNode和DataNode工作原理(图形化通俗易懂)

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

作者头像
lovelife110
发布2022-05-10 19:45:56
9660
发布2022-05-10 19:45:56
举报
文章被收录于专栏:爱生活爱编程爱生活爱编程

NameNode和DataNode工作原理

组件模块说明

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 启动

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

第二阶段: Secondary NameNode 工作

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

DataNode 工作机制

在这里插入图片描述
在这里插入图片描述
  1. 一个数据块在 DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。DataNode 启动后向 NameNode 注册。
  2. 注册成功。
  3. 注册成功后,周期性(6 小时) 的向 NameNode 上报所有的块信息。
  4. 心跳是每 3 秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令(如复制块数据到另一台机器,或删除某个数据块)。
  5. 如果超过 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 minutes
    this.heartbeatExpireInterval = 2 * heartbeatRecheckInterval
        + 10 * 1000 * heartbeatIntervalSeconds;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NameNode和DataNode工作原理
  • 组件模块说明
  • NameNode工作原理
    • 第一阶段: NameNode 启动
      • 第二阶段: Secondary NameNode 工作
      • DataNode 工作机制
      相关产品与服务
      大数据
      全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档