写点什么

Week 8 作业 01

用户头像
Croesus
关注
发布于: 2020 年 11 月 15 日


HDFS 体系架构


NameNode

NameNode 负责:文件元数据信息的操作以及处理客户端的请求

NameNode 管理:HDFS 文件系统的命名空间 NameSpace。

NameNode 维护:文件系统树(FileSystem)以及文件树中所有的文件和文件夹的元数据信息(matedata)维护文件到块的对应关系和块到节点的对应关系

NameNode 文件:namespace 镜像文件(fsimage),操作日志文件(edit log)这些信息被 Cache 在 RAM 中,当然这两个文件也会被持久化存储在本地硬盘。

NameNode 记录:每个文件中各个块所在的数据节点的位置信息。但它并不永久保存块的位置信息,因为这些信息在系统启动时由数据节点重建。从数据节点重建:在 nameNode 启动时,DataNode 向 NameNode 进行注册时发送给 NameNode

元数据信息

文件名,文件目录结构,文件属性(生成时间,副本数,权限)每个文件的块列表。

以及列表中的块与块所在的 DataNode 之间的地址映射关系 在内存中加载文件系统中每个文件和每个数据块的引用关系(文件、block、datanode 之间的映射信息) 数据会定期保存到本地磁盘,但不保存 block 的位置信息而是由 DataNode 注册时上报和在运行时维护

NameNode 文件操作

NameNode 负责文件元数据的操作 ,DataNode 负责处理文件内容的读写请求,数据流不经过 NameNode,会询问它跟那个 DataNode 联系


NameNode 副本

文件数据块到底存放到哪些 DataNode 上,是由 NameNode 决定的,NN 根据全局情况做出放置副本的决定

读取文件的时候,NN 尽量让 client 读取离它最近的 datanode 上的副本,降低带宽消耗和读取时延


NameNode 心跳机制

全权管理数据块的复制,周期性的接受心跳和块的状态报告信息(包含该 DataNode 上所有数据块的列表)

若接受到心跳信息,NN 认为 DN 工作正常,如果在 10 分钟后还接受到不到 DN 的心跳,那么 NN 认为 DN 已经宕机 这时候 NN 准备要把 DN 上的数据块进行重新的复制。 块的状态报告包含了一个 DN 上所有数据块的列表,blocks report 每个 1 小时发送一次


NameNode 容错机制

没有 Namenode,HDFS 就不能工作。事实上,如果运行 namenode 的机器坏掉的话,系统中的文件将会完全丢失,因为没有其他方法能够将位于不同 datanode 上的文件块(blocks)重建文件。因此,namenode 的容错机制非常重要,Hadoop 提供了两种机制。


第一种方式是将持久化存储在本地硬盘的文件系统元数据备份。Hadoop 可以通过配置来让 Namenode 将他的持久化状态文件写到不同的文件系统中。这种写操作是同步并且是原子化的。比较常见的配置是在将持久化状态写到本地硬盘的同时,也写入到一个远程挂载的网络文件系统(NFS)。


第二种方式是运行一个辅助的 Namenode(SecondaryNamenode)。 事实上 SecondaryNamenode 并不能被用作 Namenode 它的主要作用是定期的将 Namespace 镜像与操作日志文件(edit log)合并,以防止操作日志文件(edit log)变得过大。通常,SecondaryNamenode 运行在一个单独的物理机上,因为合并操作需要占用大量的 CPU 时间以及和 Namenode 相当的内存。辅助 Namenode 保存着合并后的 Namespace 镜像的一个备份,万一哪天 Namenode 宕机了,这个备份就可以用上了。


但是辅助 Namenode 总是落后于主 Namenode,所以在 Namenode 宕机时,数据丢失是不可避免的。在这种情况下,一般的,要结合第一种方式中提到的远程挂载的网络文件系统(NFS)中的 Namenode 的元数据文件来使用,把 NFS 中的 Namenode 元数据文件,拷贝到辅助 Namenode,并把辅助 Namenode 作为主 Namenode 来运行。


如上图所示,

HDFS 使用单一的 NameNode 节点简化了整体的设计,同时使用 Master-Slave 模式,防止 NameNode 成为单点故障,Failover Controller(故障切换器)的工作便是负责监控 NameNode 的状态与切换主从服务器。与此同时,为了能够快速从故障中恢复,每一次的数据读写删操作都会记录在 NameNode 上的 EditLog 中并同步到每个 JournalNode 节点。而 DataNode 节点则负责存储物理数据,为了应对不确定的故障,每一份数据默认被保存为 3 份,并分散在不同的 DataNode 中,而通过 Balancer 则可以平衡集群之间各节点的磁盘利用率,以防止某一个 DataNode 节点存储已满但是其它 DataNode 节点却可能为空的情况。


最后为了方便用户操作,HDFS 提供了 HttpFS 服务,用以通过 HTTP 方式访问 HDFS 服务的功能。默认的,你可以通过 http://[master namenode host]:50070/ 访问这个功能。


总的来说,HDFS 主要包含了 6 个服务,它们主要的功能如下:


NameNode:负责管理文件系统的 namespace 以及客户端对文件的访问;

DataNode:用于管理它所在节点上的存储;

FailoverController:故障切换控制器,负责监控与切换 Namenode 服务;

JournalNode:用于存储 EditLog;

Balancer:用于平衡集群之间各节点的磁盘利用率;

HttpFS:提供 HTTP 方式访问 HDFS 的功能。

通常而言,在关注 HDFS 架构时,总是关注 Namenode 和 Datanode 的架构,因为它们是 HDFS 的核心,也是客户端操作数据需要依赖的两个服务,所以再来看看 Namenode & Datanode 的架构吧。



在 HDFS 中,Namenode 是 HDFS 中的主节点,用于维护和管理 Datanode 上存在的 block。它是一个高度可用的服务器,用于管理文件的 namespace 并控制客户端对文件的访问。HDFS 体系的构建方式是,用户数据永远不会驻留在 Namenode 上,数据只会驻留在 Datanode 上。

Namenode 的功能:

  • 它是维护和管理 Datanode 的主守护进程;

  • 它记录存储在集群中的所有文件的元数据,例如 block 的位置、文件大小、权限、层次结构等。有两个文件与元数据关联:FsImage:它包含自 Namenode 开始以来文件的 namespace 的完整状态;EditLogs:它包含最近对文件系统进行的与最新 FsImage 相关的所有修改。

  • 它记录了发生在文件系统元数据上的每个更改。例如,如果一个文件在 HDFS 中被删除,Namenode 会立即在 EditLog 中记录这个操作。

  • 它定期从集群中的所有 Datanode 接收心跳信息和 block 报告,以确保 Datanode 处于活动状态;

  • 它保留了 HDFS 中所有 block 的记录以及这些 block 所在的节点;

  • 它负责管理所有 block 的复制;

  • 在 Datanode 失败的情况下,Namenode 会为副本选择新的 Datanode,平衡磁盘使用并管理到 Datanode 的通信流量。

Datanode 则是 HDFS 中的从节点,与 Namenode 不同的是,Datanode 是一种商品硬件,它并不具有高质量或高可用性。Datanode 是一个将数据存储在本地文件 ext3 或 ext4 中的 block 服务器。

Datanode 功能:

  • 这些是丛属守护进行或在每台从属机器上运行的进程;

  • 实际的数据存储在 Datanode 上;

  • 执行文件系统客户端底层的读写请求;

  • 定期向 Namenode 发送心跳报告 HDFS 的整体健康状况,默认频率为 3 秒。


https://www.yisu.com/zixun/7413.html

http://kentt.top/2018/04/05/HDFS-Architecture/


用户头像

Croesus

关注

还未添加个人签名 2019.01.05 加入

还未添加个人简介

评论

发布
暂无评论
Week 8 作业01