Spark面试题-Spark常用的优化有些?

本文探讨了Apache Spark的性能优化技巧,包括合理设定任务并发度以平衡资源使用,优化内存管理以减少重复计算和使用广播变量降低内存压力,以及在Shuffle操作上的策略调整,如延迟shuffle、调整缓冲大小等。这些措施旨在提高CPU效率,减少磁盘和网络IO,提升整体应用性能。
摘要由CSDN通过智能技术生成

Spark常用的优化有些?

在这里插入图片描述

优化的目标:

优化的目标是促成CPU、内存、IO(磁盘和网络)的平衡,通过调整任务并行度,充分利用CPU的并发能力,任务过多会导致任务阻塞和任务调度开支增大,任务过少导致CPU利用率第,数据分片大,出现内存溢出。尽量避免shuffle,shffle一定会导致磁盘IO和网络IO,IO会大幅降低应用性能,如果无法避免shuffle,则要在shuffle的时机和方式上慎重选择。

出发点是平衡而充分的利用硬件资源,从任务开始时合理的并行度、计算过程中的内存充分利用、Shuffle相关优化三个方向思考优化措施,而具体实施又都落实到配置和代码两个方面。

具体的思路:

  • 任务开始时的并发度
    根据数据集的大小+partitioner计算分片数量,根据分片数量和分片大小确定要申请的资源。
    在计算的过程中,如果filter之后出现了数据的大幅减小,可以通过repatition重分区,避免对CPU和内存的浪费。

  • 任务计算过程中的内存充分利用
    根据任务的特点调整内存各部分使用比例,预估UserMemory、Execution Memory、Storage Memory大小,根据比例调整各部分内存占用比例。

    缓存计算代价大且会被重复使用的RDD,避免从头到尾的重复计算。缓存使用kryo序列化,SparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer").registerKryoClasses(xxxx)

    使用广播变量让同一个Executor下的Task共享用户数据,降低UserMemory的使用大小。

    增大任务本地化等待时间:spark.locality.wait,该值默认3秒,可适当扩大。
    考虑RDD的存储压缩 spark.rdd.compress

  • Shuffle相关优化
    使用广播变量避免shuffle
    将shuffle的时机尽量延后,尽量降低shuffle过程中全网传输的数量
    用key by替换group by
    增大map端数据输出缓存大小,spark.shuffle.file.buffer,默认32k,可设置为64k,该值越大,落盘次数越少,速度越快
    增大reduce拉取数据时网络缓存的大小,spark.reducer.maxSizeInFlight,默认为48M,可设为96M,该值越大,每次从网络拉取的数据越多,所需要的拉取次数越小。

附:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值