Reducer的实现

map任务读取数据,解析数据,按照键值将数据分成一组一组的,reduce任务收集map任务的输出,通过合并、排序和归约三个过程对map的输出数据进行进一步的处理。现在我们只关心归约过程即reduce函数的实现。

实际上我们不用重新去实现,只需继承Hadoop提供的Mapper类即可,Mapper类的几个主要函数如下:

protected void setup(Context context) throws IOException, InterruptedException {//添加自己的初始化程序,比如读取作业的配置,自定义参数,读取DistrubteCache等}protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context) throws IOException, InterruptedException {//reduce主要业务流,下面的是默认实现,即老版本的IdentityReduce,数据原样输出。通过覆写,实现自己的业务流程for(VALUEIN value: values) {context.write((KEYOUT) key, (VALUEOUT) value);}}protected void cleanup(Context context) throws IOException, InterruptedException {// 所有的清理操作}

下面还是以一个例子作为结束,该类实现了liunx的cut工具的功能的Reducer,和上一节中的FieldSelectionMapper刚好是一套,所有的设置也是类似的,
输出的key/value对,以mapreduce.fieldsel.reduce.output.key.value.fields.spec来指定,格式和FieldSelectionMapper一样

public class FieldSelectionReducer<K, V>extends Reducer<Text, Text, Text, Text> {private String fieldSeparator = "\t";private String reduceOutputKeyValueSpec;private List<Integer> reduceOutputKeyFieldList = new ArrayList<Integer>();private List<Integer> reduceOutputValueFieldList = new ArrayList<Integer>();private int allReduceValueFieldsFrom = -1;public static final Log LOG = LogFactory.getLog("FieldSelectionMapReduce");public void setup(Context context)throws IOException, InterruptedException {Configuration conf = context.getConfiguration();this.fieldSeparator =conf.get(FieldSelectionHelper.DATA_FIELD_SEPERATOR, "\t");this.reduceOutputKeyValueSpec =conf.get(FieldSelectionHelper.REDUCE_OUTPUT_KEY_VALUE_SPEC, "0-:");allReduceValueFieldsFrom = FieldSelectionHelper.parseOutputKeyValueSpec(reduceOutputKeyValueSpec, reduceOutputKeyFieldList,reduceOutputValueFieldList);}public void reduce(Text key, Iterable<Text> values, Context context)throws IOException, InterruptedException {String keyStr = key.toString() + this.fieldSeparator;for (Text val : values) {FieldSelectionHelper helper = new FieldSelectionHelper();helper.extractOutputKeyValue(keyStr, val.toString(),fieldSeparator, reduceOutputKeyFieldList,reduceOutputValueFieldList, allReduceValueFieldsFrom, false, false);context.write(helper.getKey(), helper.getValue());}}
}

转载于:https://www.cnblogs.com/flyingwhitepig/archive/2012/11/14/5874090.html

一步一步学习hadoop(九)相关推荐

  1. 一步一步跟我学习hadoop(5)----hadoop Map/Reduce教程(2)

    Map/Reduce用户界面 本节为用户採用框架要面对的各个环节提供了具体的描写叙述,旨在与帮助用户对实现.配置和调优进行具体的设置.然而,开发时候还是要相应着API进行相关操作. 首先我们须要了解M ...

  2. GitChat · 大数据 | 一步一步学习大数据:Hadoop 生态系统与场景

    目录(?)[-] Hadoop概要 Hadoop相关组件介绍 HDFS Yarn Hive HBase Spark Other Tools Hadoop集群硬件和拓扑规划 硬件配置 软件配置 Hado ...

  3. 【深度学习基础】一步一步讲解卷积神经网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送 本文转自:一步一步讲解卷积神经网络 卷积神经网络(Convoluti ...

  4. 一步一步学习iOS 5编程(第三版)-PDF中文版-正式发布!

    目前,这是第一本介绍iOS 5.x 和 Xcode 4.4 的中文版书籍,尤其适合于iOS 编程开发初学者.本教程由 EntLib.com 团队编写.如有任何技术问题,欢迎留言. 电子版 – PDF ...

  5. 一步一步学习iOS 摘记

    本文参考<一步一步学习iOS6编程>书籍, 下载链接: http://download.csdn.net/detail/u012605629/8788505 第一部分:Hello Worl ...

  6. 通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本...

    通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本   版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 ...

  7. 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序 - 强烈推荐!!!

    一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序 本文根据<Professional ASP.NET MVC 1.0>中微软牛人Scott Guthrie 提供 ...

  8. 一步一步学习SignalR进行实时通信_6_案例

    原文:一步一步学习SignalR进行实时通信_6_案例一步一步学习SignalR进行实时通信\_6_案例1 一步一步学习SignalR进行实时通信_6_案例1 前言 类的定义 各块功能 后台 上线 下 ...

  9. 据lovecherry的一步一步学Remoting序列文章学习.net Remoting日记(2)

    今天学习了服务器端激活和客户端激活的区别!可还是出现了一点点的差错,经过对比得到正确的调用方法,整理如下: 1.服务器端激活,分为两种方式Singleton和SingleCall方式 Server端A ...

  10. Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理

    本来这第二篇打算讲解"开发第一个基于XFire的webservice"的内容来着.但是想想.开发实例只是局限于了会用的层面上.如果想真正的理解webservice还是需要挖掘其原理 ...

最新文章

  1. Linux内核之话说进程
  2. 【LeetCode从零单排】No19.RemoveNthNodeFromEndofList
  3. JavaScript面向对象编程之Singleton类
  4. CentOS中安装git
  5. mysql的查询语句怎么优化_MySQL查询语句如何优化
  6. C# MVC 自定义ActionResult实现EXCEL下载
  7. JSF Spring Hibernate集成示例教程
  8. c# 调用Minitab18.1实现直方图、质量正态图
  9. 游戏资源提取常用工具索引
  10. matlab构造arma模型,ARMA模型构建及MATLAB实现
  11. tomcat 9 http请求中文乱码问题
  12. 边写SQL边学数据库入门实验2(持续更新)
  13. 龙芯3a5000下编译postgresql 14.3
  14. 免费的asp.net 2.0空间
  15. 三星Q990B全景声回音壁评测
  16. opencv-11-中值滤波的C++实现与自适应中值滤波
  17. 微信多媒体文件speex格式转为mp3文件格式
  18. msvc2017配置qt5.12.8 x86和x64库版本切换
  19. Scikit-Learn&More,用于机器学习的综合数据集生成
  20. Java 如何学习?这份5000页Java学习手册值得拥有,适合零基础自学也适合查漏补缺!

热门文章

  1. HTML DOM Image 对象
  2. Android 四大组件 之 活动(Activity)
  3. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_16-页面静态化-模板管理-模板制作...
  4. VC CUtilityLZW 效率还行的LZW压缩算法,随机数加密
  5. 团队开发——冲刺1.e
  6. 通过I2C总线向EEPROM中写入数据,记录开机次数
  7. jdbc心得-2-数据库与java相结合
  8. 电脑蓝屏后你该做的几桩要事
  9. Linux如何在系统启动时自动加载模块 .
  10. eclipse搭建springmvc