MapReduce Shuffle And Sort
引言

如果溢写文件个数超过3(通过属性min.num.spills.for.combine设置),会对合并且分区排序后的结果执行Combine过程(如果MapReduce有设置Combiner),而且combine过程在不影响最终结果的前提下可能会被执行多次;否则不会执行Combine过程(相对而言,Combine开销过大)。
@Override
public void write(K key, V value) throws IOException,
InterruptedException {
collector.collect(key, value,
partitioner.getPartition(key, value, partitions));
}
public int compare(int i, int j) {
     final int ii = kvoffsets[i % kvoffsets.length];
     final int ij = kvoffsets[j % kvoffsets.length];
     // sort by partition
     if (kvindices[ii + PARTITION] != kvindices[ij + PARTITION]) {
          return kvindices[ii + PARTITION] - kvindices[ij + PARTITION];
     }
     // sort by key
     return comparator.compare(kvbuffer, kvindices[ii + KEYSTART],
               kvindices[ii + VALSTART] - kvindices[ii + KEYSTART],
       kvbuffer, kvindices[ij + KEYSTART],
       kvindices[ij + VALSTART] - kvindices[ij + KEYSTART]);
}
public RawComparator getOutputKeyComparator() {
     Class<? extends RawComparator> theClass = getClass(
          "mapred.output.key.comparator.class", null, RawComparator.class);
     if (theClass != null) {
          return ReflectionUtils.newInstance(theClass, this);
     }
     return WritableComparator.get(getMapOutputKeyClass().asSubclass(
WritableComparable.class));
}
public interface RawComparator<T> extends Comparator<T> {
     public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2);
}
public class WritableComparator implements RawComparator {
     private static HashMap<Class, WritableComparator> comparators = new HashMap<Class, WritableComparator>();
     public static synchronized WritableComparator get(
Class<? extends WritableComparable> c) {
          WritableComparator comparator = comparators.get(c);
          if (comparator == null) {
               comparator = new WritableComparator(c, true);
          }
          return comparator;
     }
     public static synchronized void define(Class c,
WritableComparator comparator) {
          comparators.put(c, comparator);
     }
     public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
          try {
               // parse key1
       buffer.reset(b1, s1, l1);
       key1.readFields(buffer);
       // parse key2
       buffer.reset(b2, s2, l2);
       key2.readFields(buffer);
          } catch (IOException e) {
               throw new RuntimeException(e);
          }
          // compare them
          return compare(key1, key2);
     }
     public int compare(WritableComparable a, WritableComparable b) {
          return a.compareTo(b);
     }
     public int compare(Object a, Object b) {
          return compare((WritableComparable) a, (WritableComparable) b);
     }
}
public abstract class Partitioner<KEY, VALUE> {
     public abstract int getPartition(KEY key, VALUE value, int numPartitions);
}
protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context)
throws IOException, InterruptedException {
......
}
MapReduce Shuffle And Sort的更多相关文章
- mapreduce shuffle 和sort 详解
		MapReduce 框架的核心步骤主要分两部分:Map 和Reduce.当你向MapReduce 框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map 任务,然后分配到不同的节点上去执 ... 
- Hadoop-2.2.0中文文档—— MapReduce下一代- 可插入的 Shuffle 和 Sort
		简单介绍 可插入的 shuffle 和 sort 功能,同意在shuffle 和 sort 逻辑中用可选择的实现类替换.这个情况的样例是:用一个不是HTTP的应用协议,如RDMA来 shuffle 从 ... 
- MapReduce中的Shuffle和Sort分析
		MapReduce 是现今一个非常流行的分布式计算框架,它被设计用于并行计算海量数据.第一个提出该技术框架的是Google 公司,而Google 的灵感则来自于函数式编程语言,如LISP,Scheme ... 
- 【Hadoop】MapReduce笔记(三):MapReduce的Shuffle和Sort阶段详解
		一.MapReduce 总体架构 整体的Shuffle过程包含以下几个部分:Map端Shuffle.Sort阶段.Reduce端Shuffle.即是说:Shuffle 过程横跨 map 和 reduc ... 
- Hadoop : MapReduce中的Shuffle和Sort分析
		地址 MapReduce 是现今一个非常流行的分布式计算框架,它被设计用于并行计算海量数据.第一个提出该技术框架的是Google 公司,而Google 的灵感则来自于函数式编程语言,如LISP,Sch ... 
- MapReduce Shuffle过程
		MapReduce Shuffle 过程详解 一.MapReduce Shuffle过程 1. Map Shuffle过程 2. Reduce Shuffle过程 二.Map Shuffle过程 1. ... 
- MapReduce Shuffle原理 与 Spark Shuffle原理
		MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一 ... 
- 【hadoop代码笔记】Mapreduce shuffle过程之Map输出过程
		一.概要描述 shuffle是MapReduce的一个核心过程,因此没有在前面的MapReduce作业提交的过程中描述,而是单独拿出来比较详细的描述. 根据官方的流程图示如下: 本篇文章中只是想尝试从 ... 
- shuffle和sort分析
		MapReduce中的Shuffle和Sort分析 MapReduce 是现今一个非常流行的分布式计算框架,它被设计用于并行计算海量数据.第一个提出该技术框架的是Google 公司,而Google 的 ... 
随机推荐
- iOS开发系列之远程控制事件
			在今天的文章中还剩下最后一类事件:远程控制,远程控制事件这里主要说的就是耳机线控操作.在前面的事件列表中,大家可以看到在iOS中和远程控制事件有关的只有一个- (void)remoteControlR ... 
- 码表 ASCII Unicode GBK UTF-8
			2017-1-3 [ASCII]一个字节(7位,128个字符,2个16进制) 不包含中文 ASCII(American Standard Code for Information Interchang ... 
- 【开源java游戏框架libgdx专题】-03-项目开发与调试
			创建libgdx项目 下载项目配置工具 gdx-setup.jar 生成项目 导入Eclipse File -> Import -> Gradle -> Gradle Project ... 
- DedeCms autoindex和itemindex使用介绍
			autoindex/itemindex 可以使用 @me+1;实现由指定数字开始,下面为大家详细介绍下具体的两者具体的用法,感兴趣的朋友可以参考下 代码如下: <span style=" ... 
- XML参数转换为Object,并转换为List或DataTable
			demo效果: 
- 下载文档时Safari浏览器下载后出现".html"问题
			下载代码是需要设置 Response.ContentType = "application/octet-stream", 不要设为application/x-msdownload, ... 
- HTML5 文件域+FileReader 读取文件(一)
			在HTML5以前,HTML的文件上传域的功能具有很大的局限性,这种局限性主要体现在如下两点: 每次只能选择一个文件进行上传 客户端代码只能获取被上传文件的文件路径,无法访问实际的文件内容 一.File ... 
- Android开发手记(21) 遍历文件夹
			我们在遍历文件夹的时候由于涉及到SD卡相关操作,所以我们需要添加如下权限: <uses-permission android:name="android.permission.WRIT ... 
- iOS开发,新手入门指导
			在做了近两年wp,安卓开发之后,某一天突然决定投身iOS的开发之中. 因为一直用的mac,做wp开发的时候都用双系统,vs开久了,就会比较烫,这点让人不爽.后来更多地做安卓,直接mac下开发,很舒适的 ... 
- NetBeans无法使用编码GBK安全地打开该文件 解决方法
			正常安装的NetBeans在打开UTF-8编码的文件时,会提示“NetBeans无法使用编码GBK安全地打开该文件”,点击“是”强制打开后,中文会变成乱码. 上述问题可以通过如下方式解决: 用文本编辑 ... 
