spark的默认配置文件位于堡垒机上的这个位置: $SPARK_CONF_DIR/spark-defaults.conf,用户可以自行查看和理解。
需要注意的是,默认值优先级最低,用户如果提交任务时或者代码里明确指定配置,则以用户配置为先。 用户再理解参数含义的基础上,可根据具体任务情况调整参数。
以下常用参数配置均可以通过 --conf XXX=Y 方式使用,其他参数以及介绍请参考 https://spark.apache.org/docs/latest/configuration.html
参数名称 建议值 解释
spark.master yarn 使用哪种资源调度器,一般使用yarn。本地调试可用local
spark.submit.deploy-mode cluster driver程序运行位置,调试可以用client,线上任务建议cluster(区别可参见 client和cluster的区别)。
spark.driver.cores <10 driver最大使用cpu(线程)数
spark.driver.memory <10g driver申请内存大小(如果需要使用collect算子将RDD的数据全部拉取到Driver上,那么要确保Driver的内存足够大否则会出现OOM)
spark.executor.memory <24g(10k/hope/tyrande集群 <48g) 单个executor申请堆内内存大小
spark.python.worker.memory spark.executor.memory/2 python开发的程序设置此值,java/scala开发的或者纯spark-sql程序使用默认值即可
spark.yarn.executor.memoryOverhead 4096 单个executor申请堆外内存大小
spark.executor.cores executor.memory的1/4到1/2 单个 executor最大并发task数
spark.executor.instances 数据大小(GB)x2/executor.memory executor数,JDSpark控制最大为500
spark.memory.fraction 默认0.6 executor mem中用于计算和存储的内存比例,越小OOM概率越低但执行速度越慢
spark.memory.storageFraction 默认0.5,计算和存储共用的内存中,存储所占内存最大比例。spark会动态调整不建议修改
spark.speculation false 推测执行机制默认为false(关闭),如果遇到作业偶尔卡住 可以尝试开启
spark.speculation.multiplier=2 --conf spark.speculation.quantile=0.9
spark.shuffle.service.enabled true 默认为false,但如果shuffle数据量比较大,或者频繁出现shufle fetch failed exception,打开此配置能在一定程度缓解
spark.default.parallelism num-executors x executor-cores的2-3倍 控制默认RDD的partition数,读取hdfs文件时partition数以blocksize和是否合并输入为准。Spark默认一个HDFS block对应一个task,如果task数量偏少的话,就会导致前面设置好的Executor的参数都前功尽弃。比如,无论你的Executor进程有多少个,内存和CPU有多大,但是task只有10个,那么90%的Executor进程可能根本就没有task执行,也就是浪费了资源
spark.sql.shuffle.partitions < 总数据量(GB) x 3 执行sql或sql类算子时shuffle分区数,默认是200,单数据量大时应提高此值。但次值过大,会导致产生很多空文件
spark.pyspark.python python2/python3/python3.5 指定pyspark使用的python版本(如果使用docker镜像,请先确认镜像里是否有对应版本,平台基础镜像只有python2)
spark.log.level info ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF,不区分大小写
spark.sql.hive.mergeFiles false 开启会自动合spark-sql产生的并小文件。
注意:在spark 2.1版本中此参数不能与spark.speculation同时设为true(只能二选一或者都关闭),否则有概率导致部分数据重复
spark.hadoop.jd.bdp.streaming.monitor.enable 默认值false 是否开启streaming作业batch积压告警功能,默认为false,可通过 --conf spark.hadoop.jd.bdp.streaming.monitor.enable=true 开启
spark.hadoop.jd.bdp.batch.threshold 默认值10 streaming作业batch积压告警阈值,默认值为10,用户可根据需求调整,例如:–conf spark.hadoop.jd.bdp.batch.threshold=20
spark.hadoop.jd.bdp.user.define.erps 默认使用平台配置的告警组 对于类似streaming作业batch积压等仅需用户关注的指标,用户可自定义告警组,例如:–conf spark.hadoop.jd.bdp.user.define.erps=“xiaobing|xiaoming”(注意:可配置多人,相邻erp用竖线|分隔)
spark.sql.tempudf.ignoreIfExists true(默认false) 是否加载所有hive udf(只支持spark-sql下使用,不支持spark-submit、pyspark)。(HiveTask里面已经打开,用户无需多余设置)
Spark默认使用jdk7,使用jdk8的话添加如下配置:
若只设置客户端jdk版本:
export JAVA_HOME=/software/servers/jdk1.8.0_121
若设置整个应用程序的jdk版本:
–conf spark.yarn.appMasterEnv.JAVA_HOME=/software/servers/jdk1.8.0_121
–conf spark.executorEnv.JAVA_HOME=/software/servers/jdk1.8.0_121
Spark使用各种python库请使用docker
DockerLinuxContainer的使用例子
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
--conf spark.yarn.appMasterEnv.yarn.nodemanager.container-executor.class=DockerLinuxContainer \
--conf spark.executorEnv.yarn.nodemanager.container-executor.class=DockerLinuxContainer \
--conf spark.yarn.appMasterEnv.yarn.nodemanager.docker-container-executor.image-name=bdp-docker.jd.com:5000/wise_algorithm:latest \
--conf spark.executorEnv.yarn.nodemanager.docker-container-executor.image-name=bdp-docker.jd.com:5000/wise_algorithm:latest \
$SPARK_HOME/examples/jars/spark-examples_2.11-2.1.0.jar \
10
只需要在之前提交spark的任务中加上
--conf spark.yarn.appMasterEnv.yarn.nodemanager.container-executor.class=DockerLinuxContainer \
--conf spark.executorEnv.yarn.nodemanager.container-executor.class=DockerLinuxContainer \
--conf spark.yarn.appMasterEnv.yarn.nodemanager.docker-container-executor.image-name=bdp-docker.jd.com:5000/wise_algorithm:latest \
--conf spark.executorEnv.yarn.nodemanager.docker-container-executor.image-name=bdp-docker.jd.com:5000/wise_algorithm:latest \
运行模式必须是yarn cluster(不支持 spark-shell /pyspark等交互式环境)
--master yarn \
--deploy-mode cluster \
其中bdp-docker.jd.com:5000/wise_algorithm:latest为镜像名称
构建自己的运行环境请参考: link