1.num-executors
该参数用于设置Spark作业总共要用多少个Executor进程来执行。Driver在向YARN集群管理器申请资源时,YARN集群管理器会尽可能按照你的设置来在
集群的各个工作节点上,启动相应数量的Executor进程。
2.executor-memory
该参数用于设置每个Executor进程的内存。Executor内存的大小,很多时候直接决定了Spark作业的性能,而且跟常见的JVM OOM异常,也有直接的关联。
3.executor-cores
该参数用于设置每个Executor进程的CPU core数量。这个参数决定了每个Executor进程并行执行task线程的能力。每个Executor进程的CPU core数量越多,越能够快速地执行完分配给自己的所有task线程。
4.driver-memory
该参数用于设置Driver进程的内存。
Driver的内存通常来说不设置,或者设置1G左右应该就够了。需要注意的一点是,如果需要使用collect算子将RDD的数据全部拉取到Driver上进行处理,
必须确保Driver的内存足够大,否则会出现OOM内存溢出的问题。
5.spark.default.parallelism
该参数用于设置每个stage的默认task数量。
如果不去设置这个参数,Spark会根据底层HDFS的block数量来设置task的数量,默认是一个HDFS block对应一个task。
Spark官网建议,设置该参数为num-executors * executor-cores的2~3倍。
6.spark.storage.memoryFraction
该参数用于设置RDD持久化数据在Executor内存中能占的比例,默认是0.6。也就是说,默认Executor 60%的内存,可以用来保存持久化的RDD数据。
如果Spark作业中,有较多的RDD持久化操作,该参数的值可以适当提高一些,保证持久化的数据能够容纳在内存中。
但是如果Spark作业中的shuffle类操作比较多,而持久化操作比较少,那么这个参数的值适当降低一些比较合适。
7.spark.shuffle.memoryFraction
该参数用于设置shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能够使用的Executor内存的比例,默认是0.2。
8.示例
./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 \