关于Spark调优相关事宜,本章先自万物起始之初,集群的资源优化讲起。
- 搭建集群
在Spark安装路径下 spark/conf/spark-env.sh配置:
SPARK_WORKER_CORES=XXX
SPARK_WORKER_MEMORY=XXX - 提交任务
提交任务命令,最好使用脚本化提交,可以在提交任务时,给当前Spark 应用程序足够的资源,提交命令:
./spark-submit –master spark://mynode1:7077 –class …. jar …
可以在—master 之后—class之前指定如下参数:
–driver-cores :
指定Driver端使用的core数。
–driver-memory:
指定Driver端使用的内存数,如果Driver端有回收数据广播的时候,可以多申请内存。
–executor-cores:
指定Executor端使用的core数,一个core可以某个时刻并行执行1个task,Executor 的core越多代表可以并行执行的task越多。
–executor-memory:
指定Executor端使用的内存,如果shuffle量多、对RDD持久化多、task创建对象多,可以申请多一些内存。
–total-executor-cores:
Standalone集群中,指定当前Spark应用程序最多使用多少core。在Standalone集群中默认提交一个Spark应用程序,这个Spark应用程序会使用当前集群所有的资源。
–num-executor:
在Yarn集群中默认为一个提交的Spark应用程序启动几个Executor,默认启动2个。
除了以上提交任务时可以指定参数外,也可以在代码中设置(不建议):SparkConf.set(k,v)在代码中这种方式设置。
也可以在Spark提交任务的客户端的spark/conf/spark-defaults.xml(不建议)下配置以下参数:
spark.driver.cores
spark.driver.memory
spark.exeuctor.cores
spark.executor.memory
spark.cores.max