请问下大数据计算MaxCompute:有哪些比较好的优化方案呢?[阿里云]

请问下大数据计算MaxCompute:数据倾斜导致JOB运行时间过长导致系统会自动kill掉job,有哪些比较好的优化方案呢?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 看下这里哈。https://help.aliyun.com/zh/maxcompute/use-cases/data-skew-tuning?spm=a2c4g.11186623.0.i10,此回答整理自钉群“MaxCompute开发者社区2群”

  2. 在大数据计算中,数据倾斜是指数据分布不均,在执行shuffle操作时导致某些分区的数据量远大于其他分区。这会导致处理速度变慢,从而使得整个Job的运行时间过长,甚至可能导致系统自动kill掉job。以下是一些优化数据倾斜问题的常见策略:

    1. 重新设计键(Key)

      • 避免使用高基数列作为Shuffle Key,以减少热点。
      • 如果可能的话,尝试找到一个更均匀分布的替代键。
    2. 自定义分区器

      • 使用自定义的分区函数来平衡数据分配,确保每个分区接收的数据量大致相同。
      • 根据业务逻辑或数据特征进行分区,比如通过哈希或者取模等方法。
    3. 调整并行度

      • 调整作业的并行度,增加worker的数量,将任务分解为更多小任务。
      • 对于Spark,可以设置spark.sql.shuffle.partitions参数,控制分区数量。
    4. 聚合预处理

      • 在进行全局聚合之前,先进行局部聚合,减小需要shuffle的数据量。
    5. 数据重分布

      • 在关键步骤前对数据进行重分布,使其更均匀地分布在集群节点上。
    6. 使用Combiner

      • Combiner可以在map阶段合并部分结果,减轻reduce端的压力。
    7. 动态负载均衡

      • 利用系统的动态负载均衡机制,让系统自动重新调度任务以缓解热点。
    8. 利用广播变量和累加器

      • 对于较小的数据集,使用广播变量可以避免不必要的网络传输。
      • 累加器可以帮助统计信息汇总而无需大量的shuffle。
    9. 代码优化

      • 优化算法和实现,例如尽量避免使用全局排序等昂贵的操作。