spark中的参数设置

之前一直在使用spark,对于spark的参数设置了解过部分。最近当被同事问起时,感觉自己又有点模糊。
好记性不如烂笔头。

spark-submit的参数设置

spark的运行模式有多种,这边就yarn提交的任务进行说明:
正常用到的参数如下:

/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 \

num-executors

设置spark任务是需要多少个executor来执行,这个可以参照任务的大小和集群的规模来设置;想要最大化集群资源的话,一般是和集群的节点数保持一致,或者是集群节点数的整数倍(还需要综合考虑单节点的内存,core,能调用的资源的数量)

executor-memory

单个excutor的能使用的内存的大小,executor-memory *num-executors 就是本次任务需要的内存,这个值,需要参考能调用的资源的大小和单节点本身的内存的大小,在满足这两个前提之下,尽可能的把这个值设置的大些;

executor-cores

单个executor 执行给的core的数量,不能超过单节点的core的总和;
单个core同一时间只能执行一个task,在不影响其他人作业,且不超过节点的core的上限的时候,这个值越大执行的效率越高;

spark.default.parallelism

这个参数比较重要;
该参数设置的是stage划分的task的数量,这个参数一定要设置。合理的设置,应该是num-executors*executor-cores 的2-3倍,每个core执行2-3个任务。要是不设置,默认的设置的task数量很少,要是不设置,之前设置的executor的数量等,就没有起到作用,因为task很少 大部分的executor属于空闲状态。

spark.storage.memoryFraction

默认占用executor 60%的内存 用于持久化rdd。这个值可以根据需要持久化的rdd的大小来进行设置,适当的增大\减小。参照下一个参数一起调整。

spark.shuffle.memoryFraction

当前stage 拉取上一个stage的task输出数据能使用的内存的大小,默认是20%。
权衡,是shuffle操作多,还是需要cache的rdd的内存的诉求高,两个内存的占比和为80%

剩下的20%是用户执行代码所需要的内存,如果发现由于频繁的gc导致运行时间过长,可以适当的增大这个值,但是确保三个值得和是1;

你可能感兴趣的:(spark)