MapReduce是一个基于集群的计算平台,是一个简化分布式编程的计算框架,是一个将分布式计算抽象为Map和Reduce两个阶段的编程模型
由图我们可以看到, MapReduce存在以下4个独立的实体。
-
JobClient:运行于client node,负责将MapReduce程序打成Jar包存储到HDFS,并把Jar包的路径提交到Jobtracker,由Jobtracker进行任务的分配和监控。
-
JobTracker:运行于name node,负责接收JobClient提交的Job,调度Job的每一个子task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。
-
TaskTracker:运行于data node,负责主动与JobTracker通信,接收作业,并直接执行每一个任务。
-
HDFS:用来与其它实体间共享作业文件。
各实体间通过以下过程完成一次MapReduce作业。JobClient通过RPC协议向JobTracker请求一个新应用的ID,用于MapReduce作业的ID JobTracker检查作业的输出说明。例如,如果没有指定输出目录或目录已存在,作业就不提交,错误抛回给JobClient,否则,返回新的作业ID给JobClient JobClient将作业所需的资源(包括作业JAR文件、配置文件和计算所得得输入分片)复制到以作业ID命名的HDFS文件夹中 JobClient通过submitApplication()提交作业 JobTracker收到调用它的submitApplication()消息后,进行任务初始化 JobTracker读取HDFS上的要处理的文件,开始计算输入分片,每一个分片对应一个TaskTracker TaskTracker通过心跳机制领取任务(任务的描述信息) TaskTracker读取HDFS上的作业资源(JAR包、配置文件等) TaskTracker启动一个java child子进程,用来执行具体的任务(MapperTask或ReducerTask) TaskTracker将Reduce结果写入到HDFS当中
yarn:
Resource Manager:全局资源管理器,一个集群只有一个RM。负责和AM(Application Master)交互,资源调度、资源分配等工作。
Application Master:应用程序的管理器,类似项目经理,一个应用程序只有一个AM。负责任务开始时找RM要资源,任务完成时向RM注销自己,释放资源;与NM通信以启动/停止任务;接收NM同步的任务进度信息。
Node Manager:一台机器上的管理者,类似于部门经理。管理着本机上若干小弟Containers的生命周期、监视资源和跟踪节点健康并定时上报给RM;接收并处理来自AM的Container启动/停止等各种请求。
Container:一台机器上具体提供运算资源,将设备上的内存、CPU、磁盘、网络等资源封装在一起的抽象概念——“资源容器”,Container是一个动态资源分配单位,为了限定每个任务使用的资源量。
yarn工作流程:
以下通俗地解释一下向YARN提交一个应用程序时的执行过程:
1、用户向YARN提交程序,以Map Reduce程序为例,Resource Manager(资源管理器)接收到客户端程序的运行请求
2、Resource Manager分配一个Container(资源)用来启动Application Master(程序管理员),并告知Node Manager(节点管理员),要求它在这个Container下启动Application Master
3、Application Master启动后,向Resource Manager发起注册请求
4、Application Master向Resource Manager申请资源
5、取得资源后,根据资源,向相关的Node Manager通信,要求其启动程序
6、Node Manager(多个)启动MR(每个MR任务都是一个job,可以在job日志中查看程序运行日志)
7、Node Manager不断汇报MR状态和进展给Application Master
8、当MR全部完成时,Application Master向Resource Manager汇报任务完成,并注销自己