Hadoop学习笔记之——Hadoop构造模块

时间:2022-02-14 22:22:11
Hadoop构造模块
在一个全配置的集群上, “运行 Hadoop ”意味着在网络分布的不同服务器上运行同一组守护进程( deamons )。这些守护进程有特殊的角色,一些仅存在于单个服务器上,一些则运行在多个服务器上.他们包括:
NameNode(名字节点);
DataNode(数据节点);
Secondary NameNode(次名字节点);
JobTracker(作业跟踪节点);
TaskTracker(任务跟踪节点);

一、NameNode
我们从NameNode开始讨论,也许会有人质疑,但我们认为他是Hadoop守护进程中最重要的一个。Hadoop在分布式计算与分布式存储中都采用了主/从(master/slave)结构。分布式存储系统被称为Hadoop文件系统,或简称为HDFS。NameNode位于HDFS的主端,它指导从端的DateNode执行底层的I/O任务。NameNode是HDFS的书记员,它跟踪文件如何被分割为文件块,而这些块又被那些节点存储,以及分布式文件系统的整体运行状态是否正常。
运行NameNode消耗大量的内存和IO资源。因此,为了减轻机器的负载,驻留NameNode的服务器通常不会存储用户数据或者执行MapReduce程序的计算任务。这意味着NameNode服务器不会同时是DataNode或者TaskTracker。
不过NameNode的重要性也带来了一个负面的影响——Hadoop集群的单点失效。对于任何其他的守护进程,如果他们所驻留的节点发生软件或硬件失效,Hadoop集群很有可能还会继续平稳的运行,不然你还可以快速重启这个节点。但是这样的方法并不适用于NameNode。

二、DataNode
每一个集群上的从节点都会驻留一个DataNode守护进程,来执行分布式文件系统的繁重工作——将HDFS数据块读取挥着写入到本地文件系统的实际文件中。当希望对HDFS文件进行读写时。文件被分割为多块,有NameNode告知客户端每个数据块驻留在那个NameNode。客户端直接与DataNode守护进程通信,来处理与数据块相对应的本地文件。然后,DataNode会与其他DataNode进行通信,复制这些数据块以实现冗余。
Hadoop学习笔记之——Hadoop构造模块
NameNode/DataNode在HDFS中的交互。NameNode跟踪文件的元数据——描述系统中多有包含的文件以及每个文件如何被分割为数据块。DataNode提供数据块的备份存储,并持续不断的向NameNode报告,以保持元数据为最新状态

上图说明NameNode和DataNode的角色。途中显示了两个数据文件,意格卫浴目录/user/chunk/data1,另一个位于/user/chunk/data2。文件data1有3个数据块,标识1、2和 3,而文件data2有数据块4和5组成。这些文件的内容分散在几个DataNode上。这个事例中,每个数据块有3个副本。例如,数据块1(属于 文件data1)被复制在途中右侧的3个DataNode上。这确保了如果任何一个DataNode奔溃或者无法通过网络访问时,你仍然可以读取这些文本。
DataNode不断向NameNode报告。初始化时,每个DataNode将当前存储的数据块告知NameNode。在这个初始映射完成后,DataNode人会不断地更新NameNode,为之提供本地修改的相关信息,同时接受指令创建、移动或删除本地磁盘上的数据块。

三、Secondary NameNode
Secondary NameNode(SNN)是一个用于监测HDFS集群状态的辅助守护进程。像NameNode一样,每个集群有一个SNN,他同城也独占一台服务器,该服务器不会运行其他的DataNode或TaskTracker守护进程。SNN与NameNode的不同在于他不接收或者记录HDFS的任何实时变化。相反,他与NameNode通信,根据集群所配置的时间间隔获取HSFS元数据的快照。
如前所述,NameNode是Hadoop集群的单一故障点,而SNN的快照可以有助于减少停机的时间并降低数据丢失的风险。然而,NameNode的时效处理需要人工的干预,即手动的重新配置集群,将SNN用作主要的NameNode。(后续在讨论)
四、JobTracker
JobTracker守护进程是应用程序和Hadoop之间的纽带。一旦提交代码到集群上,JobTracker就会确定执行计划,包括巨鼎处理那些文件,为不同的任务分配节点以及监控所有任务的运行。如果任务失败,JobTracker将自动重启任务,但所分配的节点可能会不同,同事收到预定义的重试次数限制。
每个Hadoop集群只有一个JobTracker守护进程。他通常运行在服务器集群的主节点上。

五、TaskTracker
与存储的守护进程一样,计算机的守护进程也遵循主从架构:JobTracker作为主节点,监测MapReduce作业的整个执行过程,同时,TaskTracker管理各个任务在每个从节点的执行情况。下图说明了这种交互关系:

Hadoop学习笔记之——Hadoop构造模块
JobTracker和TaskTracker的交互。当客户端调用JobTracker来启动一个数据处理作业时,JobTracker将会工作切分,并分配不同的map和reduce任务到集群中的每个TaskTracker上

每个TaskTracker负责执行由JobTracker分配的单项任务。虽然每个从节点上仅有一个TaskTracker,但每个TaskTracker可以产生多个JVM(Java虚拟机)来并行的处理许多map或reduce任务。
TaskTracker的一个职责是持续不断的与JobTracker通信。如果JobTracker在指定的时间内没有收到来自TaskTracker的“心跳”,他会设定TaskTracker已经崩溃了,进而重新提交相应的任务到集群中的其他节点。
讨论Hadoop的各个守护进程之后,我们在下图描绘了一个典型的Hadoop集群的拓扑结构。
Hadoop学习笔记之——Hadoop构造模块
一个典型Hadoop集群的拓扑图。这是一个主从架构,其中NameNode和JobTracker为主端,DataNode和TaskTracker为从端

这种拓扑结构的特点是在主节点上运行NameNode和JobTracker的守护进程,并使用独立的节点运行SNN以防主节点失效。在小集群中,SNN也可以驻留在某一从节点上,而在大型集群中,连NameNode和JobTracker都会分别驻留在两台机器上,每个从节点均驻留一个DataNode和TaskTracker,从而在存储数据的同一节点上执行任务。