Skip to content

P4

田昊东211275022

简述HDFS中NameNode、DataNode的SecondaryNamedNode的作用

NameNode
  • 负责管理分布式文件系统的命名空间,并保存了两个核心的数据结构, FsImage和EditLog
  • FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
  • 操作日志文件EditLog 中记录了所有针对文件的创建、删除、重命名等操作
  • 在名称节点启动的时候,它会将 FsImage 文件中的内容加载到内存中,之后再执行 EditLog 文件中的各项操作,使得内存中的元数据和实际的同步。一旦在内存中成功建立文件系统元数据的映射,则创建一个新的 FsImage 文件和一个空的 EditLog 文件。之后的更新操作会重新写到 EditLog 文件中。(这是因为 Fsimage 很大,因此操作会写入到 EditLog 而不是而不是直接修改Fsimage
  • image.png|300
SecondaryNamedNode
  • 用来保存 NameNode 中对 HDFS 元数据信息的备份,并减少名称节点重启的时间
  • SecondaryNamedNode 会定期和 NameNode 通信。获取到 FsImage 和 EditLog 文件,并下载到本地的相应目录下,执行 EditLog 和 FsImage 文件合并,最后将新的 FsImage 文件发送到 NameNode 节点上
  • 可以防止日志文件 EditLog 过大,导致名称节点失败恢复时消耗过多时间,并起到备份的作用。
  • image.png|300
DataNode
  • HDFS 的工作节点,负责存储和读取数据块。每个 DataNode 都会定期向 NameNode 发送心跳消息和块报告,以表明自己的状态和存储的数据块。

简述HDFS是如何应对NameNode和DataNode出错的

NameNode
  • HDFS设置了备份机制,除了在NameNode存储FsImage和Editlog数据外,还把这些核心文件同步复制到备份服务器SecondaryNameNode上。当NameNode出错时,就可以根据备份服务器SecondaryNameNode中的FsImage和Editlog数据进行恢复。
DataNode
  • 每个数据节点会定期向NameNode发送“心跳”信息,向名称节点报告自己的状态。
  • 当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时,这些数据节点就会被标记为“宕机”,节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们发送任何I/O请求。
  • 此外,如果由于节点失效而导致冗余副本数目不足,就会启动数据冗余复制,为它生成新的副本。
DataNode存储的数据出错
  • 在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件里面。当客户端读取文件的时候,会先读取该信息文件,然后利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块。

  • 数据存放策略

    • 第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台盘不太满、CPU 不太忙的节点
    • 第二个副本:放置在与第一个副本不同的机架的节点上
    • 第三个副本:与第一个副本相同机架的其他节点上

简述YARN的设计

  • 设计目标:在一个集群上部署一个统一的资源调度管理框架YARN,在YARN之上可以部署其他各种计算框架。
  • 实现:
  • 由 YARN 为这些计算框架提供统一的资源调度管理服务,并且能够根据各种计算框架的负载需求,调整各自占用的资源,实现集群资源共享和资源弹性收缩
  • 每个应用的 ApplicationMaster (AM)负责相应的调度和协调。用户可以针对不同的编程模型编写自己的 ApplicationMaster,让更多的编程模型运行在 Hadoop 集群中。(任务调度、任务监控)与 ResourceManager协商资源分配,监控任务的进度,并处理失败的任务。
  • NodeManager:每个集群节点上都运行着 NodeManager,它负责监控节点上的资源使用情况,并报告给 ResourceManager。NodeManager 还负责启动和监控容器
  • 容器(Container)是资源的抽象,每个容器封装了一定的资源。
  • ResourceManager (RM)全局管理所有应用程序计算资源的分配,ResourceManager负责接收客户端提交的应用程序,为它们分配资源,并监控它们的运行情况。(资源管理)