图 1 节点复用型MapReduce集群(上图)和节点分离型MapReduce集群(下图)
一 两种常见的MapReduce集群架构
图1,是两种常见的MapReduce集群,前一种可以更节点复用型集群的优点是(1)节约资源(2)提供更高的性能,调度器会根据数据的分布进行任务调度,尽量满足任务和对应的数据在同一物理节点,节点内的数据传输会比节点间的数据传输高。
后一种集群架构的优势是(1)维护方便,分布式存储系统与计算集群分离,各自维护(2)安全性高,采用集中式的存储在多租户的环境下可以较好的进行访问控制。
二 MapReduce集群中节点分类的问题
阅读英文文献或资料的过程中,我们总是会遇到以下这样一些概念,如master,slave,datanode,namenode,jobtrackerandtasktracker. 我们究竟该如何更好的理解这些基础性的概念,在这里很有必要采用多视图的方法。
在同一个集群内,对节点的分类可以遵循以下三个主要方式:
A 按并行计算框架(MapReduce)分类,节点包含obtracker and tasktracker.
B 按分布式文件系统(HDFS)分类,节点包含datanode and namenode
B 按节点所处的角色分类,负责任务调度的master和负责执行任务(slave)
Hadoop中新采用了新MapReduce框架Yarn,其对jobtracker节点的功能进行了进一步划分。
三 MapReduce程序运行过程中涉及的主要进程
要想深入了解mapreduce工作机制,就必须很清楚的了解其工作过程中涉及的全部组件(进程),以图中复用式架构为例,
A 在slave计算节点上存在 (1)datanode 进程,HDFS在数据节点的和守护进程;(2)tasktracker进程,MapReduce框架在计算节点的守护进程;(3)Child进程,具体执行任务的进程,每个Map和Reduce 任务均对应一个这样的进程。
B 在master计算节点上存在 (1)namenode 进程,HDFS元数据服务器上的守护进程;(2)secondarynamenode HDFS 备份元数据服务器上的守护进程;(3)jobtracker进程,MapReduce框架在任务调度节点上的的守护进程;
C 提交任务的Client进程,其主要作用是提交并控制工作任务,查看任务进度。
另外,我们必须更进一步的意识到更细粒度的划分,功能模块。单个进程往往以多线程方式实现,单个或多个线程对应一个功能模块,例如位于TaskTracker内部的http服务器jetty,reduce任务通过http协议与jetty交互获取map输出数据。