spark-submit参数调优

  • Post author:
  • Post category:其他




一: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的内存



版权声明:本文为weixin_44769733原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。