MapReduce框架Mapper和Reducer类源码分析
一:Mapper类
在Hadoop的mapper类中,有4个主要的函数,分别是:setup,cleanup,map,run。代码如下:
- protected void setup(Context context) throws IOException, InterruptedException {
- // NOTHING
- }
- protected void map(KEYIN key, VALUEIN value,
- Context context) throws IOException, InterruptedException {
- context.write((KEYOUT) key, (VALUEOUT) value);
- }
- protected void cleanup(Context context) throws IOException, InterruptedException {
- // NOTHING
- }
- public void run(Context context) throws IOException, InterruptedException {
- setup(context);
- while (context.nextKeyValue()) {
- map(context.getCurrentKey(), context.getCurrentValue(), context);
- }
- cleanup(context);
- }
- }
由上面的代码,我们可以了解到,当调用到map时,通常会先执行一个setup函数,最后会执行一个cleanup函数。而默认情况下,这两个函数的内容都是nothing。因此,当map方法不符合应用要求时,可以试着通过增加setup和cleanup的内容来满足应用的需求。
二:Reducer类
- /**
- * Called once at the start of the task.
- */
- protected void setup(Context context
- ) throws IOException, InterruptedException {
- // NOTHING
- }
- /**
- * This method is called once for each key. Most applications will define
- * their reduce class by overriding this method. The default implementation
- * is an identity function.
- */
- @SuppressWarnings("unchecked")
- protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context
- ) throws IOException, InterruptedException {
- for(VALUEIN value: values) {
- context.write((KEYOUT) key, (VALUEOUT) value);
- }
- }
- /**
- * Called once at the end of the task.
- */
- protected void cleanup(Context context
- ) throws IOException, InterruptedException {
- // NOTHING
- }
- /*
- * control how the reduce task works.
- */
- @SuppressWarnings("unchecked")
- public void run(Context context) throws IOException, InterruptedException {
- setup(context);
- while (context.nextKey()) {
- reduce(context.getCurrentKey(), context.getValues(), context);
- // If a back up store is used, reset it
- ((ReduceContext.ValueIterator)
- (context.getValues().iterator())).resetBackupStore();
- }
- cleanup(context);
- }
- }
MapReduce框架Mapper和Reducer类源码分析相关推荐
- hisi3516dv300芯片基于hwmon驱动框架的温度获取驱动源码分析
1.内核hwmon驱动框架 参考博客:<内核hwmon驱动框架详解以及海思芯片温度驱动分析>: 2.驱动实现的效果 /sys/devices/virtual/hwmon/hwmon0 # ...
- 02.并发编程(2)Thread类源码分析
概述 在说线程之前先说下进程,进程和线程都是一个时间段的描述,是CPU工作时间段的描述. 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一 ...
- java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...
java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...
- 插件式换肤框架搭建 - 资源加载源码分析
资源加载源码分析 1.首先我们来看一下ImageView是如何加载资源的: public ImageView(Context context, @Nullable AttributeSet attrs ...
- MapReduce中map并行度优化及源码分析
mapTask并行度的决定机制 一个job的map阶段并行度由客户端在提交job时决定,而客户端对map阶段并行度的规划的基本逻辑为:将待处理数据执行逻辑切片(即按照一个特定切片大小,将待处理数据划分 ...
- java disruptor压测_Java并发框架Disruptor实现原理与源码分析(二) 缓存行填充与CAS操作...
##缓存行填充 关于缓存行填充在我个人的印象里面第一次看到是在Java的java.util.concurrent包中,因为当时很好奇其用法背后的逻辑,所以查了很多资料才明白到底是怎么回事*(也许事实上 ...
- java.lang.object源码_第三篇:java.lang.Object 类源码分析
Object所包含的方法如下: ① public Object(); 构造函数: 大部分情况下,类对象的声明,都是通过构造函数完成的(Java中规定:在类定义过程中,对于未定义构造函数的类,默认会有一 ...
- Java 8 中 GZIPInputStream 类源码分析
这是<水煮 JDK 源码>系列 的第4篇文章,计划撰写100篇关于JDK源码相关的文章 GZIPInputStream 类位于 java.util.zip 包下,继承于 InflaterI ...
- java.lang中String类源码分析
一.类 public final class String:final关键字说明String类不能被修改(不能被其他类继承和重写) public final class Stringimplement ...
最新文章
- 素数、最大公约数、最下公倍数、质因数分解
- boost::test模块测试参数化测试
- 划分VLAN,根据每个VLAN通过DHCP分配IP地址
- 解决创建maven项目后,不能创建scala
- pata1015_ATA / PATA的完整形式是什么?
- CodeForces - 894E Ralph and Mushrooms (强连通缩点+dp)
- MySQL安装叫重启,如何重启MySQL,正确启动MySQL
- 递增三元组蓝桥杯c语言,蓝桥-递增三元组-蓝桥
- 06Matplotlib数据可视化--6.3折线图和柱状图
- Linux基础-获取命令帮助与命令的查找(1)
- ftp服务器默认文件夹,ftp服务器设置文件目录
- navicat建mysql数据库密码_Navicat修改MySQL数据库密码的多种方法
- Hexo博客-NexT主题自定义主页配置方法
- 微信小程序及其兼容性
- 基于朴素贝叶斯的兴趣分类
- stm32F407按键例程安富莱
- mysql删除某张表三个月前的数据
- Python基础(三)Python容器:列表、元组、字典和集合
- lamport面包店算法详细讲解及代码实现
- 日语二级语法汇总(part7/16)
热门文章
- SQL Server : T-SQL中拆分字符串的一个自定义函数
- 把项目发到github
- ubuntu 14.04 LTS 右键菜单解压压缩包时出错
- halcon算子翻译——set_framegrabber_param
- MathType如何设置标尺的单位
- 特别推荐:15个精美 Metro UI 风格 WordPress 主题
- Tomcat三种模式及配置APR模式
- 了解 NoSQL 的必读资料
- SpringBoot使用教程【1】Restful API设计 返回json,xml格式...
- js数组、字符串常用方法和互相转换,==和===