Hadoop学习系列笔记(四):MapReduce应用开发与MapReduce的工作机制
MapReduce应用开发
MapReduce编程流程:首先写map函数和reduce函数,使用单元测试确保函数的运行符合预期,然后写一个驱动程序来运行作业(可在本地IDE中用一个小数据集进行测试),最后将通过测试的程序放到集群上运行。
资源文件:
configuration.xml、core-default.xml、core-site.xml
MapReduce的工作流:
JobControl的实例表示一个作业的运行图,可以加入作业的配置,告知JobControl实例作业之间的依赖关系。在一个线程中JobControl将按照依赖顺序执行这些作业。如果一个作业失败,JobControl将不执行与之有依赖关系的后续作业。(JobControl在客户端运行并提交作业)
Apache Oozie:Oozie作为服务器运行,客户端提交一个立即或稍后执行的工作流定义到服务器。在Oozie中,工作流是一个由动作(action)节点和控制流节点组成的有向无环图。动作节点执行工作流任务,控制流节点通过构建条件逻辑或并行执行来管理活动之间的工作流执行情况。当工作流结束时,Oozie通过发送一个HTTP的回调向客户端通知工作流的状态。(Oozie工作流)
MapReduce的工作机制
可通过一个简单的方法调用来运行MapReduce作业:Job对象上的submit()。也可调用waitForCompletion(),它用于提交以前没有提交过的作业,并等待它的完成。submit()方法调用封装了大量的处理细节。
Hadoop 2.0引入了一种新的执行机制,这种机制建立在一个名为YARN的系统上。通过设置mapreduce.framework.name属性值选择执行的框架。local表示本地的作业运行器,classic表示经典的MapReduce框架(使用一个jobtracker和多个tasktracker),yarn表示新的框架。不同的执行框架表示运行MapReduce程序的不同途径。
作业在经典MapReduce(MapReduce 1)中运行工作原理如下图所示。
包含4个独立实体:
客户端->:提交MapReduce作业
Jobtracker->:协调作业的运行
Tasktracker->:运行作业划分后的任务
分布式文件系统->:一般是HDFS,用来在其他实体间共享作业文件
YARN(MapReduce 2):
YARN将Jobtracker的职能划分为多个独立的实体,改善了“经典的”MapReduce面临的扩展瓶颈问题。Jobtracker负责作业调度和任务进度监视,YARN将这两种角色划分为两个独立的守护进程:管理集群上资源使用的资源管理器和管理集群上运行任务生命周期的应用管理器。基本思路是:应用管理器与资源管理器协商集群的计算资源:容器,在这些容器上运行特定应用程序的进程。容器由集群节点上运行的节点管理器监视。
YARN上的MapReduce比经典的MapReduce包括更多的实体:
->:提交MapReduce作业的客户端;
->:YARN资源管理器,负责协调集群上计算资源的分配;
->:YARN节点管理器,负责启动和监视集群中机器上的计算容器;
->:MapReduce应用程序master负责协调运行MapReduce作业的任务。它和MapReduce任务在容器中运行,这些容器由资源管理器分配并由节点管理器进行管理。
->:分布式文件系统,一般是HDFS,用来在其他实体间共享作业文件。
作业的运行过程如下图所示。