1.combiner

combiner是MR编程模型中的一个组件;

有些任务中map可能会产生大量的本地输出,combiner的作用就是在map端对输出先做一次合并,以减少map和reduce节点之间的数据传输量,提高网络IO性能,是MR的优化手段之一;

两大基本功能:

1.1map的输出的key的聚合,对map输出的key排序、value进行迭代;

1.2reduce功能。

并不是设置了combiner就一定会执行(在当前集群非常繁忙的时候设置了也不会执行);

combiner的执行时机:combiner的执行可能会在map的merge之前也可能在之后,这个参数由配置选项min.num.spill.for.combine(默认为3) 决定的,当map端产生的spill文件最少有这么3个时,combiner会在merge操作之前执行,否则之后。

一般情况下可以使用自己写的reduce类作为combiner,但是特殊情况下也可以自定义

 public static class combiner extends Reducer<Text,Text,Text,Text>{
private Text info = new Text(); //为了拆分 key值 准备存储新的value值
public void reduce(Text key,Iterable<Text>values,Context context) throws IOException, InterruptedException{
int sum = 0;
for(Text val:values){
sum += Integer.parseInt(val.toString());
}
int splitIndex = key.toString().indexOf(":");
info.set(key.toString().substring(splitIndex+1)+":"+sum); //新的value值
key.set(key.toString().substring(0, splitIndex));
context.write(key, info);
}
}
job.setCombinerClass(combiner.class);

2.partitioner

combiner可以减少map的输出到reducer所在节点的网络IO,但是map的输出被分配到哪个reducer上,是由partitioner决定的;

partitioner只有一个方法:

getPartition(Text key, Text value, int numPartitions)  

输入的是map的结果对<key,value>和reducer的数目,返回的则是分配的reducer的编号(整数)。系统缺省的partitioner是HashPartitioner,它以key的Hash值对reducer的数目取模,得到对应的reducer。这样可以保证如果有相同的key值则肯定会被分配到同一个reducer上;
和combiner一样,一般使用默认的,但是特殊情况也可以自定义

 public class NewPartition extends HashPartitioner<Text,Text>{
String keyinfo;
public int getPartition(Text key,Text value,int numReducerTasks){
keyinfo = key.toString().split(":")[0];
return super.getPartition(new Text(keyinfo), value, numReducerTasks);
}
}
job.setPartitionClass(NewPartition.class);

MR中的combiner和partitioner的更多相关文章

  1. MapReduce学习总结之Combiner、Partitioner、Jobhistory

    一.Combiner 在MapReduce编程模型中,在Mapper和Reducer之间有一个非常重要的组件,主要用于解决MR性能瓶颈问题 combiner其实属于优化方案,由于带宽限制,应该尽量ma ...

  2. [MapReduce_5] MapReduce 中的 Combiner 组件应用

    0. 说明 Combiner 介绍 &&  在 MapReduce 中的应用 1. 介绍 Combiner: Map 端的 Reduce,有自己的使用场景 在相同 Key 过多的情况下 ...

  3. 总结的MR中连接操作

    1 reduce side join在map端加上标记, 在reduce容器保存,然后作笛卡尔积缺点: 有可能oom 2 map side join  2.1 利用内存和分布式缓存,也有oom风险 2 ...

  4. mapreduce项目中加入combiner

    combiner相当于是一个本地的reduce,它的存在是为了减少网络的负担,在本地先进行一次计算再叫计算结果提交给reduce进行二次处理. 现在的流程为: 对于combiner我们有这些理解: M ...

  5. MR中使用sequnceFIle输入文件

    转换原始数据为块压缩的SequenceFIle import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.C ...

  6. 【Hadoop】Hadoop MR 性能优化 Combiner机制

    1.概念 2.参考资料 提高hadoop的mapreduce job效率笔记之二(尽量的用Combiner) :http://sishuo(k).com/forum/blogPost/list/582 ...

  7. MR中简单实现自定义的输入输出格式

    import java.io.DataOutput; import java.io.IOException; import java.util.HashMap; import java.util.Ma ...

  8. 大数据入门第八天——MapReduce详解(三)MR的shuffer、combiner与Yarn集群分析

    /mr的combiner /mr的排序 /mr的shuffle /mr与yarn /mr运行模式 /mr实现join /mr全局图 /mr的压缩 今日提纲 一.流量汇总排序的实现 1.需求 对日志数据 ...

  9. RDD(弹性分布式数据集)及常用算子

    RDD(弹性分布式数据集)及常用算子 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据 处理模型.代码中是一个抽象类,它代表一个 ...

随机推荐

  1. ASP.NET 管道事件与HttpModule, HttpHandler简单理解 -摘自网络

    第一部分:转载自Artech  IIS与ASP.NET管道 ASP.NET管道 以IIS 6.0为例,在工作进程w3wp.exe中,利用Aspnet_ispai.dll加载.NET运行时(如果.NET ...

  2. 一个介绍webrtc的国外网址

    http://www.html5rocks.com/en/tutorials/webrtc/basics/

  3. 第一百九十六天 how can I 坚持

    老妈邮的咸菜到了,美味啊,买不到,哈哈. 以后要勤给鱼换水啊,10天不换,水都臭了,拒绝懒惰. 明天要回济南了,刘松结婚,估计又没法发博客了. 两条鱼,一条罗娜,一条我,哈哈. 睡觉.

  4. HDU 5862 Counting Intersections (树状数组)

    Counting Intersections 题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 Description Given ...

  5. No package identifier when getting name for resource number 0x00000000

    貌似在新版本的SDK下有时会出现标题的这个warning~  如下: 思前想后也不知道这个到底是说的哪里的问题,在逛谷歌的时候无意中发现有人说是因为xml中color的参数直接写成: android: ...

  6. POJ2947Widget Factory(高斯消元解同模方程)

    http://poj.org/problem?id=2947 题目大意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下:p start enda1,a2......ap (1<=ai&l ...

  7. POJ1201Intervals(差分约束系统)

    昨天看了下差分约数系统的含义,其实就是如果有n个变量在m个形如aj-ai>=bk条件下,求解的此不等式的方法. 而这种不等式的解法其实就是转化为图论的最小路的算法求解的.我们将上面的不等式边形后 ...

  8. linxu php连接sqlserver

    今天linux的yum也不能用,用的是第三方的yum源,yum安装好后更新header又花了很长时间. 记得安装指定安装目录要用 --with-php-config=PATH命令. CentOS 6安 ...

  9. 使用#pragma阻止一些warnings

    这篇博客的内容都是记的网上的.是流水账.只是记录下来以便日后之有,避免每次重新google. #pragma除了可以用来把不同功能的代码进行分隔组织外还可以用来disable一些warnings.这在 ...

  10. PL/pgSQL学习笔记之八

    http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 另外一种声明 PL/pgSQL 函数的方法是使用 returns ...