使用MapReduce新版客户端API提交MapReduce Job需要使用 org.apache.hadoop.mapreduce.Job 类。JavaDoc给出以下使用范例。

// Create a new Job
Job job = new Job(new Configuration());
job.setJarByClass(MyJob.class); // Specify various job-specific parameters
job.setJobName("myjob"); job.setInputPath(new Path("in"));
job.setOutputPath(new Path("out")); job.setMapperClass(MyJob.MyMapper.class);
job.setReducerClass(MyJob.MyReducer.class); // Submit the job, then poll for progress until the job is complete
job.waitForCompletion(true);

从方法名可以看出,MapReduce Job是通过调用Job类的waitForCompletion方法提交到MapReduce框架运行的,而实际上这个方法又调用了Job类的submit方法。submit方法完成全部的提交工作。

submit方法创建一个JobSubmitter实例并通过该实例完成提交工作。创建JobSubmitter实例需要准备两个参数,一个是代表所用文件系统的FileSystem实例,另一个是封装了与MapReduce框架通信的具体协议的ClientProtocol实例。使用这两个实例,JobSubmitter在与集群通信时就不需要关心集群的具体细节,因而其代码可以写成具有一定的通用性。JobSubmitter具体的提交过程与编写客户端程序无关,这里不深入分析。不过,这里有必要分析FileSystem实例和ClientProtocol实例的创建过程。

FileSystem实例和ClientProtocol实例均取自Job的一个私有属性Cluster cluster,Cluster类接受一个封装了客户端程序提供的配置信息的Configuration对象被实例化,在Cluster实例化的过程中,Cluster的FileSystem属性和ClientProtocal属性得以确定,其中FileSystem属性由ClientProtocal属性确定。因此,这里的关键问题是:ClientProtocal属性怎么确定?Cluster使用线程上下文类加载器寻找所有实现了ClientProtocolProvider这个抽象类的类,对于找到的类依次实例化并传递客户端程序提供的配置信息作为参数调用其create方法,直到从返回值获得一个ClientProtocol实例的引用或者遍历结束。若获得引用,这个被赋值给ClientProtocal属性;否则输出出错信息并返回。

可见,客户端程序通过改变传入的配置信息能够改变使用的MapReduce目标。实际上,基于Yarn的MapReduce正是以这种方式被客户端程序访问的。

MapReduce新版客户端API源码分析的更多相关文章

  1. MapReduce之提交job源码分析 FileInputFormat源码解析

    MapReduce之提交job源码分析 job 提交流程源码详解 //runner 类中提交job waitForCompletion() submit(); // 1 建立连接 connect(); ...

  2. 【Netty之旅四】你一定看得懂的Netty客户端启动源码分析!

    前言 前面小飞已经讲解了NIO和Netty服务端启动,这一讲是Client的启动过程. 源码系列的文章依旧还是遵循大白话+画图的风格来讲解,本文Netty源码及以后的文章版本都基于:4.1.22.Fi ...

  3. requests库核心API源码分析

    requests库是python爬虫使用频率最高的库,在网络请求中发挥着重要的作用,这边文章浅析requests的API源码. 该库文件结构如图: 提供的核心接口在__init__文件中,如下: fr ...

  4. 3、MapReduce详解与源码分析

    文章目录 1 Split阶段 2 Map阶段 2.1分区 2.2排序 3 Shuffle阶段 4 Reduce阶段 1 Split阶段      首先,接到hdf文件输入,在mapreduce中的ma ...

  5. hadoop的RPC机制 -源码分析

    这些天一直奔波于长沙和武汉之间,忙着腾讯的笔试.面试,以至于对hadoop RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上 ...

  6. Hadoop的RPC机制源码分析

    分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://www.cnblogs.com/sh425/p/6893662.html )2. ...

  7. Kafka服务端之网络连接源码分析

    #### 简介 上次我们通过分析KafkaProducer的源码了解了生产端的主要流程,今天学习下服务端的网络层主要做了什么,先看下 KafkaServer的整体架构图 ![file](https:/ ...

  8. Java源码分析之LinkedList

    LinkedList与ArrayList正好相对,同样是List的实现类,都有增删改查等方法,但是实现方法跟后者有很大的区别. 先归纳一下LinkedList包含的API 1.构造函数: ①Linke ...

  9. Java Collections 源码分析

    Java Collections API源码分析 侯捷老师剖析了不少Framework,如MFC,STL等.侯老师有句名言: 源码面前,了无秘密 这句话还在知乎引起广泛讨论. 我对教授程序设计的一点想 ...

随机推荐

  1. form表单提交之前推断

    1.使用onsubmit方法 <form name="Form" action="t" method="post" onsubmit= ...

  2. android 滚动视图(ScrollView)

    为了可以让内嵌布局管理器之中加入多个显示的组件,而且又保证程序不这么冗余,所以可以通过 Activity程序进行控制,向内嵌布局管理器中添加多个组件. ScrollView提供一个显示的容器,可以包含 ...

  3. 通过layout实现可拖拽自动排序的UICollectionView

    文/CenturyGuo(简书作者)原文链接:http://www.jianshu.com/p/8d1bf1838882著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. Translat ...

  4. Log4Qt 使用(一)

    一.下载 http://sourceforge.net/projects/log4qt/develop 二.Log4Qt介绍 Log4Qt 是Apache Log4J 的Qt移植版,所以看Log4J的 ...

  5. 打开局域网项目,显示“项目位置不受信任”的解决办法(VS2008)

    弄了几天,网上搜了个遍,愣是解决不了,绝望的时候闭着眼睛胡搞,居然解决了,哈哈.... 开发环境:visual studio 2008 项目位置:局域网其他电脑内 出现问题: 1.弹出“”的对话框,如 ...

  6. ASP.NET 获取IP信息等探针

    获取客户端:HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]: 获取URL Request.RawUrl:获取客 ...

  7. WdatePicker 设置今天起 后30天可选

    <link href="{:ADDON_PUBLIC_PATH}/style/My97DatePicker/skin/WdatePicker.css" rel="s ...

  8. java下radomAccessFile文件写入读取

    package cn.stat.p2.demo; import java.io.FileNotFoundException; import java.io.IOException; import ja ...

  9. 基于live555的一个简单RTSP服务器

    1,编译live555源码目录下的 BasicUsageEnvironment.groupsock.liveMedia.UsageEnvironment四个工程生成相应的库文件: 目录结构如下: 2, ...

  10. smarty练习:数据的增删改

    根据数据库中的三张表格:timu,xuanxiang,kemu来进行数据的增删改查,并且使用smarty模版将前端与后台分离开来 三张表格: 主页面后台 main.php: <?php //引入 ...