为了账号安全,请及时绑定邮箱和手机立即绑定

Spark Core 调优指南

标签:
Spark

1 体系

webp

体系

2 配置

  • 资源分配

    • num-executors:executor的个数

    • executor-cores:cpu core 的两倍

    • executor-memory:每个executor的内存大小

    • driver-memory:driver的内存大小

  • 并行度

    • spark.default.parallelism

    • spark.sql.partitions

    • repartition(num)

  • 内存使用

    • spark.storage.memoryFraction:用于cache的内存比例

    • spark.shuffle.memoryFraction:shffule阶段的缓存占内存比例

3 代码

  • 不要重复创建RDD

  • 重复使用的RDD进行cache

  • 使用高性能算子

    • mapPartition代替map

    • foreachPartition代替foreach

    • 用reduceByKey代替groupByKey

  • filter以后使用coalesce减少小任务

  • 广播大变量:sc.broadcast

4 数据

  • 序列化

    • 使用KryoSerializer代替Java序列化

  • 文件格式

    • 使用parquet文件格式,列式存储,读取效率高

5 倾斜

  • 聚合(xxByKey)

    • 增加并行度

    • 局部聚合+全局聚合给每个Key加上前缀,聚合

    • 对上步聚合结果的Key去前缀,聚合

    • 抽样+过滤

    • 造成倾斜的Key数量小且不重要

    • 造成倾斜的Key数量多且重要

  • 连接

    • 造成倾斜的Key不多

    • 造成倾斜的Key多

    • 对RDD1进行sample找出造成倾斜的Key

    • 分别对RDD1和RDD2进行filter将其分成skewRDD1和commonRDD1以及skewRDD1和commonRDD2

    • 然后对skewRDD1的key添加随机前缀n,对skewRDD2进行n倍扩容,然后join,再对结果的key进行前缀移除得到joinRDD1

    • 将commonRDD1和commonRDD2进行连接,得到joinRDD2
      joinRDD1.union(joinRDD2)

    • 对RDD1进行随机前缀n的添加

    • 对RDD2进行n倍扩容

    • 然后进行连接

    • 进行随机前缀的移除处理得到结果

    • 将reduce join 转成map join

    • 使用广播变量将小表数据进行广播

    • SparkSQL设置spark.sql.autoBroadcastJoinThreshold,默认10m

    • 小表连接大表

    • 大表连接大表



作者:_和_
链接:https://www.jianshu.com/p/87a9c33b4009

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消