MapReduce Types

  MapReduce是一个简单的数据处理模型,map与reduce的输入和输出类型都为key-value形式的键值对。

map: (K1, V1) → list(K2, V2)
reduce: (K2, list(V2)) → list(K3, V3)

  一般来讲,map的输入key与输出value类型(K1,V1)不同于map的输出类型(K2,V2).reduce的输入类型比如与map的输出类型保持一致,reduce的输出类型可能会有不同的形式(K3,V3)。下面是JAVA API:

public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
public class Context extends MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
// ...
}
protected void map(KEYIN key, VALUEIN value,
Context context) throws IOException, InterruptedException {
// ...
}
} public class Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
public class Context extends ReducerContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
// ...
}
protected void reduce(KEYIN key, Iterable<VALUEIN> values,
Context context) throws IOException, InterruptedException {
// ...
}
}

  最终由context调用write()方法将key-value pairs输出

public void write(KEYOUT key, VALUEOUT value)
throws IOException, InterruptedException

  Mapper与Reducer是两个不同的classes,分别具有不同的入参类型,Mapper的入参类型可能与Reducer的入参类型不同,比如Mapper的key的入参为LongWritable,reduce的为Text.

  这里有一点,如果在map阶段调用了combine方法,那么就与reduce的入参相同

map: (K1, V1) → list(K2, V2)
combine: (K2, list(V2)) → list(K2, V2)
reduce: (K2, list(V2)) → list(K3, V3)

  使用parition方法对中间结果的key与value进行操作时,将会返回parition的位置(index),parition将决定于排过序的key

public interface Partitioner<K2, V2> extends JobConfigurable {
int getPartition(K2 key, V2 value, int numPartitions);
}

  默认的分区类型为HashPartitioner,由它决定着key属于哪个分区,每一个分区都属于一个reduce task,所以分区的个数决定了reduce tasks的个数

public class HashPartitioner<K, V> extends Partitioner<K, V> {


public int getPartition(K key, V value,
int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}

  当你需要多个reduce tasks作业任务时,HashPartitioner就举足轻重了,因为map的结果将会传递给多个reduce,那么相同的key将会被分发到不同reduce task,大大提升了作业效率。那么reduce个数的决定了整个作业的并行度,有人会问,那map的个数呢,map的个数是由文件的block数目决定的,具体下面再说~

  那么reducer个数的把握将会是一门艺术- -增加reducer的个数相当于增加了并行度。

较小的文件与CombineFileInputFormat

  Hadoop的作业适用于较大的文件,原因在于FileInputFormat是split整个文件还是split单个文件,如果文件太小(这里指的是小于HDFS的block块大小)并且拥有很多这样的文件,那么就会增加打开文件的性能开销。同时,大量的小文件也会增加namenode的元数据的存储开销。

参考文献:《Hadoop:The Definitive Guide, 4th Edition》

MapReduce格式与类型的更多相关文章

  1. Java日期的格式String类型GMT,GST换算成日期Date种类

    请尊重他人的劳动成果.转载请注明出处:Java日期格式化之将String类型的GMT,GST日期转换成Date类型 http://blog.csdn.net/fengyuzhengfan/articl ...

  2. erlang处理mongodb日期时间格式data类型(原)

    在项目中,mongo中要创建日期类型,根据这个日期类型进而对mongo设置过期时间expire,加上对应的index索引自动删除. 而mongo中的日期类型,使用ISO格式,例如:ISODate(&q ...

  3. MarkDown 格式生产类型

    -- 不默认换行, 真的结束, 包括格式设定,记得空一行. -- 学习参考地址如下, 讲的不好, 太复杂, 不适合新手. 有好读的更好. ** 但是江湖规矩 还是引用下吧 这是地址(http://wo ...

  4. html input file accept 上传文件类型限制格式 MIME 类型列表

    例: <input type="file" accept="application/vnd.openxmlformats-officedocument.spread ...

  5. Json格式String类型字符串转为Map工具类

    package agriculture_implement.util; import com.google.gson.Gson; import com.google.gson.JsonSyntaxEx ...

  6. Oracle- 日期格式和数字类型处理

    更新数据库时间格式的显示格式的语句:(alter session set nls_date_format='YYYY-MM-dd'); to_date("要转换的字符串",&quo ...

  7. jquery请求格式和返回类型 汇总

    常规请求基本格式 1 [WebMethod] 2 public string SayHello(string name) 3 { 4 return "Hello " + name; ...

  8. 关于Mapreduce Text类型赋值的错误

    Mapreduce中Text类型数据被无缘无故替换? ​ 今天偶然看到一个mapreduce demo,直接上手操作 统计两个文件中 最大值 文件中数据格式为 名字 数值 输出为 名字(最大值所对应的 ...

  9. Hadoop(十七)之MapReduce作业配置与Mapper和Reducer类

    前言 前面一篇博文写的是Combiner优化MapReduce执行,也就是使用Combiner在map端执行减少reduce端的计算量. 一.作业的默认配置 MapReduce程序的默认配置 1)概述 ...

随机推荐

  1. iOS开发UI篇—直接使用UITableView Controller

    iOS开发UI篇—直接使用UITableView Controller 一.一般过程 // // YYViewController.h // UITableView Controller // // ...

  2. POJ 2446 最小点覆盖

    Chessboard Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14787   Accepted: 4607 Descr ...

  3. My Game --简介

    曾经 我们雄心壮志,曾经 我们慷慨激昂,曾经 我们豪情满天涯. 曾经我们一起策划玩法,寻找背景题材,编写代码,幻想没有的更新.此刻由最后的孤狼把仅有成果分享给大伙. 所谓的玩法,背景,每个游戏都与众不 ...

  4. sC#进阶系列——WebApi 接口参数不再困惑:传参详解

    原文:http://www.cnblogs.com/landeanfen/p/5337072.html 一.get请求 对于取数据,我们使用最多的应该就是get请求了吧.下面通过几个示例看看我们的ge ...

  5. Windows 7中无法访问FTP的解决方法

    解决: netsh advfirewall set global StatefulFTP disable

  6. JBoss集群中启用HTTPS协议

    Generate server certificate Note: If you already have certificate created then this section can be i ...

  7. 二叉搜索树 C++代码实现

    暂未发现什么bug,如果发现请指出. #include<iostream> using namespace std; //定义二叉搜索树的结点 struct Node { int data ...

  8. iOS 动画 旋转 移动简单代码

    #import "ViewController.h" @interface ViewController () { UIImageView *imgView; BOOL flag; ...

  9. BZOJ 4034 BIT & Dfs序

    调了恒久突然发现输出优化忘记带负号了.. 就是差分树状数组维护Dfs序即可. #include <iostream> #include <cstring> #include & ...

  10. ssh连接linux服务器只显示-bash-4.1#不显示路径解决方法

    ssh连接linux服务器只显示-bash-4.1#不显示路径时,我们只需要修改  ~/.bash_profile文件,如果不存在这个文件,那么新建一个,增加内容  export PS1='[\u@\ ...