1、NameNode介绍
Namenode
管理着文件系统的Namespace
。它维护着文件系统树(filesystem tree
)以及文件树中所有的文件和文件夹的元数据(metadata
)。
管理这些信息的文件有两个,分别是Namespace
镜像文件(Namespace image
)和操作日志文件(edit log
),这些信息被Cache
在RAM
中,当然,这两个文件也会被持久化存储在本地硬盘。
Namenode
记录着每个文件中各个块所在的数据节点的位置信息,但是它并不持久化存储这些信息,因为这些信息会在系统启动时从数据节点重建。
Namenode
结构图可抽象为如图:

客户端(client
)代表用户与namenode
和datanode
交互来访问整个文件系统。客户端提供了一些列的文件系统接口,因此我们在编程时,几乎无须知道datanode
和namenode
,即可完成我们所需要的功能。
1.1 Namenode容错机制
没有Namenode
,HDFS
就不能工作。事实上,如果运行namenode
的机器坏掉的话,系统中的文件将会完全丢失,因为没有其他方法能够将位于不同datanode
上的文件块(blocks
)重建文件。因此,namenode
的容错机制非常重要,Hadoop
提供了两种机制。
第一种方式是将持久化存储在本地硬盘的文件系统元数据备份。Hadoop
可以通过配置来让Namenode
将它的持久化状态文件写到不同的文件系统中。这种写操作是同步并且是原子化的。比较常见的配置是在将持久化状态写到本地硬盘的同时,也写入到一个远程挂载的网络文件系统。
第二种方式是运行一个辅助的Namenode
(Secondary Namenode
)。 事实上Secondary Namenode
并不能被用作Namenode
。它的主要作用是定期的将Namespace
镜像与操作日志文件(edit log
)合并,以防止操作日志文件(edit log
)变得过大。通常,Secondary Namenode
运行在一个单独的物理机上,因为合并操作需要占用大量的CPU
时间以及和Namenode
相当的内存。辅助Namenode
保存着合并后的Namespace
镜像的一个备份,万一哪天Namenode
宕机了,这个备份就可以用上了。
但是辅助Namenode
总是落后于主Namenode
,所以在Namenode
宕机时,数据丢失是不可避免的。在这种情况下,一般的,要结合第一种方式中提到的远程挂载的网络文件系统(NFS
)中的Namenode
的元数据文件来使用,把NFS
中的Namenode
元数据文件,拷贝到辅助Namenode
,并把辅助Namenode
作为主Namenode
来运行。
当然在hadoop 2.x
中,已经有了新的解决方案,那就是NameNode HA
(因为Hadoop
还包括 ResourceManage HA
)。Hadoop HA
是指同时启动两个NameNode
,一个处于工作状态,另外一个处于随时待命状态,这样在处于工作状态的NameNode
所在的服务器宕机时,可在数据不丢失的情况下,手工或者自动切换到另外一个NameNode
提供服务。
2、Datanode介绍
Datanode
是文件系统的工作节点,他们根据客户端或者是namenode
的调度存储和检索数据,并且定期向namenode
发送他们所存储的块(block
)的列表。
集群中的每个服务器都运行一个DataNode
后台程序,这个后台程序负责把HDFS
数据块读写到本地的文件系统。当需要通过客户端读/写某个数据时,先由NameNode
告诉客户端去哪个DataNode
进行具体的读/写操作,然后,客户端直接与这个DataNode
服务器上的后台程序进行通信,并且对相关的数据块进行读/写操作。
3、Secondary NameNode介绍
Secondary NameNode
是一个用来监控HDFS
状态的辅助后台程序。就像NameNode
一样,每个集群都有一个Secondary NameNode
,并且部署在一个单独的服务器上。Secondary NameNode
不同于NameNode
,它不接受或者记录任何实时的数据变化,但是,它会与NameNode
进行通信,以便定期地保存HDFS
元数据的快照。由于NameNode
是单点的,通过Secondary NameNode
的快照功能,可以将NameNode
的宕机时间和数据损失降低到最小。同时,如果NameNode
发生问题,Secondary NameNode
可以及时地作为备用NameNode
使用。
3.1 NameNode的目录结构如下:
${dfs.name.dir}/current/VERSION
/edits
/fsimage
/fstime
3.2 Secondary NameNode的目录结构如下:
${fs.checkpoint.dir}/current/VERSION
/edits
/fsimage
/fstime
/previous.checkpoint/VERSION
/edits
/fsimage
/fstime

如上图,Secondary NameNode
主要是做Namespace image
和Edit log
合并的。
那么这两种文件是做什么的?当客户端执行写操作,则NameNode
会在edit log
记录下来,(我感觉这个文件有些像Oracle
的online redo logo file
)并在内存中保存一份文件系统的元数据。
Namespace image
(fsimage
)文件是文件系统元数据的持久化检查点,不会在写操作后马上更新,因为fsimage
写非常慢(这个有比较像datafile
)。
由于Edit log
不断增长,在NameNode
重启时,会造成长时间NameNode
处于安全模式,不可用状态,是非常不符合Hadoop
的设计初衷。所以要周期性合并Edit log
,但是这个工作由NameNode
来完成,会占用大量资源,这样就出现了Secondary NameNode
,它可以进行image
检查点的处理工作。步骤如下:
-
Secondary NameNode
请求NameNode
进行edit log
的滚动(即创建一个新的edit log
),将新的编辑操作记录到新生成的edit log
文件; -
通过
http get
方式,读取NameNode
上的fsimage
和edits
文件,到Secondary NameNode
上; -
读取
fsimage
到内存中,即加载fsimage
到内存,然后执行edits
中所有操作(类似OracleDG
,应用redo log
),并生成一个新的fsimage
文件,即这个检查点被创建; -
通过
http post
方式,将新的fsimage
文件传送到NameNode
; -
NameNode
使用新的fsimage
替换原来的fsimage
文件,让1.创建的edits
替代原来的edits
文件;并且更新fsimage
文件的检查点时间。
整个处理过程完成。
Secondary NameNode
的处理,是将fsimage
和edites
文件周期的合并,不会造成nameNode
重启时造成长时间不可访问的情况。
4、ResourceManager介绍

ResourceManage
即资源管理,在YARN
中,ResourceManager
负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager
)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(实际上是ApplicationManager
)。
RM
包括Scheduler
(定时调度器)和ApplicationManager
(应用管理器)。Schedular
负责向应用程序分配资源,它不做监控以及应用程序的状态跟踪,并且不保证会重启应用程序本身或者硬件出错而执行失败的应用程序。ApplicationManager
负责接受新的任务,协调并提供在ApplicationMaster
容器失败时的重启功能。
这里简单介绍以下ApplicationMaster
,每个应用程序的AM
负责向Scheduler
申请资源,以及跟踪这些资源的使用情况和资源调度的监控
5、NodeManager介绍

NM
是ResourceManager
在每台机器上的代理,负责容器管理,并监控它们的资源使用情况,以及向ResourceManager/Scheduler
提供资源使用报告
NodeManager
(NM
)是YARN
中每个节点上的代理,它管理Hadoop
集群中单个计算节点,包括与ResourceManger
保持通信,监督Container
的生命周期管理,监控每个Container
的资源使用(内存、CPU
等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service
)。
网友评论