之前已经学过了MapReduce接口编程模型及涉及的相关组件,本节我们主要学习MapReduce的作业提交过程和如何初始化作业这两部分的内容。
下面我们来熟悉一下MapReduce作业的提交和初始化的过程:
作业的提交过程
第一步,使用Hadoop提供的shell命令提交作业,命令行作业提交命令:
$HADOOP_HOME/bin/hadoop jar job.jar \
-D mapred.job.name="task-test" \
-D mapred.reduce.tasks=3 \
-files=blacklist.txt,whitelist.xml \
-libjars=xxx.jar \
-archives=yyy.zip \
-input /test/input \
-output /test/output
当用户按上述命令格式提交作业后,命令行脚本会调用JobClient.runJob()方法(1.0新版本的MapReduce API使用job.waitForCompletion(true)方法)提交作业,之后的函数调用过程如下图所示:
第二步,作业文件上传
JobClient将作业提交到JobTracker节点上之前,需要作业写初始化工作。初始化工作由JobClient.submitJobInternal(job)实现,这些初始化包括获取作业的jobId、创建HDFS目录、上传作业以及生成所有的InputSplit分片的相关信息等。
MapReduce的作业文件的上传和下载都是由DistributedCache透明完成的,它是Hadoop专门开发的数据分发工具。
第三步,生成InputSplit文件
作业提交后,JobClient会调用InputFormat的getSplits()方法生成相关的split分片信息,该信息包括InputSplit元数据信息和原始的InputSplit信息,其中元数据信息被JobTracker使用,第二部分在Map Task初始化时由Mapper使用来获取自己要处理的数据,这两部分数据被保存到job.split文件和job.splitmetainfo文件中。
第四步,将作业提交到JobTracker
JobClient通过RPC将作业提交到JobTracker端,在这一阶段会依次进行如下操作:
1)、为作业创建JobInProgress对象。JobTracker会为用户提交的每一个作业创建一个JobInProgress对象,这个对象维护了作业的运行时信息,主要用于跟踪正在运行的作业的状态和进度;
2)、检查用户是否具有指定队列的作业提交权限。Hadoop以队列为单位来管理作业和资源,每个队列分配有一定亮的资源,管理严可以为每个队列指定哪些用户有权限提交作业;
3)、检查作业配置的内存使用量是否合理。用户在提交作业时,可已分别通过参数mapred.job.map.memory.mb和mapred.job.reduce.memory.mb指定Map Task和Reduce Task的内存使用量,而管理员可以给集群中的Map Task和Reduce Task分别设置中的内存使用量,一旦用户配置的内存使用量超过总的内存限制,作业就会提交失败;
4)、通知TaskScheduler初始化作业
JobTracker收到提交的作业后,会交给TaskScheduler调度器,然后按照一定的策略对作业做初始化操作。
作业的初始化
作业的初始化主要是指构造Map Task和Reduce Task并对它们进行初始化操作。
这一步的操作主要是由调度器调用JobTracker.initJob()方法来对新作业做初始化的。Hadoop将每个作业分节成4中类型的任务:Setup Task,Map Task,Reduce Task和Cleanup Task,它们的运行时信息由TaskInProgress维护,因此,从某个方面将,创建这些任务就是创建TaskInProgress对象。
Setup Task
作业初始化标志性任务,它进行一些很简单的作业初始化工作。该类型任务又分为Map Setup Task和Reduce Setup Task两种,并且只能运行一次。
Map Task
Map阶段的数据处理任务。
Reduce Task
Reduce阶段的处理数据的任务。其数目可以由用户通过参数mapred.reduce.tasks指定。Hadoop刚开始的时候只会调度Map Task任务,直到Map Task完成数目达到由参数mapred.reduce.slowstart.completed.maps指定的百分比后,才开始调度Reduce Task。
Cleanup Task
作业结束的标志性任务,主要是做一些作业清理的工作,比如删除作业在运行中产生的一些零食目录和数据等信息。
- 大小: 59.3 KB
- 大小: 30 KB
分享到:
相关推荐
除此之外,可能还会有驱动程序(Driver)代码,用于配置和提交MapReduce作业。 在MapReduce中,数据通常存储在HDFS(Hadoop Distributed File System)上,而JobTracker和TaskTracker负责作业的调度和任务的执行。...
- RM还负责应用程序的生命周期管理,包括应用程序的提交、初始化、运行和终止。 2. **NodeManager**: - NM是每个节点的代理,负责本地节点的资源管理和任务执行。 - 它会周期性地向RM发送心跳,报告节点资源...
在Hadoop生态系统中,MapReduce是一种分布式计算框架,它允许我们处理海量数据并行化,非常适合大规模数据集的处理...通过阅读和分析像`TestMR.java`这样的源代码,我们可以深入学习并熟练运用MapReduce解决实际问题。
- **作业初始化**: JobTracker 负责初始化作业,并进行调度。 - **任务分配**: TaskTracker 定期向 JobTracker 请求任务,并执行分配的任务。 - **任务执行**: TaskTracker 启动 Map 或 Reduce 任务,执行具体的计算...
1. 初始化:选择 k 个初始质心(簇中心)。 2. 分配阶段:将每个数据点分配到最近的质心所在的簇。 3. 更新阶段:重新计算每个簇的质心,即该簇内所有数据点的均值。 4. 检查停止条件:如果质心的位置不再改变或达到...
5. 初始化Hadoop:执行`hadoop namenode -format`初始化NameNode。 ### 二、HDFS配置 HDFS是Hadoop的数据存储系统,其配置主要在`hadoop/conf`目录下的`hdfs-site.xml`文件。关键配置项包括: 1. `dfs....
5. **Hadoop MapReduce的生命周期**:作业提交、初始化、分配任务、运行Map任务、Shuffle和Sort、运行Reduce任务、完成作业。每个阶段都有相应的Hadoop API参与,开发者可以通过这些API进行干预和优化。 6. **YARN...
MapReduce是Hadoop生态系统中的核心组件,主要用于处理和存储大规模数据。...通过阅读《Job本地提交过程源码分析及图解》这样的文档,我们可以深入学习MapReduce的工作原理,提升我们的Hadoop编程技能。
6. **源码理解**:阅读和理解Hadoop MapReduce的源码有助于深入学习其工作原理。你可以查看Hadoop的开源代码库,了解如何初始化JobConf,设置Mapper和Reducer,以及如何提交任务到JobTracker。 7. **工具**:除了...
6. **Hadoop的安装与配置**:实例可能涵盖Hadoop环境的搭建,包括配置Hadoop的环境变量、初始化HDFS、启动MapReduce服务等步骤。 7. **编程接口**:Hadoop提供了Java API来编写MapReduce程序,但也有如Hadoop ...
- **格式化NameNode**:首次启动Hadoop集群前,需要对NameNode进行格式化,初始化HDFS元数据。 - **启动Hadoop**:通过命令启动Hadoop的各个服务,包括DataNode、NameNode、ResourceManager、NodeManager等。 4. ...
7. **Hadoop安装与配置**:学习如何在本地或集群环境下搭建Hadoop环境,包括配置Hadoop的环境变量、初始化HDFS、启动和停止服务等。 8. **数据处理实践**:通过实例演示如何使用Hadoop处理数据,如使用MapReduce...
4. **安装与配置**: 安装Hadoop涉及多个步骤,包括下载Hadoop发行版、配置环境变量、设置Hadoop配置文件(如hdfs-site.xml和mapred-site.xml)以及初始化HDFS和启动守护进程。对于初学者来说,理解这些步骤至关重要...
4. Oozie:工作流调度系统,用于管理Hadoop作业和其他计算框架(如Pig、Hive等)的作业流程。 5. ZooKeeper:分布式协调服务,确保集群中的节点间通信和一致性。 6. Hive:基于Hadoop的数据仓库工具,提供了SQL-...
通过这个案例,学习者可以深入理解MapReduce的编程模型,包括如何处理输入输出、如何编写Mapper和Reducer,以及如何在Hadoop环境中提交和运行作业。同时,优化经验对于提升程序性能和稳定性至关重要。对于新手来说,...
在本教程中,我们将深入探讨如何使用Cygwin和Eclipse搭建Hadoop的单机开发环境,以便在Windows操作系统上进行高效的数据处理和分析。Cygwin是一个提供Linux-like环境的开源工具集,使得Windows用户可以运行原本为...
Driver类负责初始化`Job`对象,并设置其属性(如输入路径、输出路径、映射器和化简器类等),然后提交作业进行执行。 #### 四、WordCount实例详解 - **WordCount**:这是一个经典的MapReduce示例程序,用于统计文本...
1. JobClient:提交作业的客户端,负责与ResourceManager通信,初始化ApplicationMaster。 2. ResourceManager:全局资源调度中心,负责分配集群中的资源。 3. NodeManager:运行在每个节点上,管理该节点上的容器,...