spark-submit参数调优

一:spark-submit 提交job的参数说明

示例:

spark-submit --master yarn --class xxxx --executor-cores 5 --executor-memory 5G --num-executor 4 xxx.jar

解释:

1.–executor-cores

作用: 决定了任务的并行度
假设一个任务要想运行完成需要200个task,一个cpu核数同一时间只能运行一个task,目前总核数 = executor-cores * num-executor = 5*4 = 20个
所以:同一时间只能运行20个task,那么200个task需要运行完成需要的批次 = 200/20 = 10个批次

优化:
把executor-cores 设置为10 ,则总核数提高至40个,运行完成200个task只需要 5个批次,提高效率

2.–executor-memory

作用:决定数据获取的速度
假设executor中数据量是20G,目前executor的内存大小为5G,所以executor只能保存5G数据,剩余的15G数据保存在磁盘中,所以获取数据的时候这15G数据就需要走磁盘IO

优化:
将executor的内存设置为30G , 则全部数据都可以保存在内存中,下次需要数据的时候就可以直接从内存中获取

3.–num-executor

作用:决定任务并行度和数据获取速度

优化:
适当提高executor的数量,可以充分利用集群资源,前提是集群有资源可以用

4.生成环境一般配置方式

–executor-cores 一般设置为<= 5G
–executor-memory 根据数据量大小,假如数据量为100G,那就可以把executor-memory设置为10-20G,保证executor-memory * num-executor的资源可以存放的下总数据量,同时预留部分内存,因为在处理数据过程中,会产生额外数据,内存占用空间会比开始时候高
–num-executor 设置为15左右

注意:
所有参数调优方向的前提都取决于集群的规模和数据量的大小
但是 : 一次任务事务执行所分配的总资源最好不要大于集群总资源的 1/4
避免抢占其他任务的资源

5.Driver

driver的默认内存大小是 1G
问题: 如果返回的结果数据大于 1G ,就会发生OOM内存溢出异常
一般都会设置为5-10G

设置driver的方式
1.提交任务中设置 spark-submit --driver-memory 10G 常用
2.在程序中设置 --config(“spark.driver.memory”,“10G”)

6.Collect

collect的作用:
1.触发job的计算
2.会将rdd的所有分区的数据收集起来,封装成Array,返回给Driver

注意:
项目中慎用collect算子
无可避免的时候–例如需要广播变量的时候,必须经过收集数据才能广播出去

使用原则:
1.小于 2G 的数据都可以广播出去
2.collect收集的数据不可大于driver的内存

你可能感兴趣的:(Spark)