MapReduce新版客户端API源码分析
使用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源码分析的更多相关文章
- MapReduce之提交job源码分析 FileInputFormat源码解析
MapReduce之提交job源码分析 job 提交流程源码详解 //runner 类中提交job waitForCompletion() submit(); // 1 建立连接 connect(); ...
- 【Netty之旅四】你一定看得懂的Netty客户端启动源码分析!
前言 前面小飞已经讲解了NIO和Netty服务端启动,这一讲是Client的启动过程. 源码系列的文章依旧还是遵循大白话+画图的风格来讲解,本文Netty源码及以后的文章版本都基于:4.1.22.Fi ...
- requests库核心API源码分析
requests库是python爬虫使用频率最高的库,在网络请求中发挥着重要的作用,这边文章浅析requests的API源码. 该库文件结构如图: 提供的核心接口在__init__文件中,如下: fr ...
- 3、MapReduce详解与源码分析
文章目录 1 Split阶段 2 Map阶段 2.1分区 2.2排序 3 Shuffle阶段 4 Reduce阶段 1 Split阶段 首先,接到hdf文件输入,在mapreduce中的ma ...
- hadoop的RPC机制 -源码分析
这些天一直奔波于长沙和武汉之间,忙着腾讯的笔试.面试,以至于对hadoop RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上 ...
- Hadoop的RPC机制源码分析
分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://www.cnblogs.com/sh425/p/6893662.html )2. ...
- Kafka服务端之网络连接源码分析
#### 简介 上次我们通过分析KafkaProducer的源码了解了生产端的主要流程,今天学习下服务端的网络层主要做了什么,先看下 KafkaServer的整体架构图 
Java 反射类:ReflexUtil public class ReflexUtil { static Logger logger = LoggerFactory.getLogger(ReflexU ...
- 升级Android ADT 和SDK
因为眼下从事android开发工作,所以升级了下Android SDK和eclipse ADT插件 一.更新ADT 1.Eclipse中打开Help->Install New Software. ...
- 二、Solr安装(Tomcat)
安装环境 Windows 7 64bit Apache-tomcat-8.0.9-windows-x64 Solr-4.9.0 JDK 1.8.0_05 64bit 安装步骤 Tomcat和JDk的安 ...
- [Angular 2]ng-class and Encapsulated Component Style2
Many Components require different styles based on a set of conditions. Angular 2 helps you style you ...
- nyist oj 79 拦截导弹 (动态规划基础题)
拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描写叙述 某国为了防御敌国的导弹突击.发展中一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以 ...
- Bitmap的一些操作
1.截取 Bitmap 的部分区域 mBitmap = Bitmap.createBitmap(bmp, 100, 100, 120, 120); 这句代码从 bmp 的 (100,100) 处截取 ...
- Eclipse Removing obsolete files from server 问题
今天在修改server.xml调试程序时,遇到下面这个问题,clean,重启都不好使. Removing obsolete files from server.. ...
- CSharp命名风格
1.大小写约定 为了区分一个标识符中的多个单词,把标识符中的每个单词的首字母大写.不要用下划线来区分单词,或者在标识符中任何地方使用下划线,有两种方式适合大写标识符的字母: PascalCasing( ...
- 使用Gird++打印出现“Retrieving the COM class factory for component with CLSID”的解决办法
我们的接口需要返回一个gird++生成PDF文件的二进制数据,在本地测试都很好,发布到服务器上一直出现“Retrieving the COM class factory for component w ...
- cocos2dx SpriteBatchNode 精灵的渲染优化类
用处是减少对精灵的渲染次数,用法如下 SpriteFrameCache::getInstance()->addSpriteFramesWithFile("person.plist&qu ...