阿里云 MaxCompute 计算长尾问题优化 2

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 阿里云 MaxCompute 计算长尾问题优化 2


三、优化思路与解决方案


3.1 Group By 长尾

M1->R2_1

• M1 做 local combiner

• M1 输出 shuffle hash(hash(key)/N), 分发到R2_1

• R2_1 做最终汇总


5.png


M1->R2_1->R3_2

• M1 做 local combiner

• M1 输出 shuffle hash (算法加入随机因素),更均匀分发到 R2_1

• R2_1 做 partial combiner

• R2_1 输出shuffle hash(hash(key)/N), 分发到 R3_2

• R3_2 做最终汇总


6.png


解决方案:

set odps.sql.groupby.skewindata=true;

注意:


此参数 仅对 group by 有效

由于多引入一个R,所以会有额外的资源消耗。

若长尾并不严重,用这种方法人为增加一次 R ,最终的时间消耗可能反而更大。

场景:火爆商品售卖,根据商品算pv/uv


3.2 count distinct 长尾


场景:计算商品购买uv,固定的特殊值比较多

select
count(distinct userid) as cnt
from table;
select
count(tmp) as cnt
from
(select count(*) as tmp from table group by userid) a;

解决方案:


避免使用distinct,使用group by改造语句,开启groupby.skewindata。注意:引入R,会有额外资源消耗。

先过滤特殊值,count完后,在结果上加上特殊值的个数。注意:根据具体场景进行具体分析。


3.3 动态分区 长尾


insert into table yftest partition(log_partition_time) select log_source,log_partition_time from access;

假设 N个 Map instance,M个分区,那么可能产生 NxM 个小文件:

Inst1 ds1
Inst2 ds2
Inst3 X …
… dsM
instN

7.png

8.png


——》

20200520164535805.png



解决方案:


如果目标分区不多,建议先关闭reshuttle;

任务执行完毕后,手动执行MergeTask,

减少小文件。


3.4 Join 长尾


Join会被解释成一个MapReduce任务,Map端分别读取join两边表的数据,Reduce做Join操作。


举例:

select a.*, b.name from list a left outer join dic b on a.item_id=b.item_id;

解决方案一:使用MAPJOIN


原理:

Join在Map端做。 把小表放到每个Map中,这样每个Map都拥有小表所有记录,可以在本地进行Join。

select /*\+ MAPJOIN(b) \*/ a.*, b.name from list a left outer join dic b on a.item_id=b.item_id;

限制:


所有小表占用的内存总和不得超过512MB


Join会被解释成一个MapReduce任务,Map端分别读取join两边表的数据,Reduce做Join操作。


举例:

select a.*, b.name from list a left outer join dic b on a.item_id=b.item_id

解决方案二:分而治之

select a.*, b.name from list a join dic b on a.item_id=b.item_id;

Step 1: 找出常用item范围

create table yf_list_sub as
select a.item_id.a.cnt,b.name
from
(
select item_id,count(*) as cnt
from list a
group by item_id
order by cnt desc limit 100
) a
join
(
select name
from dic
) b
on a.item_id=b.item_id
Step 2: 常用item先关联
create table fy_result_tem as
select /*+ MAPJOIN(b) */ a.*, b.name
from dic a
left outer join
yf_list_sub b
on a.item_id = b.item_id;
create table result_part1 as
select * from yf_result_tem
where name is not null;
Step 3: 非常用item后关联
create table result_part2 as
select
a.item_id,
b.name
from
(
select *
from yf_result_tem
where name is null
) a
join
(
select *
from dic
) b
on a.item_id=b.item_id;
Step 4: union all
create table result as
select * from
(
select a.item_id,b.name
from result_part1
union all
select a.item_id,b.name
from result_part2
) t



相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
14天前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
30 2
|
2月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
63 0
|
24天前
|
人工智能 Cloud Native 数据管理
媒体声音|重磅升级,阿里云发布首个“Data+AI”驱动的一站式多模数据平台
在2024云栖大会上,阿里云瑶池数据库发布了首个一站式多模数据管理平台DMS:OneMeta+OneOps。该平台由Data+AI驱动,兼容40余种数据源,实现跨云数据库、数据仓库、数据湖的统一数据治理,帮助用户高效提取和分析元数据,提升业务决策效率10倍。DMS已服务超10万企业客户,降低数据管理成本高达90%。
101 19
|
24天前
|
存储 NoSQL 大数据
大数据 数据存储优化
【10月更文挑战第25天】
63 2
|
26天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
2月前
|
SQL 分布式计算 NoSQL
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
32 1
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
|
26天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
2月前
|
存储 大数据 分布式数据库
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
37 1
|
2月前
|
SQL 存储 监控
大数据-161 Apache Kylin 构建Cube 按照日期、区域、产品、渠道 与 Cube 优化
大数据-161 Apache Kylin 构建Cube 按照日期、区域、产品、渠道 与 Cube 优化
52 0
|
2月前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势