spark 调优(五):提交任务优化
大家好,我是怀瑾握瑜,一只大数据萌新,家有两只吞金兽,嘉与嘉,上能 code 下能 teach 的全能奶爸
如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~
1. 起因
任务运行如何提高并发,如何有效利用资源,如何排列任务,这是 spark 调优的最后一道门槛,也是话费时间最长的地方,往往守着电脑看任务一点点走,很是折磨人。
2. 优化开始
2.1 任务可以运行
首先肯定需要任务能跑起来,不报错,先了解一些基本的 spark-submit 的参数
基础参数
master:本地 local 服务器 yarn, 这是大部分人的使用方式
queue:提交任务所用的队列
class:任务执行的主 main 方法
name:任务名称
deploy-mode:服务器上大部分都是 cluster
files:加载的一些配置文件
内存参数:
driver-memory:每个 Executor 进程的内存
num-executors:Spark 作业总共要用多少个 Executor 进程来执行,该参数影响总内存数
executor-cores:每个 Executor 进程的 CPU core 数量,该参数与 num-executors 相乘是并发度,该参数超过 4 个的时候容易各种出错,所以想提高并发度,还是提高 num-executors 数量,减少 executor-memory 最好,这样来保证总内存基本不变
executor-memory:Driver 进程的内存,一般广播变量大的话,需要该参数设置较大
conf spark.default.parallelism:落盘的文件数,一般默认 200,如果文件较大,需要修改该参数
conf spark.sql.shuffle.partitions:shuffle 时的分区数量,默认 200,也有动态调节,如果不满足,可以手动修改
conf spark.executor.memoryOverhead:堆外内存,可以理解成给每个 executors 单独的一个内存数,如果 executors 本身不能满足,那就会使用该内存
说一个简单的内存使用计算方法,只适合简单的计算,注意,此算法不较真。。
总内存 = (num-executors * executor-memory)+ driver-memory + (num-executors * spark.executor.memoryOverhead)
这样大概看一眼配置,就知道大概使用了多少内存,每个任务有多少内存就心中有数了
2.2 任务可以并行
当所有任务都可以运行起来后,下一步就是调优了
查看数据大小,选择落盘的每个文件大小
根据文件大小设置总内存数,根据数据量大小设置总并发数
根据任务执行每个 task 读取的文件大小来设置 shuffle 的分区数量
根据落盘是 write 的大小设置落盘的文件数
不断循环,来给每个任务找到一个合理的资源使用情况,然后再根据总资源进行合理的分配。
结束语
如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~
可关注公众号【怀瑾握瑜的嘉与嘉】,获取资源下载方式
版权声明: 本文为 InfoQ 作者【怀瑾握瑜的嘉与嘉】的原创文章。
原文链接:【http://xie.infoq.cn/article/f720aee0ef31b68caa102adcc】。文章转载请联系作者。
评论