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. Citrix 服务器虚拟化之一 网络部署Xenserver 6.2

    Citrix 服务器虚拟化之一  网络部署Xenserver 6.2 思杰的XenServer®是完整的服务器虚拟化平台. XenServer软件包中包含所有你需要创建和管理部署的虚拟x86计算机上运 ...

  2. 数据库中的null问题

    在数据库中有些列的值可以为null,这一篇,我们围绕数据库中的null来讲述. 1. null与 “”.0的区别   数据库中的null表示——不知道,“”——一个空字符串,0则是一个数值.  所以n ...

  3. 聊聊数据库(MySql)连接吧,你真的清楚吗?

    前言 说到数据库连接,这个大家都很熟悉了.但是熟悉一般来自于下面三种情况 * 刚开始学编程的时候,老师就说用完的数据库连接一定要关闭,不然会有严重的后果. * 编程一段时间后,大家都说要用连接池来优化 ...

  4. Xcode8出现AQDefaultDevice (173): skipping input stream 0 0 0x0

    一直不想升级Xcode,但是没办法项目进度只能升级Xcode8,果然不出所料出现了不少bug, Xcode7运行一直没有问题,但是在Xcode8上一直输出AQDefaultDevice (173): ...

  5. 供求WAP-VUE 笔记

    记录项目的经历 1. 项目简介 1. 项目采用 vue.js 显示数据的 wap 页面, v-resourse 异步请求, v-router 路由(暂时没用) 2. 采用 flex 布局页面 2. 页 ...

  6. java中常遇到的问题

    一.乱码问题 =========================================================================================== 方 ...

  7. Android版本和API Level的对应关系

    Platform Version API Level VERSION_CODE Notes Android 4.4 KITKAT Platform Highlights Android 4.3 JEL ...

  8. MySQL中的事务

    MySQL中的事务性: MySQL的InnoDB引擎是支持事务性的,事务是由多条SQL语句组成,是一个连续的一组数据库操作.只有该组内的每一个操作都成功时,整个事务才执行成功.(例如银行转账操作,只有 ...

  9. 通过Windows常见性能计数器分析服务器性能瓶颈

    转载 http://www.cnblogs./junzhongxu/archive/2011/02/15/1954889.html 监测对象 Ø System(系统) l %Total Process ...

  10. linux/windows平台生成随机数的不同方法

    linux平台,使用rand.Seed() //rand_linux.go package main import ( "math/rand" "time" ) ...