
阿里云 MaxCompute 计算长尾问题优化
监控任务进度:使用工具如Maxcompute监控任务运行情况,分析各节点的负载情况。 数据分布分析:检查任务分组情况,观察是否存在某些节点处理数据量远超其他节点。 某些 数据分配不均,导致某些节点成为性能瓶颈。 避免使用
发布日期:2021-05-08 01:14:36
浏览次数:23
分类:精选文章
本文共 1143 字,大约阅读时间需要 3 分钟。
长尾问题及解决方案
前言
长尾问题是分布式计算中最常见的挑战之一,通常由数据分布不均导致。这种问题使得任务需要等待最慢的节点完成,从而影响整体效率。解决长尾问题的核心思想是将任务分配给多个Worker节点,而非由单一节点完成。
查看长尾问题的方法及发生阶段
要识别长尾问题,可以通过以下方式实现:
长尾问题的成因
长尾问题主要由以下原因引起:
instance
(如Map或Reduce)处理数据量远超其他instance
,导致运行时间显著延长。长尾问题的优化思路与解决方案
针对长尾问题,以下是常见的优化方法及解决方案:
3.1 Group By 长尾
方法描述:
- 在Map阶段对数据进行本地组合(
local combiner
),将部分结果输出到缓冲区。 - 将缓冲区数据随机分配到多个Reduce节点(
shuffle hash
),确保数据分布更均匀。 - Reduce节点对收到的数据进行汇总。
优化方案:
set odps.sql.groupby.skewindata=true;
注意事项:
- 仅适用于Group By操作。
- 引入额外Reduce节点可能增加资源消耗,需根据实际情况权衡。
3.2 count distinct 长尾
场景描述:
- 需要计算用户唯一访问量(UV),但存在大量特殊值。
解决方案:
distinct
,改用Group By结合skewindata
:select count(tmp) as cnt from (select count(*) as tmp from table group by userid) a;
- 对特殊值进行过滤,最后补加特殊值数量。
- 数据分区较多,导致Map/Reduce任务产生大量小文件。
- 关闭
reshuttle
以减少小文件数量。 - 任务完成后手动执行
MergeTask
,合并小文件。 - Join操作导致任务性能下降。
- 使用MapJoin:
- 分而治之:
- 创建子表筛选常用项和非常用项。
- 分别进行Join并合并结果。
3.3 动态分区 长尾
场景描述:
解决方案:
3.4 Join 长尾
场景描述:
解决方案:
select /*+ MAPJOIN(b) */ a.*, b.name from list a left outer join dic b on a.item_id=b.item_id;
结论
通过以上方法,可以有效缓解长尾问题,提升分布式计算任务性能。优化时需根据具体场景选择合适方案,并注意资源分配。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月02日 19时41分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
看完你就明白的锁系列之锁的状态
2019-03-06
看完这篇操作系统,和面试官扯皮就没问题了
2019-03-06
我的价值观
2019-03-06
一文详解 Java 并发模型
2019-03-06
值类型与引用类型(中)
2019-03-06
MSSQL 2005 数据库变成可疑状态
2019-03-06
QBlog V2.5 源码开放下载(ASP.NET 番外系列之开端)
2019-03-06
秋色园引发CPU百分百命案的事件分析与总结
2019-03-06
安装jdk并配置环境变量
2019-03-06
稀疏数组
2019-03-06
js的严格模式
2019-03-06
idea的安装和无限期试用
2019-03-06
Oracle VM VirtualBox安装PVE虚拟机
2019-03-06
【转】如何用css限制文字长度,使溢出的内容用省略号…显示
2019-03-06
Android MediaPlayer setDataSource failed
2019-03-06
ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路
2019-03-06
【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
2019-03-06
大前端的自动化工厂(1)——Yeoman
2019-03-06
数据仓库建模方法论
2019-03-06