写点什么

spark 调优(五):提交任务优化

  • 2022 年 7 月 09 日
  • 本文字数:1039 字

    阅读完需:约 3 分钟

大家好,我是怀瑾握瑜,一只大数据萌新,家有两只吞金兽,嘉与嘉,上能 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 任务可以并行

当所有任务都可以运行起来后,下一步就是调优了


  1. 查看数据大小,选择落盘的每个文件大小

  2. 根据文件大小设置总内存数,根据数据量大小设置总并发数

  3. 根据任务执行每个 task 读取的文件大小来设置 shuffle 的分区数量

  4. 根据落盘是 write 的大小设置落盘的文件数


不断循环,来给每个任务找到一个合理的资源使用情况,然后再根据总资源进行合理的分配。



结束语

如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~

可关注公众号【怀瑾握瑜的嘉与嘉】,获取资源下载方式

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2022.07.01 加入

还未添加个人简介

评论

发布
暂无评论
spark调优(五):提交任务优化_7月月更_怀瑾握瑜的嘉与嘉_InfoQ写作社区