searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

离线数仓优化简述

2023-08-29 01:54:34
48
0

1、业务层面

    计算量太大是不是必须的,是否可以减少参与计算的用户量或者时间跨度;
    计算逻辑是否过于复杂,是否可以简化。

2、模型层面

    是否有现成的数据可以使用或者基于现成的数据进行加工;
    是否可以将整个计算逻辑进行合理拆分,降低每个子任务的复杂度,同时提高复用的可能性;
    维度退化,空间和时间的权衡。

3、系统层面(遵循一些计算引擎建议的使用规则和参数设置)

    使用Spark3引擎,自动合并小文件;
    输入文件的存储格式、压缩格式、大小;
    输出文件的大小;
    启用压缩;
    分区、分桶;
    拉链表;
    yarn队列的设置;
    合适的计算引擎;
    task的内存设置;
    task处理的数据量;
    task的数量;
    并行度优化;
    调整参数减少Map数量;
    调整参数减少reduce数量。

4、sql、代码层面

    列裁剪,避免select *;
    分区裁剪,使用分区字段过滤;
    条件限制;
    谓词下推;
    map端预聚合;
    大key的过滤;
    打散倾斜key;
    合适的join方式;
    用Distribute By Rand控制分区中数据量;
    group by优化;
    中间结果的缓存和复用;
    小文件优化。

5、任务层面

    减少任务依赖,尽可能缩短链路;
    业务链路/逻辑重构/改写;
    任务分级,任务数评估,错峰调度;
    任务依赖降级,周级别的任务依赖天级别,天级别依赖小时级别,小时级别依赖分钟级别;
    避免频繁创建任务;
    核心任务优先保证产出,双链路机制开启;
    耗时长的任务拆分成子任务。任务批次提交;
    资源动态扩容;
    资源腾挪调整;
    无用任务下线。

0条评论
作者已关闭评论
徐****东
10文章数
1粉丝数
徐****东
10 文章 | 1 粉丝
原创

离线数仓优化简述

2023-08-29 01:54:34
48
0

1、业务层面

    计算量太大是不是必须的,是否可以减少参与计算的用户量或者时间跨度;
    计算逻辑是否过于复杂,是否可以简化。

2、模型层面

    是否有现成的数据可以使用或者基于现成的数据进行加工;
    是否可以将整个计算逻辑进行合理拆分,降低每个子任务的复杂度,同时提高复用的可能性;
    维度退化,空间和时间的权衡。

3、系统层面(遵循一些计算引擎建议的使用规则和参数设置)

    使用Spark3引擎,自动合并小文件;
    输入文件的存储格式、压缩格式、大小;
    输出文件的大小;
    启用压缩;
    分区、分桶;
    拉链表;
    yarn队列的设置;
    合适的计算引擎;
    task的内存设置;
    task处理的数据量;
    task的数量;
    并行度优化;
    调整参数减少Map数量;
    调整参数减少reduce数量。

4、sql、代码层面

    列裁剪,避免select *;
    分区裁剪,使用分区字段过滤;
    条件限制;
    谓词下推;
    map端预聚合;
    大key的过滤;
    打散倾斜key;
    合适的join方式;
    用Distribute By Rand控制分区中数据量;
    group by优化;
    中间结果的缓存和复用;
    小文件优化。

5、任务层面

    减少任务依赖,尽可能缩短链路;
    业务链路/逻辑重构/改写;
    任务分级,任务数评估,错峰调度;
    任务依赖降级,周级别的任务依赖天级别,天级别依赖小时级别,小时级别依赖分钟级别;
    避免频繁创建任务;
    核心任务优先保证产出,双链路机制开启;
    耗时长的任务拆分成子任务。任务批次提交;
    资源动态扩容;
    资源腾挪调整;
    无用任务下线。

文章来自个人专栏
大数据与数据治理
10 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0