hadoop2.5 mapreduce编程实例

2.5 hadoop2.5 mapreduce编程实例
由于本书以“作业生命周期”为线索对Hadoop MapReduce架构设计和实现原理进行解析,因而在深入剖析各个MapReduce实现细节之前整体了解一个作业的生命周期显得非常重要。为此,本节主要讲解Hadoop MapReduce作业的生命周期,即作业从提交到运行结束经历的整个过程。本节只是概要性地介绍MapReduce作业的生命周期,可看作后续几章的内容导读。作业生命周期中具体各个阶段的深入剖析将在后续的章节中进行。

1 个评论

假设用户编写了一个MapReduce程序,并将其打包成xxx.jar文件,然后使用以下命令提交作业:


$HADOOP_HOME/bin/hadoop jar xxx.jar \
-D mapred.job.name="xxx" \
-D mapred.map.tasks=3 \
-D mapred.reduce.tasks=2 \
-D input=/test/input \
-D output=/test/output
则该作业的运行过程如图2-9所示。







这个过程分为以下5个步骤:

步骤1 作业提交与初始化。用户提交作业后,首先由JobClient实例将作业相关信息,比如将程序jar包、作业配置文件、分片元信息文件等上传到分布式文件系统(一般为HDFS)上,其中,分片元信息文件记录了每个输入分片的逻辑位置信息。然后JobClient通过RPC通知JobTracker。JobTracker收到新作业提交请求后,由作业调度模块对作业进行初始化:为作业创建一个JobInProgress对象以跟踪作业运行状况,而JobInProgress则会为每个Task创建一个TaskInProgress对象以跟踪每个任务的运行状态,TaskInProgress可能需要管理多个“Task运行尝试”(称为“Task Attempt”)。具体分析见第5章。

步骤2 任务调度与监控。前面提到,任务调度和监控的功能均由JobTracker完成。TaskTracker周期性地通过Heartbeat向JobTracker汇报本节点的资源使用情况,一旦出现空闲资源,JobTracker会按照一定的策略选择一个合适的任务使用该空闲资源,这由任务调度器完成。任务调度器是一个可插拔的独立模块,且为双层架构,即首先选择作业,然后从该作业中选择任务,其中,选择任务时需要重点考虑数据本地性。此外,JobTracker跟踪作业的整个运行过程,并为作业的成功运行提供全方位的保障。首先,当TaskTracker或者Task失败时,转移计算任务;其次,当某个Task执行进度远落后于同一作业的其他Task时,为之启动一个相同Task,并选取计算快的Task结果作为最终结果。具体分析见第6章。

步骤3 任务运行环境准备。运行环境准备包括JVM启动和资源隔离,均由TaskTracker实现。TaskTracker为每个Task启动一个独立的JVM以避免不同Task在运行过程中相互影响;同时,TaskTracker使用了操作系统进程实现资源隔离以防止Task滥用资源。具体分析见第7章。

步骤4 任务执行。TaskTracker为Task准备好运行环境后,便会启动Task。在运行过程中,每个Task的最新进度首先由Task通过RPC汇报给TaskTracker,再由TaskTracker汇报给JobTracker。具体分析见第8章。

步骤5 作业完成。待所有Task执行完毕后,整个作业执行成功。

要回复文章请先登录注册