024_MapReduce中的基类Mapper和基类Reducer

内容提纲

1) MapReduce中的基类Mapper类,自定义Mapper类的父类。

2) MapReduce中的基类Reducer类,自定义Reducer类的父类。

1、Mapper类

API文档

1) InputSplit输入分片,InputFormat输入格式化

2) 对Mapper输出结果进行Sorted排序和Group分组

3) 对Mapper输出结果依据Reducer个数进行分区Patition

4) 对Mapper输出数据进行Combiner

  • 在Hadoop官方文档的Mapper类说明:

  Maps input key/value pairs to a set of intermediate key/value pairs.

  Maps are the individual tasks which transform input records into a intermediate records. The transformed intermediate records need not be of the same type as the input records. A given input pair may map to zero or many output pairs.

  The Hadoop Map-Reduce framework spawns one map task for each InputSplit generated by the InputFormat for the job. Mapper implementations can access the Configuration for the job via the JobContext.getConfiguration().

  The framework first calls setup(org.apache.hadoop.mapreduce.Mapper.Context), followed by map(Object, Object, Context) for each key/value pair in the InputSplit. Finally cleanup(Context) is called.

  All intermediate values associated with a given output key are subsequently grouped by the framework, and passed to a Reducer to determine the final output. Users can control the sorting and grouping by specifying two key RawComparator classes.

  The Mapper outputs are partitioned per Reducer. Users can control which keys (and hence records) go to which Reducer by implementing a custom Partitioner.

  Users can optionally specify a combiner, via Job.setCombinerClass(Class), to perform local aggregation of the intermediate outputs, which helps to cut down the amount of data transferred from the Mapper to the Reducer.

  Applications can specify if and how the intermediate outputs are to be compressed and which CompressionCodecs are to be used via the Configuration.

If the job has zero reduces then the output of the Mapper is directly written to the OutputFormat without sorting by keys.

  • Mapper类的结构:

  

  • 方法如下:

第一类:protected类型,用户根据实际需要进行覆写。

1) setup:每个任务执行前调用一次。

2) map:每个Key/Value对调用一次。

3) clearup:每个任务执行结束前调用一次。

第二类,运行的方法

run()方法,是Mapper类的入口,方法内部调用了setup()、map()、clearup()三个方法。

时间: 2024-10-13 01:08:38

024_MapReduce中的基类Mapper和基类Reducer的相关文章

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法

现在也算是刚刚基本完成了自己的第一个商业项目,在开发的过程中,参考了不少人的代码风格,然而随着工作经验的积累,终于开始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. 首先,在现在的项目中使用的主要是afinal框架,而且这个框架确实比较不错,省去了不少工作量,在编写Activity的过程中,基本都是直接继承自FinalActivity类,这样可以使用这个类给我们封装好的不少的方法,但是随着项目慢慢推进,这种直接继承框架类的一些缺点也开始慢慢的显现出来.最主要的就

基类成员在派生类中的访问属性——总结

首先回顾一下三种成员访问限定符: public(公用的):既可以被本类中的成员函数所引用,也可以被类的作用域内的其他函数(即类外)引用. private(私有的):只能被本类中的成员函数引用,类外不能调用(友元类除外) protected(受保护的):不能被类外访问,但可以在派生类的成员函数访问. 接下来就用一张表总结一下基类成员在派生类中的访问属性: 参考资料:<C++程序设计(第二版)>--谭浩强

C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题

#include "stdafx.h" #include <iostream> #include <algorithm> using namespace std; class Base { public: int num; virtual void func() { cout<<"Do something in Base"<<endl; } }; class Derived:private Base { public:

修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类

折腾几天记载一下,由于项目实际需要,从edmx生成的实体类能自动继承自定义的基类,这个基类不是从edmx文件中添加的Entityobject. 利用ADO.NET C# POCO Entity Generator With WCF Support生成的tt文件(比如model.tt)中找到 partial class partial class 修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类

派生类地址比基类地址少4(子类与基类指针强行转换的时候,值居然会发生变化,不知道Delphi BCB是不是也这样) good

大家对虚表并不陌生,都知道每个含有虚函数的类对象都有1个虚指针,但是在现实使用中,却总是因为这而调试半天,才发现原来是虚指针惹的祸.我这几天在调试代码时候也中招了,我的问题是这样的,如下图,CTree是最底层基类(非虚类), CSamplerTree(虚类)派生自CTree,CMSamplerTree,CASamplerTree派生自CSamplerTree,                                                         CTree中包括两个成员

派生类(多级)到基类转换的可访问性

<C++primer>第四版 15.3.1节提到基类到派生类转换(无论ref/poniter or not)的可行性,有些拗口,根据英文版翻译,得到以下几个要点: 1.如果是 public 继承,则用户代码和后代类都可以使用派生类到基类的转换. 2.如果类是使用 private 或 protected继承派生的,则用户代码(即派生类对象)不能将派生类型对象转换为基类对象. 3.如果是 private 继承,则从 private 继承类派生的孙类不能转换为基类. 4.如果是 protected 

第十一周 项目3 - 点类派生直线类】定义点类Point,并以点类为基类,继承关系

项目3 - 点类派生直线类]定义点类Point,并以点类为基类,派生出直线类Line,从基类中继承的点的信息表示直线的中点.请阅读下面的代码,并将缺少的部分写出来. [cpp] view plaincopyprint? #include<iostream> #include<Cmath> using namespace std; class Point //定义坐标点类 { public: Point():x(0),y(0) {}; Point(double x0, double 

基类指针和派生类指针的使用总结

1 基类指针指向基类对象(正常使用) 2 派生类指针指向派生类对象(正常使用,不管是不是虚函数,调用的都是派生类的函数) 3 基类指针指向派生类对象(多态的体现,虚函数的话调用的是派生类的,非虚函数的话调用的是基类的) 4 派生类指针指向基类对象(一般不要这么用) 参考资料: http://blog.csdn.net/monkeyduck/article/details/15506435 [c++]实例演示类继承中派生类到基类的转换及虚函数 基类指针和派生类指针的使用总结