Hadoop三大组件NameNode、DataNode、SecondaryNamenode的介绍

先上关系图,说白了它们之间其实就是“一主多重”的关系:


1、NameNode介绍

NameNode:

  1. NameNode 是 HDFS 的核心。
  2. NameNode 也称为 Master。 c、 NameNode 仅存储 HDFS 的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件。
  3. NameNode 不存储实际数据或数据集。数据本身实际存储在 DataNodes 中。
  4. NameNode 知道 HDFS 中任何给定文件的块列表及其位置。使用此信息 NameNode 知道如何从块中构建文件。
  5. NameNode 并不持久化存储每个文件中各个块所在的 DataNode 的位置信息,这些信息会在系统启动时从数据节点重建。
  6. NameNode 对于 HDFS 至关重要,当 NameNode 关闭时,HDFS / Hadoop 集群无法访问。
  7. NameNode 是 Hadoop 集群中的单点故障。
  8. NameNode 所在机器通常会配置有大量内存(RAM)。

2、DataNode介绍

DataNode:

  1. DataNode 负责将实际数据存储在 HDFS 中。
  2. DataNode 也称为 Slave。NameNode 和 DataNode 会保持不断通信。
  3. DataNode 启动时,它将自己发布到 NameNode 并汇报自己负责持有的块列表。
  4. 当某个 DataNode 关闭时,它不会影响数据或群集的可用性。NameNode 将安排由其他 DataNode 管理的块进行副本复制。DataNode 所在机器通常配置有大量的硬盘空间。因为实际数据存储在DataNode 中。
  5. DataNode 会定期(dfs.heartbeat.interval 配置项配置,默认是 3 秒)向 NameNode 发送心跳,如果 NameNode 长时间没有接受到 DataNode 发送的心跳, NameNode 就会认为该 DataNode 失效。
  6. block 汇报时间间隔取参数 dfs.blockreport.intervalMsec,参数未配置的话默认为 6 小时。

3、SecondaryNamenode介绍

SecondaryNamenode 的 Checkpoint 详细步骤:

  1. NameNode 管理着元数据信息,其中有两类持久化元数据文件:edits 操作日志文件和fsimage 元数据镜像文件。新的操作日志不会立即与 fsimage 进行合并,也不会刷到NameNode 的内存中,而是会先写到 edits 中(因为合并需要消耗大量的资源),操作成功之后更新至内存。
  2. 有 dfs.namenode.checkpoint.period 和 dfs.namenode.checkpoint.txns 两个配置,只要达到这两个条件任何一个,secondarynamenode 就会执行 checkpoint 的操作。
  3. 当触发 checkpoint 操作时,NameNode 会生成一个新的 edits 即上图中的 edits.new 文件,同时 SecondaryNameNode 会将 edits 文件和 fsimage 复制到本地(HTTP GET 方式)。
  4. secondarynamenode 将下载下来的 fsimage 载入到内存,然后一条一条地执行 edits 文件中的各项更新操作,使得内存中的 fsimage 保存最新,这个过程就是 edits 和 fsimage文件合并,生成一个新的 fsimage 文件即上图中的 Fsimage.ckpt 文件。
  5. secondarynamenode 将新生成的 Fsimage.ckpt 文件复制到 NameNode 节点。
  6. 在 NameNode 节点的 edits.new 文件和 Fsimage.ckpt 文件会替换掉原来的 edits 文件和 fsimage 文件,至此刚好是一个轮回,即在 NameNode 中又是 edits 和 fsimage 文件。
  7. 等待下一次 checkpoint 触发 SecondaryNameNode 进行工作,一直这样循环操作。

4、NameNode 和 SecondaryNamenode 的区别与联系:

区别:

  • NameNode 负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息。
  • SecondaryNameNode 主要用于定期合并命名空间镜像和命名空间镜像的编辑日志。

联系:

  • SecondaryNameNode 中保存了一份和 namenode 一致的镜像文件(fsimage)和编辑日志(edits)。
  • 在主 namenode 发生故障时(假设没有及时备份数据),可以从 SecondaryNameNode 恢复数据。

猜你喜欢

转载自blog.csdn.net/qq_17685725/article/details/123244089