1.Namenode
目录的管理者,每一个集群都有一个,记录实时的数据变化,如果没有namenode,HDFS就无法工作,系统中的文件将会全部丢失,就无法将位于不同datanode上的文件快(blocks)重建文件。因此它的容错机制很有必要。
它主要负责:
接收用户的请求;
维护文件系统的目录结构;
管理文件与Block之间的练习;
2.Datanode
是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索。,并且定期向namenode发送他们所存储的块(block)的列表。
集群中的每个服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个 数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通 信,并且对相关的数据块进行读/写操作。
它主要负责:
存放数据;
文件被分割以Block的形式被存储在磁盘上;
3.Secondarynode
SecondaryNameNode是一个用来监控HDFS状态的辅助后台程序。就想NameNode一样,每个集群都有一个SecondaryNameNode,并且部署在一个单独的服务器上。SecondaryNameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期地保存HDFS元数据的快照。由于NameNode是单点的,通过SecondaryNameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,SecondaryNameNode可以及时地作为备用NameNode使用。
它主要将namenode image(fsimage)和Edit log合并的。
这两个文件的作用:
fsimage包含Hadoop文件系统中的所有目录和文件idnode的序列化信息,其中对于文件包含了文件的修改时间、访问时间、块大小和组成一个文件块信息等。对于文件夹而言包含的信息主要有修改时间、访问控制权限等信息。而Edits文件主要是进行客户端对文件操作的记录,比如上传新文件等。并且edits文件会定期与fsimage文件进行合并操作。
当客户端执行写操作,则NameNode会在edit log记录下来,并在内存中保存一份文件系统的元数据。
要注意,fsimage文件是文件系统元数据的持久化检查点,不会在写操作后马上更新,这是因为fsimage的写入是非常缓慢的。
由于Edit log不断增长,在NameNode重启时,会造成长时间NameNode处于安全模式,不可用状态,是非常不符合Hadoop的设计初衷。所以要周期性合并Edit log,但是这个工作由NameNode来完成,会占用大量资源,这样就出现了Secondary NameNode,它可以进行image检查点的处理工作。步骤如下:
(1)SecondaryNameNode请求NameNode进行edit log的滚动(即创建一个新的edit log),将新的编辑操作记录到新生成的edit log文件;
(2)通过http get方式,读取NameNode上的fsimage和edits文件,到SecondaryNameNode上;
(3)读取fsimage到内存中,即加载fsimage到内存,然后执行edits中所有操作,并生成一个新的fsimage文件,即这个检查点被创建;
(4)通过http post方式,将新的fsimage文件传送到NameNode;
(5)NameNode使用新的fsimage替换原来的fsimage文件,让(1)创建的edits替代原来的edits文件;并且更新fsimage文件的检查点时间。
整个处理过程完成。
SecondaryNameNode的处理,是将fsimage和edites文件周期的合并,不会造成nameNode重启时造成长时间不可访问的情况。
4.Resourcemanager
(1)与客户端进行交互,处理来自于客户端的请求,如查询应用的运行情况等。
(2)启动和管理各个应用的ApplicationMaster,并且为ApplicationMaster申请第一个Container用于启动和在它运行失败时将它重新启动。
(3)管理NodeManager,接收来自NodeManager的资源和节点健康情况汇报,并向NodeManager下达管理资源命令,例如kill掉某个container。
(4)资源管理和调度,接收来自ApplicationMaster的资源申请,并且为其进行分配。这个是它的最重要的职能。
5.Nodemanager
NM是ResourceManager在每台机器上的代理,负责容器管理,并监控它们的资源使用情况,以及向ResourceManager/Scheduler提供资源使用报告。
总结:
(1)NameNode与ResourceManager分开部署(都是老大)
(2)NodeManager 也就是Resoucemanager 的“小弟”,它来做这事情,读取hdfs 上的数据,数据保存在datanode上,所以如果数据集群,datanode 与NodeManager ,一定要保存在同一个节点上
(3)Resoucemanager : 占用端口:8088 进行调度资源(老大),进行任务分配的,谁来做这个事情
---------------------
作者:Patience在努力
来源:CSDN
原文:https://blog.csdn.net/qq_37042789/article/details/81408736
版权声明:本文为博主原创文章,转载请附上博文链接!