spark提交作业的参数

130 阅读2分钟

待补充:收集尽可能多的参数,这里只是几个主要的参数

示例

spark提交作业示例

  spark-submit \
  --master local[5]  \
  --driver-cores 2   \
  --driver-memory 8g \
  --executor-cores 4 \
  --num-executors 10 \
  --executor-memory 8g \
  --class PackageName.ClassName XXXX.jar \
  --name "Spark Job Name" \
  InputPath      \
  OutputPath

image.png image.png

都有什么参数

spark提交作业中的参数: master 指定spark提交的方式,可以是spark://host:port, mesos://host:port, yarn,  yarn-cluster,yarn-client, local。这个参数是用于指定spark运行的环境

queue: 指定spark执行的队列,指定spark运行在哪个资源队列中

driver-cores:driver的内核数

driver-memory:driver的内存

executor-cores :一个executor的内核数,一个内核可以执行一个task

num-executors:executor的数量

executor-memory:一个executor的内存

conf :spark的配置属性

以上黑体标出的都是比较重要的参数,用于指定spark运行环境的资源分配。 这种资源包含计算资源和内存资源。

内存资源越多,那么溢写到磁盘的数据就越少,io消耗就越少;同时内存资源越多,gc的频率越低,执行效率就越高。

计算资源越多,能同时执行task的数量就越多。

计算资源和内存资源由:executor-cores、num-executors、executor-memory这三个参数控制。

其他参数

可以通过--conf配置其他参数。

比较重要的参数有以下几个:

spark.default.parallelism:用于设置每个stage的默认task数量,这个数量最好是executor-nums * executor-cores* (2-3)倍,这样设置不至于让资源处于空闲状态,能大大利用资源的效率,相当于是邪恶的地主,尽最大可能不让每一位佃农闲一刻。 如果这个数设置的太少,那么有的core执行完task,就没有task需要执行,而其他core还在执行task,就无法进入到下一个stage,这是这个core佃农就处于空闲时刻,这种情况邪恶贪婪的地主怎么能允许呢???

spark.storage.memoryFraction:这个值控制持久化的数据在executor内存中占的比例,默认值是0.6,根据实际情况调整,如果你的程序中持久化的占比比较高,那么可以适当提高这个值;如果持久化的数据不多,可以适当降低这个值

spark.shuffle.memoryFraction:这个值控制shuffle执行过程中占用内存的比例,如果shuffle过程中的数据写到内存中,但是内存空间不够用,那就要溢写到磁盘上,这样就降低了执行的性能,可以适当提高该值,降低spark.storage.memoryFraction值,避免shuffle过程中内存不够用。

参考:

Spark提交参数说明和常见优化

Spark性能调优之资源分配

Spark性能调优

Spark学习(4)——Spark任务提交参数详解