Hadoop除了可以让开发人员自行编写map函数和reduce函数,还提供一些常用函数(mapper、reducer和partitioner)的类库,这些类位于 org.apache.hadoop.mapred.lib 包内,在1.2.1版,该包包含一个接口和若干类。在org.apache.hadoop.mapreduce.lib 包内也存在相关类库,且有部分重复。mapred包内部是旧API,mapreduce包是重构之后的新API,但两者都可以使用。

接口如下:

InputSampler.Sampler<K,V> Interface to sample using an InputFormat.

类如下:

BinaryPartitioner<V> Partition BinaryComparable keys using a configurable part of the bytes array returned by BinaryComparable.getBytes().
ChainMapper The ChainMapper class allows to use multiple Mapper classes within a single Map task.
ChainReducer The ChainReducer class allows to chain multiple Mapper classes after a Reducer within the Reducer task.
CombineFileInputFormat<K,V> An abstract InputFormat that returns CombineFileSplit's in InputFormat.getSplits(JobConf, int) method.
CombineFileRecordReader<K,V> A generic RecordReader that can hand out different recordReaders for each chunk in a CombineFileSplit.
CombineFileSplit A sub-collection of input files.
DelegatingInputFormat<K,V> An InputFormat that delegates behaviour of paths to multiple other InputFormats.
DelegatingMapper<K1,V1,K2,V2> An Mapper that delegates behaviour of paths to multiple other mappers.
FieldSelectionMapReduce<K,V> This class implements a mapper/reducer class that can be used to perform field selections in a manner similar to unix cut.
HashPartitioner<K2,V2> Partition keys by their Object.hashCode().
IdentityMapper<K,V> Implements the identity function, mapping inputs directly to outputs.
IdentityReducer<K,V> Performs no reduction, writing all input values directly to the output.
InputSampler<K,V> Utility for collecting samples and writing a partition file for TotalOrderPartitioner.
InputSampler.IntervalSampler<K,V> Sample from s splits at regular intervals.
InputSampler.RandomSampler<K,V> Sample from random points in the input.
InputSampler.SplitSampler<K,V> Samples the first n records from s splits.
InverseMapper<K,V> Mapper that swaps keys and values.
KeyFieldBasedComparator<K,V> This comparator implementation provides a subset of the features provided by the Unix/GNU Sort.
KeyFieldBasedPartitioner<K2,V2> Defines a way to partition keys based on certain key fields (also see KeyFieldBasedComparator.
LongSumReducer<K> Reducer that sums long values.
MultipleInputs This class supports MapReduce jobs that have multiple input paths with a different InputFormat and Mapper for each path
MultipleOutputFormat<K,V> This abstract class extends the FileOutputFormat, allowing to write the output data to different output files.
MultipleOutputs The MultipleOutputs class simplifies writting to additional outputs other than the job default output via the OutputCollectorpassed to the map() and reduce() methods of the Mapper and Reducer implementations.
MultipleSequenceFileOutputFormat<K,V> This class extends the MultipleOutputFormat, allowing to write the output data to different output files in sequence file output format.
MultipleTextOutputFormat<K,V> This class extends the MultipleOutputFormat, allowing to write the output data to different output files in Text output format.
MultithreadedMapRunner<K1,V1,K2,V2> Multithreaded implementation for @link org.apache.hadoop.mapred.MapRunnable.
NLineInputFormat NLineInputFormat which splits N lines of input as one split.
NullOutputFormat<K,V> Consume all outputs and put them in /dev/null.
RegexMapper<K> Mapper that extracts text matching a regular expression.
TokenCountMapper<K> Mapper that maps text values into <token,freq>pairs.
TotalOrderPartitioner<K extends WritableComparable,V> Partitioner effecting a total order by reading split points from an externally generated source.

目前,用到的有一下几个类,后续将对其他类及接口进行研究。

1)ChainMapper类和ChainReducer类:可以在一个mapper中运行多个mapper,再运行reducer,之后还可以再运行多个mapper。这两个类组合使用,用于需要执行多个mapreduce过程的情况。这个方案可以明显降低磁盘的I/O开销。

2)TokenCounterMapper类:将输入值分解成独立的单词(使用Java的StringTokenizer)、输出各单词及其计数器(值为1)

3)InverseMapper类:一个能交换键和值的mapper

参考资料:

1. hadoop API 文档

2. Hadoop 权威指南

MapReduce库类的更多相关文章

  1. 代码的坏味道(22)——不完美的库类(Incomplete Library Class)

    坏味道--不完美的库类(Incomplete Library Class) 特征 当一个类库已经不能满足实际需要时,你就不得不改变这个库(如果这个库是只读的,那就没辙了). 问题原因 许多编程技术都建 ...

  2. .Net Core库类项目跨项目读取配置文件

    在项目开始之前我们可以先去了解一下IConfiguration接口,.Net Core Web应用程序类似于一个控制台,当程序运行到Startup时会自动注入IConfiguration,默认读取当前 ...

  3. python安装pip和使用pip安装Python库类比如pip安装beautifulsoup4

    初学Python时,看到很多不懂得东西,比如 pip, 是python 包管理工具,pip是easy_install的取代. Distribute是对标准库disutils模块的增强,我们知道disu ...

  4. C++ | boost库 类的序列化

    是的,这是今年的情人节,一篇还在研究怎么用的文章,文结的时候应该就用成功了. 恩,要有信心 神奇的分割线 不知何时装过boost库的header-only库, 所以ratslam中的boost是可以编 ...

  5. MapReduce自定义类输出的内容为内存地址

    13480253104 mapreduce.KpiWritable@486a58c4 13502468823 mapreduce.KpiWritable@3de9d100 13560439658 ma ...

  6. C++标准库类模板(stack)和 队列(queue)

    在C++标准库(STL)中有栈和队列的类模板,因此可以直接使用 1.栈(stack):使用栈之前,要先包含头文件 : #include<stack> stack.push(elem); / ...

  7. C++标准库类模板vector

    vector是C++标准库STL中的一个重要的类模板,相当于一个更加健壮的,有很多附加能力的数组 使用vector前首先要包含头文件 #include<vector>  1.vector的 ...

  8. 非常实用全面的 C++框架,库类等资源

    这次的资源涉及到了标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等,C++程序员学习必备! Jason frozen : C/C++的Jason解析生成器 Jansson ...

  9. android的引用库类

    在eclipse中的项目里,有时需要外来的jar文件.添加后就可以消去程序中的红条条啦~~~~~~~~~可以照下面的说明添加. 方法/步骤   打开eclipse,导入项目   右击 项目 , “Bu ...

随机推荐

  1. 自定义JSP中的Taglib标签之四自定义标签中的Function函数

    转自http://www.cnblogs.com/edwardlauxh/archive/2010/05/19/1918589.html 之前例子已经写好了,由于时间关系一直没有发布,这次带来的是关于 ...

  2. Kafka consumer处理大消息数据问题

    案例分析 处理kafka consumer的程序的时候,发现如下错误: ERROR [2016-07-22 07:16:02,466] com.flow.kafka.consumer.main.Kaf ...

  3. ORACLE查询语句

    --建表FAMILYINF CREATE  TABLE  FAMILYINFO(      FNO NUMBER CONSTRAINT FC001 PRIMARY KEY,--把字段fno约束为主键 ...

  4. iOS开发-OC语言 (一)oc数据类型

    分享一套以前学习iOS开发时学习整理的资料,后面整套持续更新: oc数据类型 数据类型:基本数据类型.指针数据类型 基本数据类型:数值型.字符型(char).布尔型.空类型(void) 指针数据类型: ...

  5. 菜鸟互啄:WINFORM如何实现无聚焦框的Button按钮

    当我们将一个button按钮设置如下属性时,总有一个聚焦框来困扰着我们 button1.FlatStyle = FlatStyle.Flat; 我们想要的效果是这样的: 但当使用了Tab切换焦点时 发 ...

  6. (二)Harbor WEB的使用

    接上一篇<安装Harbor>,安装好之后,接下来我们就进行Harbor  web界面的操作吧! 转载请标明出处:http://www.cnblogs.com/huangjc/p/62704 ...

  7. C# SessionHelper

    using System.Web; using System.Web.SessionState; namespace Utils { /// <summary> /// Session帮助 ...

  8. yarn的调度器

    三种调度器 1.FIFO Scheduler 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,等最前面的应用需求满足后再给下一个分配,以 ...

  9. 修改release management client对应的服务器的地址

    参考资料:http://stackoverflow.com/questions/25313053/how-to-change-a-release-management-server-name-in-r ...

  10. Linux下制作静(动)态库

    关键命令: 动态库制作命令 gcc xxx.c -fPIC -shared -o libxxx.so 静态库制作命令 gcc -c xxx.c ar crv libxxx.a xxx.o 例: //h ...