原文来自:http://blog.csdn.net/macyang/article/details/9260777
通读了一下,进行翻译:
在MapReduce job下面,有个Combiner,工作机制是将Reducer的工作分担一部分给Map阶段来做。
在Hive的执行计划优化中也是如此,默认情况下会开启Map-side Aggregation优化的功能。
select distinct id from tbl;
select id from tbl group by id;
这2种写法虽然可以得到相同的结果,但是执行计划则有很大的区别。
使用distinct效率更高一些,因为会使用到Map-side Aggregation,就是在map阶段进行去重,相对需要付出更多的内存空间。
第二种写法会把idshuffle到reduce上面进行去重,效率很低,但是稳定。
出现 error: Out of memory due to hash maps used in map-side aggregation.异常的时候,
很大的可能是因为在做distinct的对象,重复率很低,导致map阶段里面维护的一个内存Map对象非常巨大。
如在word count example中。
会把单词每一个拆分出来,维护到一个key(单词)-value(数量)的内存Map里面,
然后再放到Reducer里面。
加入单词的重复数很低,那么这个内存Map超过了JVM配置的Map进程的内存大小的限制,就会出现上面的error了。
那么进行如下的配置修改是什么意思呢?
set hive.map.aggr.hash.percentmemory = 0.25
意思是说,当内存的Map大小,占到JVM配置的Map进程的25%的时候(默认是50%),就将这个数据flush到reducer去,以释放内存Map的空间。
其他的解决方法:
或者干脆关掉 MapAggregation ,不建议~~
set hive.map.aggr=false;
如果内存Map超过一定大小,就关闭MapAggregation功能
set hive.map.aggr.hash.min.reduction=0.5;
对于数据倾斜情况:
set hive.groupby.skewindata=true;
数据据倾斜的时候进行负载均衡,当选项设定为 true,生成的查询计划会有两个 MR Job。
第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;
第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。
相关推荐
Unsupervised Part-based Weighting Aggregation of Deep Convolutional Features for Image Retrieval.pdf
扩散限制凝聚(Diffusion-Limited Aggregation,DLA)是一种模拟自然界中自组织过程的算法,常用于研究粒子聚集现象。在DLA模型中,随机行走的粒子在到达已聚集的粒子群时会粘附上去,形成复杂的分支结构。这个过程...
LWA offers many additional benefts such as common control of 3GPP and Wi-Fi resources, operator controlled WLAN mobility, and fast RAN-based WLAN authentication. Importantly, Release 13 LWA can be ...
tunes the aggregation mode and controls how data is split between LTE and WLAN. Results show that the proposed algorithm is able to derive the optimal control parameter settings per cell under ...
在"ns-3-LTE-Carrier-Aggregation-master.zip_CQI-ReportConfig_aggrega"这个压缩包中,包含了NS-3 LTE载波聚合模块的相关代码和配置,这些资源可以帮助我们理解并实现CA中的CQI报告策略。 首先,我们需要了解CQI...
本资源包包含了一个名为"A Non-Local Aggregation Method Stereo Matching"的相关研究,它探讨了一种非局部聚合方法来优化立体匹配的性能。以下是关于这个主题的详细知识点: 1. **非局部相似性**:非局部思想源于...
特别是对于数据聚合(Data Aggregation)这一操作而言,其安全性显得尤为重要。 #### 安全数据聚合的重要性 数据聚合是指在网络中收集多个节点的数据并将其汇总到一个中心节点的过程。这个过程有助于减少数据传输...
在9.6节“Aggregation”中,作者可能深入探讨了如何利用Model子句实现不同类型的聚合功能,例如分组、总计、平均值等,这些功能通常通过GROUP BY和AGGREGATE函数完成,但在某些情况下,Model子句可以提供更灵活的...
标题中的"Recurrent Squeeze-and-Excitation Context Aggregation Net for Single Image Deraining"是一种用于单张图像去雨的深度学习模型,它结合了循环神经网络(RNN)与卷积神经网络(CNN)的优势,旨在提升图像...
本资源名为“hestia-earth-aggregation-0.0.1.tar.gz”,这是一个Python库,专门用于地球数据的聚合处理。让我们深入探讨这个库以及它可能包含的关键知识点。 首先,"hestia"这个名字很可能来源于古希腊神话中的...
《A Non-Local Cost Aggregation Method for Stereo Matching》是由杨庆雄提出的一种针对立体匹配问题的非局部成本聚合方法。立体匹配是计算机视觉领域中的一个关键任务,它旨在找到两个不同视角图像(左视图和右...
本项目提供的"A Non-Local Cost Aggregation Method for Stereo Matching"完整代码,旨在实现这一先进的方法。 非局部成本聚合的核心思想在于,图像中的每个像素不仅与其直接相邻的像素比较,还与图像中的所有其他...
先决条件 > = v3.17 > = 3.9.2 > = 3.3.4安装Linux # get git repositorygit clone https://github.com/3onier/Diffusion-limited-aggregation# create make filecmake .# build projectmake视窗工作正在进行中苹果...
[R111]int Route-Aggregation 3 创建者组号 [R111-Route-Aggregation1]ip add 192.168.254.1 24 配置IP地址 三层聚合可直接配置 [R111]int range GigabitEthernet 6/1 GigabitEthernet 6/0 进入需要添加的端口 [R111...
5. **动态规划或分而治之**:如动态编程的BM(Block Matching)算法或半全局匹配(Semi-Global Matching, SGM)算法,通过优化全局路径来确定最佳视差。 6. **后处理**:去除噪声和不连续性,如利用空间一致性、...
链路聚合,或称LAG(Link Aggregation Group),是一种将多个物理连接组合成一个逻辑链路的技术,使得媒体访问控制(MAC)客户端可以将链路聚合组视为单一的高带宽链接。这种技术的核心是通过N个并行的全双工点对点...
### 聚合管道(Aggregation Pipeline) 聚合管道是一个多层次的处理过程,它将数据文档转换为聚合结果。它由多个阶段组成,每个阶段都按照声明的顺序进行操作。聚合管道中常见的一些操作包括: - **$match**: 过滤...
在数据库管理系统中,聚合操作是数据处理的关键组成部分,特别是在在线分析处理(OLAP)场景下。DuckDB是一个开源的关系型数据库,它针对大规模数据集的统计摘要提供了高效的并行分组聚合功能。...
《跨尺度成本聚合码》(Cross-Scale Cost Aggregation Code)是实现立体匹配算法CSCA(Cross-Scale Cost Aggregation)的一种软件实现。立体匹配是计算机视觉领域的一个重要研究方向,其目标是通过分析图像对来计算...