Hadoop Combiner使用简介
2017-09-06 14:50
288 查看
Combiner函数是一个可选的中间函数,发生在Map阶段,Mapper执行完成后立即执行。使用Combiner有如下两个优势:
Combiner可以用来减少发送到Reducer的数据量,从而提高网络效率。
Combiner可以用于减少发送到Reducer的数据量,这将提高Reduce端的效率,因为每个reduce函数将处理相对较少记录,相比于未使用Combiner之前。
Combiner与Reducer结构相同,因为Combiner和Reducer都对Mapper的输出进行处理。这给了我们一个复用Reducer作为Combiner的好机会。但问题是,复用Reducer作为Combiner总是是一个好主意吗?
特点:
Combiners是MapReduce中的一个优化,允许在shuffle和排序阶段之前在本地进行聚合。Combiners的首要目标是通过最小化键值对的数量来节省尽可能多的带宽
Reducer作为Combiner的适用场景
假设我们正在编写一个MapReduce程序来计算股票数据集中每个股票代码的最大收盘价。Mapper将数据集中每个股票记录的股票代码作为key和收盘价作为value。Reducer然后将循环遍历股票代码对应的所有收盘价,并从收盘价列表中计算最高收盘价。假设Mapper 1 处理 股票代码为ABC 的3个记录,收盘价分别为50,60和111。让我们假设Mapper
2 处理股票代码为ABC的2个记录,收盘价分别为100和31。那么Reducer将收到股票代码ABC五个收盘价---50,60,111,100和31。Reducer的工作非常简单,它将简单地循环遍历所有收盘价,并将计算最高收盘价为111。
我们可以在每个Mapper之后使用相同的Reducer作为Combiner。Mapper 1 上的Combiner将处理3个收盘价格--50,60和111,并且仅输出111,因为它是3个收盘价的最大值。Mapper 2 上的Combiner将处理2个收盘价格--100和31,并且仅输出100,因为它是2个收盘价的最大值。现在使用Combiner之后,Reducer仅处理股票代码ABC的2个收盘价(原先需要处理5个收盘价),即来自Mapper
1 的111和来自Mapper 2 的100,并且将从这两个值中计算出最大收盘价格为111。
正如我们看到的,使用Combiner情况下Reducer输出与没有使用Combiner的输出结果是相同的,因此在这种情况下复用Reducer作为
Combiner是没有问题。
Reducer作为Combiner的不适用场景
假设我们正在编写一个MapReduce程序来计算股票数据集中每个股票代码的平均交易量(average volume for each symbol)。Mapper将数据集中每个股票记录的股票代码作为key和交易量(volume)作为value。Reducer然后将循环遍历股票代码对应的所有交易量,并从交易量列表中计算出平均交易量(average volume from the
list of volumes for that symbol)。假设Mapper 1 处理 股票代码为ABC 的3个记录,收盘价分别为50,60和111。让我们假设Mapper 2 处理股票代码为ABC的2个记录,收盘价分别为100和31。那么Reducer将收到股票代码ABC五个收盘价---50,60,111,100和31。Reducer的工作非常简单,它将简单地循环遍历所有交易量,并将计算出平均交易量为70.4。
让我们看看如果我们在每个Mapper之后复用Reducer作为Combiner会发生什么。Mapper 1
上的Combiner将处理3个交易量--50,60和111,并计算出三个交易量的平均交易量为73.66。
Mapper 2 上的Combiner将处理2个交易量--100和31,并计算出两个交易量的平均交易量为65.5。那么在复用Reducer作为Combiner的情况下,Reducer仅处理股票代码ABC的2个平均交易量,来自Mapper1的73.66 和 来自Mapper2的65.5,并计算股票代码ABC最终的平均交易量为69.58。
这与我们不复用Reducer作为Combiner得出的结果不一样,因此复用Reducer作为Combiner得出平均交易量是不正确的。
所以我们可以看到Reducer不能总是被用于Combiner。所以,当你决定复用Reducer作为Combiner的时候,你需要问自己这样一个问题 - 使用Combiner与不使用Combiner的输出结果是否一样?
Combiner可以用来减少发送到Reducer的数据量,从而提高网络效率。
Combiner可以用于减少发送到Reducer的数据量,这将提高Reduce端的效率,因为每个reduce函数将处理相对较少记录,相比于未使用Combiner之前。
Combiner与Reducer结构相同,因为Combiner和Reducer都对Mapper的输出进行处理。这给了我们一个复用Reducer作为Combiner的好机会。但问题是,复用Reducer作为Combiner总是是一个好主意吗?
特点:
Combiners是MapReduce中的一个优化,允许在shuffle和排序阶段之前在本地进行聚合。Combiners的首要目标是通过最小化键值对的数量来节省尽可能多的带宽
Reducer作为Combiner的适用场景
假设我们正在编写一个MapReduce程序来计算股票数据集中每个股票代码的最大收盘价。Mapper将数据集中每个股票记录的股票代码作为key和收盘价作为value。Reducer然后将循环遍历股票代码对应的所有收盘价,并从收盘价列表中计算最高收盘价。假设Mapper 1 处理 股票代码为ABC 的3个记录,收盘价分别为50,60和111。让我们假设Mapper
2 处理股票代码为ABC的2个记录,收盘价分别为100和31。那么Reducer将收到股票代码ABC五个收盘价---50,60,111,100和31。Reducer的工作非常简单,它将简单地循环遍历所有收盘价,并将计算最高收盘价为111。
我们可以在每个Mapper之后使用相同的Reducer作为Combiner。Mapper 1 上的Combiner将处理3个收盘价格--50,60和111,并且仅输出111,因为它是3个收盘价的最大值。Mapper 2 上的Combiner将处理2个收盘价格--100和31,并且仅输出100,因为它是2个收盘价的最大值。现在使用Combiner之后,Reducer仅处理股票代码ABC的2个收盘价(原先需要处理5个收盘价),即来自Mapper
1 的111和来自Mapper 2 的100,并且将从这两个值中计算出最大收盘价格为111。
正如我们看到的,使用Combiner情况下Reducer输出与没有使用Combiner的输出结果是相同的,因此在这种情况下复用Reducer作为
Combiner是没有问题。
Reducer作为Combiner的不适用场景
假设我们正在编写一个MapReduce程序来计算股票数据集中每个股票代码的平均交易量(average volume for each symbol)。Mapper将数据集中每个股票记录的股票代码作为key和交易量(volume)作为value。Reducer然后将循环遍历股票代码对应的所有交易量,并从交易量列表中计算出平均交易量(average volume from the
list of volumes for that symbol)。假设Mapper 1 处理 股票代码为ABC 的3个记录,收盘价分别为50,60和111。让我们假设Mapper 2 处理股票代码为ABC的2个记录,收盘价分别为100和31。那么Reducer将收到股票代码ABC五个收盘价---50,60,111,100和31。Reducer的工作非常简单,它将简单地循环遍历所有交易量,并将计算出平均交易量为70.4。
50 + 60 + 111 + 100 + 31 / 5 = 352 / 5 = 70.4
让我们看看如果我们在每个Mapper之后复用Reducer作为Combiner会发生什么。Mapper 1
上的Combiner将处理3个交易量--50,60和111,并计算出三个交易量的平均交易量为73.66。
Mapper 2 上的Combiner将处理2个交易量--100和31,并计算出两个交易量的平均交易量为65.5。那么在复用Reducer作为Combiner的情况下,Reducer仅处理股票代码ABC的2个平均交易量,来自Mapper1的73.66 和 来自Mapper2的65.5,并计算股票代码ABC最终的平均交易量为69.58。
73.66 + 65.5 /2 = 69.58
这与我们不复用Reducer作为Combiner得出的结果不一样,因此复用Reducer作为Combiner得出平均交易量是不正确的。
所以我们可以看到Reducer不能总是被用于Combiner。所以,当你决定复用Reducer作为Combiner的时候,你需要问自己这样一个问题 - 使用Combiner与不使用Combiner的输出结果是否一样?
相关文章推荐
- Hadoop实战:使用Combiner提高Map/Reduce程序效率
- Hadoop中Combiner的使用
- Hadoop中Combiner的使用
- 为什么使用combiner?【Hadoop】
- hadoop的基本简介及安装、配置、使用(一)
- Hadoop(十六)之使用Combiner优化MapReduce
- hadoop中Combiner使用中需要注意的地方
- Hadoop 使用Combiner提高Map/Reduce程序效率
- [置顶] hadoop学习路线之:ant简介及其使用
- hadoop——Map/Reduce中combiner的使用
- Hadoop Combiner 使用问题
- Hadoop实战:使用Combiner提高Map/Reduce程序效率
- Hadoop Streaming使用简介
- Hive简介、什么是Hive、为什么使用Hive、Hive的特点、Hive架构图、Hive基本组成、Hive与Hadoop的关系、Hive与传统数据库对比、Hive数据存储(来自学习资料)
- Hadoop 使用combiner提升性能
- 【Hadoop】Combiner的本质是迷你的reducer,不能随意使用
- Hadoop中Combiner的使用
- 李克华 云计算高级群: 292870151 195907286 交流:Hadoop、NoSQL、分布式、lucene、solr、nutch kafka入门:简介、使用场景、设计原理、主要配置及集群搭
- Hadoop 使用Combiner提高Map/Reduce程序效率
- Hadoop(十六)之使用Combiner优化MapReduce【转载】