大数据开发岗面试复习30天冲刺 – 日积月累,每日五题【Day30】——Spakr数据调优(文末附完整文档)

juejin前言

大数据开发岗面试复习30天冲刺 - 日积月累,每日五题【day30】——spakr数据调优(文末附完整文档)

文章目录

juejin前言面试题 01、运行%ignore_a_1%配置 -num-executors面试题 02、运行资源优化配置 -executor-memory面试题 03、运行资源优化配置 -executor-cores面试题 04、运行资源优化配置 -driver-memory面试题 05、运行资源优化配置 -spark.default.parallelism文档链接总结

停,不要往下滑了,静静思考5分钟,看看这些面试题你都掌握了吗?

一个CPU核心同一时间只能执行一个线程。而每个Executor进程分配到的多个任务,都是以每个任务一个线程的方式,多线程并发运行的。

一个应用提交时应该设置多大的内存?设置多少个核心?设置几个Executor?

以下答案仅供参考:

./bin/spark-submit --master yarn-cluster --num-executors 100 --executor-memory 6G --executor-cores 4 --driver-memory 1G --conf spark.default.parallelism=1000 --conf spark.storage.memoryFraction=0.5 --conf spark.shuffle.memoryFraction=0.3 

面试题 01、运行资源优化配置 -num-executors

参数说明:此参数用于设定Spark作业总共使用多少个Executor进程来执行。Driver在向YARN集群管理器请求资源时,YARN集群管理器会尽量按照你的设定,在集群的各个工作节点上启动相应数量的Executor进程。这个参数非常重要,如果未设定,默认只会启动少量的Executor进程,此时你的Spark作业运行速度会非常慢。

参数调优建议:每个Spark作业运行时,一般设定50到100个Executor进程比较合适,设定太少或太多都不好。设定太少,无法充分利用集群资源;设定太多,队列可能无法提供足够的资源。

面试题 02、运行资源优化配置 -executor-memory

参数说明:此参数用于设定每个Executor进程的内存。Executor内存的大小,通常直接决定了Spark作业的性能,并且与常见的JVM OOM异常有直接关联。

参数调优建议:每个Executor进程的内存设定为4G到8G较为合适。但这只是一个参考值,具体设定还需根据不同部门的资源队列来定。可以查看团队的资源队列的最大内存限制,num-executors * executor-memory不能超过队列的最大内存量。

此外,如果你与团队其他成员共享这个资源队列,那么申请的内存量最好不要超过资源队列最大总内存的1/3到1/2,以免你的Spark作业占用队列所有资源,导致其他同事的作业无法运行。

面试题 03、运行资源优化配置 -executor-cores

参数说明:此参数用于设定每个Executor进程的CPU核心数量。这个参数决定了每个Executor进程并行执行任务线程的能力。因为每个CPU核心同一时间只能执行一个任务线程,因此每个Executor进程的CPU核心数量越多,越能快速执行完分配给自己的所有任务线程。

参数调优建议:Executor的CPU核心数量设定为2到4个较为合适。同样根据不同部门的资源队列来定,可以查看自己的资源队列的最大CPU核心限制是多少,再依据设定的Executor数量,决定每个Executor进程可以分配到几个CPU核心。同样建议,如果与他人共享这个队列,那么num-executors * executor-cores不要超过队列总CPU核心的1/3到1/2左右比较合适,以免影响其他同事的作业运行。

面试题 04、运行资源优化配置 -driver-memory

参数说明:此参数用于设定Driver进程的内存。

参数调优建议:Driver的内存通常不设定,或者设定为1G左右就足够了。唯一需要注意的是,如果需要使用collect算子将RDD的数据全部拉取到Driver上进行处理(或者使用map side join操作),那么必须确保Driver的内存足够大,否则会出现OOM内存溢出的问题。

面试题 05、运行资源优化配置 -spark.default.parallelism

参数说明:此参数用于设定每个stage的默认任务数量,也可以认为是分区数。这个参数极为重要,如果未设定可能会直接影响你的Spark作业性能。

参数调优建议:Spark作业的默认任务数量设定为500到1000个较为合适。很多人常犯的一个错误就是不去设定这个参数,那么此时就会导致Spark自己根据底层HDFS的block数量来设定任务的数量,默认是一个HDFS block对应一个任务。通常来说,Spark默认设定的数量是偏少的(比如就几十个任务),如果任务数量偏少的话,就会导致你前面设定好的Executor的参数都前功尽弃。试想一下,无论你的Executor进程有多少个,内存和CPU有多大,但是任务只有1个或者10个,那么90%的Executor进程可能根本就没有任务执行,也就是白白浪费了资源!因此Spark官网建议的设定原则是,设定该参数为num-executors * executor-cores的2到3倍较为合适,比如Executor的总CPU核心数量为300个,那么设定1000个任务是可以的,此时可以充分利用Spark集群的资源。

文档链接

大数据精选面试题目160道.docx

总结

今天我们复习了面试中常考的数据倾斜相关的五个问题,你是否已经了然于心了呢?其实做这个专栏我也有私心,就是希望借助每天写一篇面试题,督促自己学习,以免在面试期间尴尬!平时不流汗,面试多流泪!

对了,如果你的朋友也在准备面试,请将这个系列分享给他。好了,今天就到这里,学废了的同学,记得在评论区留言:打卡。给同学们以激励。

以上就是大数据开发岗面试复习30天冲刺 – 日积月累,每日五题【Day30】——Spakr数据调优(文末附完整文档)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/13104.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月21日 17:25:07
下一篇 2025年11月21日 18:01:54

相关推荐

发表回复

登录后才能评论
关注微信