Hadoop 学习笔记三 --JobClient 的执行过程

一. MapReduce 作业处理过程概述

当用户在使用Hadoop 的 MapReduce 计算模型处理问题的时候,只需要设计好Mapper 和Reducer 处理函数,还有可能包括Combiner 函数。之后,新建一个Job 对象,并对Job 的运行环境进行一些配置,最后调用Job 的waitForCompletion 或者 submit 方法来提交作业即可。代码如下:

 1 //新建默认的Job 配置对象
 2 Configuration conf = new Configuration();
 3 //根据配置对象和Job 的名字来创建一个Job 对象
 4 Job job = new Job(conf,"作业的名字");
 5 //当在集群中运行一个作业的时候,作业需要打包成jar的形式,Hadoop通过指定的类名来找到包含该类的jar
 6 job.setJarByClass(主类名.class);
 7 job.setMapperClass(Mapper 实现类.class);
 8 job.setCombinerClass(作为Combiner 的Reducer实现类.class);
 9 job.setReducerClass(Reducer 实现类.class);
10 job.setOutputKeyClass(输出Key的数据类型.class);
11 job.setOutputValueClass(输出alue的数据类型.class);
12 FileInputFormat.addInputPath(job, new Path(设置作业的输入路径));
13 FileOutputFormat.setOutputPath(job, new Path(设置作业的输出路径));
14 //将作业提交给集群处理
15 job.waitForCompletion(true);

上图显示了MapReducer的作业执行过程。Job的waitForCompletion 方法内部依靠JobClient 来向JobTracker 提交作业。当JobTracker收到JobClient提交作业的请求之后,会将作业加入到作业队列中去,之后会返回给JobClient一个用于唯一标识该作业的JobID对象。JobTracker 作业队列中的作业会由TaskTracker来执行。TaskTracker 会定期想JobTracker发送心跳,查问JobTracker是否有任务需要进行执行。如果有,JobTrackler会通过心跳相应分配给TaskTracker来执行。当TaskTracker接受到任务后,会在本地创建一个Task来执行任务。

下面介绍JobClient在执行过程的几个重要的知识点:

1. JobConf    MapReduce作业的配置信息

JobConf 类继承于Configuration类,它在Hadoop的Configuration基础信息的基础上,加入了一个与MapReduce作业相关的配置信息。用户就是通过该类来实现对Job作业的配置的。

2. JobSubmissionProtocol 作业提交借口

JobSubmissionProtocol 协议接口是JobClient和JobTracker 进行通信所需要的协议接口。该接口中定义了JobClient用于向JobTracker提交作业、获取作业的执行信息等方法。

3. RunningJob 正在运行的Job作业的借口

RunningJob 为用户提供了访问正在运行的MapReduce作业信息的接口。RunningJob 在JobClient中被实现了,所以我们可以通过JobClient来获得RunningJob 的一个实例,然后运用RunningJob 实例来查询正在运行的Job的相关信息。

4. JobStatus 和 JobProfile 作业状态信息和注册信息

JobStatus 对象代表的是Job的当前运行状态信息,比如组成该Job的所有Mapper任务已经完成的进度信息等,这些状态信息会随着Job的运行而不断发生变化。JobProfile对象代表的是Job添加到MapReduce框架时所携带的注册信息,这些注册信息是不会改变的。

5. JobSubmissionFiles 获得作业提交的文件

MapReduce在初始化的过程中,Hadoop框架会为用户提交的Job创建相应的目录,然后存储与该Job相关的文件,比如MapReduce需要的jar文件,或者Job的配置文件。JobSubmissionFiles类提供了访问与Job相关的文件以及与该Job所对应的分布式缓存中存放不同类型文件的目录的方法,但这个类只在Hadoop框架的内部被使用。

二. JobClient 提交作业流程

1. 向JobTracker请求一个新的作业的ID对象JobID

2.检查Job的输入输出。输入不能为空,而且在运行作业之前,输出不能已经存在

3.计算作业的所有的InputSplit 输入分片数即需要的Mapper 任务数量

4.启动与Job相关的分布式缓存DistributedCache

5.将作业运行时需要的资源包括Job 的jar包、配置文件等从Hadoop的分布式文件系统中复制到JobTracker的文件系统中的指定目录下

6.将作业提交到JobTracker 的作业队列中,并监控作业的运行状况

时间: 2024-08-10 04:26:01

Hadoop 学习笔记三 --JobClient 的执行过程的相关文章

Hadoop 学习笔记四--JobTracker 的执行过程

Hadoop中MapReduce 的执行也是采用Master/Slave 主从结构的方式.其中JobTracker 充当了Master的角色,而TaskTracker 充当了Slave 的角色.Master负责接受客户端提交的Job,然后调度Job的每一个子任务Task运行于Slave上,并监控它们.如果发现所有失败的Task就重新运行它,slave则负责直接执行每一个Task. 当Hadoop启动的时候,JobTracker 是作为单独的一个JVM来运行的.JobTracker 会一直等待Jo

hadoop学习笔记(三)——WIN7+eclipse+hadoop2.5.2部署

折腾了大半个晚上最终部署成功了,比在Linux上面略微复杂一点,具体过程例如以下: 1)  jdk.ant.hadoop环境变量配置 2)  分别将hadoop-2.5.2.tar.gz.hadoop-2.5.2-src.tar.gz.hadoop2x-eclipse-plugin.hadoop-common-2.2.0-bin下载解压到D:\profession\hadoop文件夹下 3)  改动hadoop-eclipse-plugin-2.5.2.jar配置 改动D:\profession

Linux学习笔记(三):系统执行级与执行级的切换

1.Linux系统与其它的操作系统不同,它设有执行级别.该执行级指定操作系统所处的状态.Linux系统在不论什么时候都执行于某个执行级上,且在不同的执行级上执行的程序和服务都不同,所要完毕的工作和所要达到的目的也都不同. 2.Linux(Red Hat 9.0)设置了7个不同的执行级,系统能够在这些执行级别之间进行切换以完毕不同的工作. 3.接下来简介7个系统执行级: (1).执行级0:关闭计算机. (2).执行级1:单用户模式. (3).执行级2:多用户模式(不带网络文件系统NFS支持功能).

Hadoop学习笔记(三) ——HDFS

参考书籍:<Hadoop实战>第二版 第9章:HDFS详解 1. HDFS基本操作 @ 出现的bug信息 @[email protected] WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable @[email protected] WARN hdfs.DFSClient: DFSInpu

Hadoop学习笔记三:分布式hadoop部署

前语:如果看官是个比较喜欢使用现成软件的,比较推荐使用quickhadoop,这个使用参照官方文档即可,是比较傻瓜式的,这里不做介绍.本文主要是针对自己部署分布式hadoop. 1.修改机器名 [[email protected] root]# vi /etc/sysconfig/network 将HOSTNAME=*** 一栏改成适当的名称,笔者两台机器采用HOSTNAME=Hadoop00,HOSTNAME=Hadoop01这种方式. 2.修改IP,网关,掩码等 vim /etc/sysco

Hadoop学习笔记(三)——zookeeper的一致性协议:ZAB

ZAB:ZooKeeper的Atomic Broadcast协议,能够保证发给各副本的消息顺序相同. Zookeeper使用了一种称为Zab(ZookeeperAtomic Broadcast)的协议作为其一致性复制的核心,其特点为高吞吐量.低延迟.健壮.简单,但不过分要求其扩展性. Zookeeper的实现是有Client.Server构成,Server端提供了一个一致性复制.存储服务,Client端会提供一些具体的语义,比如分布式锁.选举算法.分布式互斥等.从存储内容来说,Server端更多

Hadoop学习笔记(8) ——实战 做个倒排索引

Hadoop学习笔记(8) ——实战 做个倒排索引 倒排索引是文档检索系统中最常用数据结构.根据单词反过来查在文档中出现的频率,而不是根据文档来,所以称倒排索引(Inverted Index).结构如下: 这张索引表中, 每个单词都对应着一系列的出现该单词的文档,权表示该单词在该文档中出现的次数.现在我们假定输入的是以下的文件清单: T1 : hello world hello china T2 : hello hadoop T3 : bye world bye hadoop bye bye 输

hadoop 学习笔记:mapreduce框架详解

hadoop 学习笔记:mapreduce框架详解 开始聊mapreduce,mapreduce是hadoop的计算框架,我 学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能是我做技术研究的 思路有关,我开始学习某一套技术总是想着这套技术到底能干什么,只有当我真正理解了这套技术解决了什么问题时候,我后续的学习就能逐步的加快,而学习 hdfs时候我就发现,要理解hadoop框架的意义,hdfs和mapreduce是密不

Hadoop学习笔记(2) ——解读Hello World

Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello Word. OK,我们先来看一下当时在命令行里输入的内容: $mkdir input $cd input $echo "hello world">test1.txt $echo "hello hadoop">test2.txt $cd .. $bin/ha