driver和executor的参数设置在yarn模式下才会起作用:
--driver-cores:Spark应用Driver的CPU核数,Driver主要完成任务的调度以及和executor和cluster manager进行协调。
--executor-cores:Spark应用每个Executor的CPU核数,各个 executor 使用的并发线程数目,也即每个 executor 最大可并发执行的 Task 数目。
--executor-memory:各个 executor 使用的最大内存,不可超过单机的最大可使用内存。
--num-executors:创建多少个 executor。
Spark性能调优之合理设置并行度:
并行度主要受--executor-cores与--num-executors的影响:总cpu core数量为executorCores * numExecutors,官方推荐task数量一般设置为总cpu core数量的2~3倍. 每个stage的task数量即rdd划分的partitions数量.
详见:https://www.cnblogs.com/jxhd1/p/6702218.html
Spark中Task,Partition,RDD、节点数、Executor数、core数目的关系和Application,Driver,Job,Task,Stage理解:
详见:https://www.cnblogs.com/liuys635/p/11083338.html
SparkConf属性:
详见:http://doc.codingdict.com/spark/20/
Spark中配置环境变量(非SparkConf中设置的变量,而是os.environ中设置的环境变量):
方法1:直接在spark-env.sh中添加环境变量
export S3_ACCESS_KEY_ID=xxx export S3_SECRET_ACCESS_KEY=xxx export S3_ENDPOINT=xxx
这样所有work nodes节点均有效,也无需主程序中设置os.environ
缺点:写死环境变量,无法动态修改
方法2:在SparkContent的environment变量中设置
可以在创建SparkContent传入该字典,也可在创建SparkContent后再设置
缺点:主程序若也要用到该环境变量仍需要通过os.environ设置
sc = SparkContext(appName='data model operator') sc.environment['S3_ENDPOINT'] = 'xxx' sc.environment['S3_USE_HTTPS'] = 'xxx' sc.environment['S3_VERIFY_SSL'] = 'xxx' os.environ['S3_ENDPOINT'] = 'xxx' os.environ['S3_USE_HTTPS'] = 'xxx' os.environ['S3_VERIFY_SSL'] = 'xxx'