应用配置
参数 默认值 说明 建议
spark.driver.maxResultSize 1g 对Spark每个action结果集大小的限制.。
spark.driver.memoryOverhead driverMemory * 0.10, with minimum of 384 为driver分配的堆外内存。支持on yarn和Kubernetes。
spark.executor.memoryOverhead executorMemory * 0.10, with minimum of 384 为executor分配的堆外内存。支持on yarn和Kubernetes。
spark.extraListeners none 注册监听器,需要实现SparkListener
spark.local.dir /tmp 用于存储map输出文件和RDD缓存文件。
spark.logConf false 将SparkConf 的有效配置作为INFO进行保存
spark.log.callerContext none 在yarn上运行时应用程序信息会写入Yarn RM log/HDFS audit log
[编辑]运行环境
参数 默认值 说明 建议
spark.driver.extraClassPath none 追加到driver类路径中的附加类路径。
spark.driver.extraJavaOptions none 传递给driver的JVM选项字符串。
spark.driver.extraLibraryPath none 指定启动driver的JVM时用到的库路径。
spark.driver.userClassPathFirst false (实验性)当在driver中加载类时,是否用户添加的jar比Spark自己的jar优先级高。
spark.executor.extraClassPath none 追加到executor类路径中的附加类路径。
spark.executor.extraJavaOptions none 传递给executor的JVM选项字符串。
spark.executor.extraLibraryPath none 指定启动executor的JVM时用到的库路径。
spark.executor.logs.rolling.maxRetainedFiles none 设置被系统保留的最近滚动日志文件的数量。
spark.executor.logs.rolling.enableCompression fales 允许executor日志压缩。
spark.executor.logs.rolling.maxSize none executor日志的最大滚动大小。
spark.executor.logs.rolling.strategy none 设置executor日志的滚动(rolling)策略。可以配置为time和size。
spark.executor.logs.rolling.time.interval daily executor日志滚动的时间间隔。
spark.executor.userClassPathFirst false (实验性)当在executor中加载类时,是否用户添加的jar比Spark自己的jar优先级高。
spark.executorEnv.[EnvironmentVariableName] none 通过EnvironmentVariableName添加指定的环境变量到executor进程
spark.redaction.regex password 通过正则表达式来决定driver和executor中哪些Spark配置属性和环境变量包含敏感信息。
spark.python.profile false 在Python worker中开启profiling。
spark.python.profile.dump none driver退出前保存分析结果的dump文件的目录。
spark.python.worker.memory 512m 在聚合期间,每个python worker进程使用的内存数。
spark.python.worker.reuse true 是否重用python worker。
spark.files 逗号分隔的文件列表将放置在每个executor的工作目录中。
spark.submit.pyFiles 逗号分隔的.zip,.egg或.py文件列表,放置在Python应用程序的PYTHONPATH上。
spark.jars 将逗号分隔的文件列表放置在每个executor的工作目录中。
spark.jars.packages 包含在driver和executor类路径中的jar的Maven坐标的逗号分隔列表。
spark.jars.excludes 以逗号分隔的groupId:artifactId列表,在解析spark.jars.packages中提供的依赖关系时排除,以避免依赖冲突。
spark.jars.ivy 指定Ivy用户目录的路径,用于本地Ivy缓存和包文件 spark.jars.packages。
spark.jars.ivySettings ivy设置文件的路径,用于自定义使用spark.jars.packages 指定的jar而不是内置的默认值。
spark.jars.repositories 通过–packages或spark.jars.packages指定的maven库来搜索jar。
spark.pyspark.driver.python Python二进制可执行程序,用于driver中的Pyspark。
spark.pyspark.python Python二进制可执行程序,用于driver和executor中的Pyspark。
[编辑]Shuffle行为
参数 默认值 说明 建议
spark.reducer.maxSizeInFlight 48m 设置shuffle read task的buffer缓冲大小。
spark.reducer.maxReqsInFlight Int.MaxValue 限制远程机器拉取本机器文件块的请求数
spark.reducer.maxBlocksInFlightPerAddress Int.MaxValue 限制了每个主机每次reduce可以被多少台远程主机拉取文件块
spark.maxRemoteBlockSizeFetchToMem Long.MaxValue 限制从给定主机端口每个reduce task获取的远程块的数量。
spark.shuffle.compress true 是否压缩map输出文件
spark.shuffle.file.buffer 32k 在内存输出流中 每个shuffle文件占用内存大小
spark.shuffle.io.maxRetries 3 shuffle read task从shuffle write task所在节点拉取属于自己的数据时最大重试次数。(Netty only)
spark.shuffle.io.numConnectionsPerPeer 1 节点之间取数据的连接数。(Netty only)
spark.shuffle.io.preferDirectBufs true 堆缓冲区用于减少在 shuffle 和缓存块传输中的垃圾回收。(Netty only)
spark.shuffle.io.retryWait 5s shuffle read task从shuffle write task所在节点拉取属于自己的数据时每次重试的时间。(Netty only)
spark.shuffle.service.enabled false 启用外部shuffle 服务。
spark.shuffle.service.port 7337 指定外部shuffle服务端口。
spark.shuffle.service.index.cache.size 100m 高速缓存条目限制在字节中指定的内存占用。
spark.shuffle.maxChunksBeingTransferred Long.MAX_VALUE 允许在随机服务上同时传输的最大块数。
spark.shuffle.sort.bypassMergeThreshold 200 当ShuffleManager为SortShuffleManager时,如果shuffle read task的数量小于这个阈值(默认是200),则shuffle write过程中不会进行排序操作,而是直接按照未经优化的HashShuffleManager的方式去写数据,但是最后会将每个task产生的所有临时磁盘文件都合并成一个文件,并会创建单独的索引文件。
spark.shuffle.spill.compress true 是否压缩在随机播放期间溢出的数据
spark.shuffle.accurateBlockThreshold 100 * 1024 * 1024 以字节为单位的阈值,高于该阈值可准确记录HighlyCompressedMapStatus中随机块的大小。
spark.shuffle.registration.timeout 5000 注册到外部shuffle服务的超时时间(ms)
spark.shuffle.registration.maxAttempts 3 未能注册外部shuffl服务时重试次数。
spark.io.encryption.enabled false 启用IO加密。
spark.io.encryption.keySizeBits 128 IO加密密钥大小。(bits)
spark.io.encryption.keygen.algorithm HmacSHA1 生成IO加密密钥时使用的算法。
[编辑]Spark UI
参数 默认值 说明 建议
spark.eventLog.logBlockUpdates.enabled false 是否保存每个块的更新。
spark.eventLog.compress false 是否压缩eventlog。
spark.eventLog.dir file:///tmp/spark-events 保存eventlog的目录。
spark.eventLog.enabled false 是否保存Spark events,用于应用完成后重建Web UI。
spark.eventLog.overwrite false 是否覆盖任何现有文件。
spark.eventLog.buffer.kb 100K 写入输出流时的缓存大小。
spark.ui.enabled true 是否启动spark web ui。
spark.ui.killEnabled true 是否允许从spark web ui上kill job 和stages。
spark.ui.port 4040 指定spark web ui 端口。
spark.ui.retainedJobs 1000 在回收之前,spark ui 保存的job数量。
spark.ui.retainedStages 1000 在回收之前,spark ui保存的stage数量。
spark.ui.retainedTasks 100000 在回收之前,spark ui保存的task数量。
spark.ui.reverseProxy false 启用Spark Master作为工作程序和应用程序UI的反向代理。
spark.ui.reverseProxyUrl 指定运行代理的URL。
spark.ui.showConsoleProgress true 在控制台中显示进度条。
spark.worker.ui.retainedExecutors 1000 在回收之前,Spark UI保存的完成Executor数量。
spark.worker.ui.retainedDrivers 1000 在回收之前,Spark UI保存的完成Driver数量。
spark.sql.ui.retainedExecutions 1000 在回收之前,Spark UI保存的完成的Execution数量。
spark.streaming.ui.retainedBatches 1000 在回收之前,Spark UI保存的完成的batch数量。
spark.ui.retainedDeadExecutors 100 在回收之前,Spark UI保存的dead executors数量。
[编辑]压缩&序列化
参数 默认值 说明 建议
spark.broadcast.compress true 广播变量前是否会先进行压缩。
spark.io.compression.codec lz4 压缩RDD数据、日志、shuffle输出等的压缩格式。
spark.io.compression.lz4.blockSize 32K 使用lz4压缩时,每个数据块大小。
spark.io.compression.snappy.blockSize 32K 使用snappy压缩时,每个数据块大小。
spark.io.compression.zstd.level 1 zstd压缩级别。
spark.io.compression.zstd.bufferSize 32K 使用zstd时的缓存大小。
spark.kryo.classesToRegister none 向Kryo注册自定义的的类,类名间用逗号分隔。
spark.kryo.referenceTracking true 跟踪对同一个对象的引用情况。
spark.kryo.registrationRequired false 是否需要在Kryo登记注册。
spark.kryo.registrator none 向Kryo注册自定义的的类,类名间用逗号分隔。
spark.kryo.unsafe false 是否启用不安全的Kryo序列化,可提高IO速度。
spark.kryoserializer.buffer.max 64m 序列化最大缓存。
spark.kryoserializer.buffer 64m 序列化缓存大小。
spark.rdd.compress false 是否压缩序列化RDD分区。
spark.serializer org.apache.spark.serializer.JavaSerializer 序列化对象使用的类。 默认的序列化较慢,建议使用org.apache.spark.Serializer.
spark.serializer.objectStreamReset 100 默认保存的JavaSerializer序列化缓存对象。
[编辑]内存管理
参数 默认值 说明 建议
spark.memory.fraction 0.6 Execution和Storage内存在JVM堆中所占的百分比。
spark.memory.storageFraction 0.5 设定Storage内存大小范围,该值越大,Execution内存越小。
spark.memory.offHeap.enabled false 是否使用堆外内存。
spark.memory.offHeap.size 0 堆外内存大小。
spark.memory.useLegacyMode false 是否启用Spark 1.5及之前使用的旧式内存管理模式。
spark.storage.replication.proactive false 针对失败的executor,主动去cache 有关的RDD中的数据。
spark.cleaner.periodicGC.interval 30min 控制触发gc的频率。
spark.cleaner.referenceTracking true 是否进行context cleaning。
spark.cleaner.referenceTracking.blocking true 清理线程是否应该阻止清理任务。
spark.cleaner.referenceTracking.blocking.shuffle false 清理线程是否应该阻止shuffle的清理任务。
spark.cleaner.referenceTracking.cleanCheckpoints false 清理线程是否应该清理依赖超出范围的checkpoint文件。
[编辑]Execution
参数 默认值 说明 建议
spark.broadcast.blockSize 4m TorrentBroadcastFactory每个分片大小。
spark.executor.heartbeatInterval 10s executor报告driver的心跳间隔。
spark.files.fetchTimeout 60s 获取文件的超时时间。
spark.files.useFetchCache true executor之间共享缓存。
spark.files.overwrite false SparkContext.addFile()添加的文件已经存在,且内容不匹配的情况下,是否覆盖。
spark.hadoop.validateOutputSpecs true 在saveAsHadoopFile及其变体的时候,验证输出(如检查输出文件是否已经存在)。
spark.storage.memoryMapThreshold 2m spark从磁盘上读取一个块后,映射到内存块的最小大小。
spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version 1 文件输出提交者算法版本,有效算法版本号。
[编辑]网络
参数 默认值 说明 建议
spark.rpc.message.maxSize 128 “control plane” 通讯中所允许的最大消息大小(MB)。
spark.blockManager.port random block manager监听端口。
spark.driver.blockManager.port value of spark.blockManager.port blockManager端口。
spark.driver.bindAddress value of spark.driver.host 主机名或IP地址绑定侦听sockets的位置。
spark.network.timeout 120s 所有网络交互的默认超时。
spark.port.maxRetries 16 绑定一个端口的最大重试次数。
spark.rpc.numRetries 3 RPC任务最大重试次数。
spark.rpc.retry.wait 3s RPC请求操作重试前等待时间。
spark.rpc.askTimeout spark.network.timeout RPC请求操作超时等待时间。
spark.rpc.lookupTimeout 120s RPC远程端点查询超时。
[编辑]调度
参数 默认值 说明 建议
spark.locality.wait 3s 在本地节点启动等待最长时间。
spark.locality.wait.node spark.locality.wait 单独定义同一节点数据本地性任务等待时间。
spark.locality.wait.process spark.locality.wait 单独定义同一进程数据本地性任务等待时间。
spark.locality.wait.rack spark.locality.wait 单独定义同一机架数据本地性等待时间。
spark.scheduler.maxRegisteredResourcesWaitingTime 30s 在执行前最大等待申请资源的时间。
spark.scheduler.minRegisteredResourcesRatio 0.8 on yarn 实际注册的资源数占预期需要的资源数的比例。
spark.scheduler.mode FIFO 调度模式。
spark.scheduler.revive.interval 1s worker恢复的间隔时间。
spark.scheduler.listenerbus.eventqueue.capacity 10000 spark事件监听队列容量,默认10000 。
spark.blacklist.enabled false 是否开启黑名单机制。
spark.blacklist.timeout 1h 对于被加入 application 黑名单的 executor/节点 ,多长时间后无条件的移出黑名单以运行新任务。
spark.blacklist.task.maxTaskAttemptsPerExecutor 1 对于同一个 task 在某个 executor 中的失败重试阈值。
spark.blacklist.task.maxTaskAttemptsPerNode 2 对于同一个 task 在某个节点上的失败重试阈值。
spark.blacklist.stage.maxFailedTasksPerExecutor 2 一个 stage 中,不同的 task 在同一个 executor 的失败阈值。
spark.blacklist.stage.maxFailedExecutorsPerNode 2 一个 stage 中,不同的 executor 加入黑名单的阈值。
spark.blacklist.application.maxFailedTasksPerExecutor 2 在同一个 executor 中,不同的 task的失败阈值 。
spark.blacklist.application.maxFailedExecutorsPerNode 2 在一个节点中,不同 executor 加入 application 黑名单的阈值。
spark.blacklist.killBlacklistedExecutors false 如果开启该配置,spark 会自动关闭并重启加入黑名单的 executor,如果整个节点都加入了黑名单,则该节点上的所有 executor 都会被关闭。
spark.blacklist.application.fetchFailure.enabled false 如果开启该配置,当发生 fetch failure时,立即将该 executor 加入到黑名单。要是开启了 external shuffle service,整个节点都会被加入黑名单。
spark.speculation false 是否启动推测执行任务。
spark.speculation.interval 100ms Spark检查慢任务的时间间隔。
spark.speculation.multiplier 1.5 比任务平均执行时间慢多少倍的任务会被认为是慢任务。
spark.speculation.quantile 0.75 对于一个stage来说,完成多少百分比才开始检查慢任务,并启动推测执行任务。
spark.task.maxFailures 4 单个任务最大失败次数。
spark.task.reaper.enabled false 赋予spark监控有权限去kill那些失效的task
spark.task.reaper.pollingInterval 10s 轮询被kill掉的task的时间间隔,如果还在running,就会打warn日志。
spark.task.reaper.threadDump true 线程回收是是否产生日志。
spark.task.reaper.killTimeout -1 当一个被kill的task过了多久还在running,就会把那个executor给kill掉。
spark.stage.maxConsecutiveAttempts 4 在终止前,一个stage连续尝试次数。
[编辑]动态分配
参数 默认值 说明 建议
spark.dynamicAllocation.enabled false 是否启用动态资源分配特性。
spark.dynamicAllocation.executorIdleTimeout 60s 动态分配特性启用后,空闲时间超过该配置时间的执行器都会被移除。
spark.dynamicAllocation.cachedExecutorIdleTimeout infinity 动态分配特性启用后,包含缓存数据的Executor如果空闲时间超过该配置设置的时间,则被移除。
spark.dynamicAllocation.initialExecutors spark.dynamicAllocation.minExecutors 动态分配开启后,Executors的初始个数。
spark.dynamicAllocation.maxExecutors infinity 动态分配开启后,Executor个数的上限。
spark.dynamicAllocation.minExecutors 0 动态分配开启后,Executor个数的下限。
spark.dynamicAllocation.schedulerBacklogTimeout 1s 动态分配启用后,如果有任务积压的持续时间长于该配置设置的时间,则申请新的执行器。
spark.dynamicAllocation.sustainedSchedulerBacklogTimeout schedulerBacklogTimeout 和spark.dynamicAllocation.schedulerBacklogTimeout类似,不过只适用于后续的Executors请求。
[编辑]Spark Streaming
参数 默认值 说明 建议
spark.streaming.backpressure.enabled false 是否启用Spark Streaming 的内部反压机制。
spark.streaming.backpressure.initialRate not set 启用反压机制后每个接收器接受第一批数据的初始最大接受速率。
spark.streaming.blockInterval 200ms 在将数据保存到Spark之前,Spark Streaming接收器组装数据块的时间间隔。
spark.streaming.receiver.maxRate not set 接收速度的最大速率。
spark.streaming.receiver.writeAheadLog.enable false 是否启用接收器预写日志。
spark.streaming.unpersist true 是否强制Spark Streaming 自动从内存中清理掉所生成并持久化的RDD。
spark.streaming.stopGracefullyOnShutdown false 是否优雅停止。
spark.streaming.kafka.maxRatePerPartition not set 从kafka分区读取数据的最大速率。 只对Kafka direct stream API有效。
spark.streaming.kafka.maxRetries 1 dirver连续最大重试次数,driver会找到每个kafka分许的最新offset。 只对Kafka direct stream API有效。
spark.streaming.ui.retainedBatches 1000 Spark Streaming UI 以及 status API 中保留的最大批次个数。
spark.streaming.driver.writeAheadLog.closeFileAfterWrite false 在driver端写WAL后是否关闭File。
spark.streaming.receiver.writeAheadLog.closeFileAfterWrite false 在receiver端写WAL后是否关闭File。
[编辑]GraphX
参数 默认值 说明 建议
spark.graphx.pregel.checkpointInterval -1 Pregel中图形和消息的检查点间隔。
[编辑] Spark on Yarn
参数 默认值 说明 建议
spark.yarn.am.memory 512m yarn client模式下AM内存。
spark.yarn.am.cores 1 yarnclient模式下AM内核数目。
spark.yarn.am.waitTime 100s yarn cluster模式下,AM等待SparkContext初始化时间。
spark.yarn.submit.file.replication HDFS默认副本数 应用上传文件到HDFS的副本数量。
spark.yarn.stagingDir Current user’s home directory in the filesystem 提交应用程序时使用的暂存目录。
spark.yarn.preserve.staging.files false 当任务结束后是否保存Spark jar、app jar等文件。
spark.yarn.scheduler.heartbeat.interval-ms 3000 master与RM的心跳间隔。
spark.yarn.scheduler.initial-allocation.interval 200ms 当存在未决容器分配请求时,Spark application master 心跳到 YARN ResourceManager 的初始间隔。
spark.yarn.max.executor.failures numExecutors * 2, with minimum of 3 executor失败多少次就标记次应用运行失败。
spark.yarn.historyServer.address none .historyServer地址。
spark.yarn.dist.archives none 将要解压到每个executor工作目录下的压缩包用逗号分隔。
spark.yarn.dist.files none 将要分发在每个executor工作目录下的文件,用逗号分隔。
spark.yarn.dist.jars none 将要分发到每个executor工作目录下的jar,用逗号分隔。
spark.yarn.dist.forceDownloadSchemes none 在添加到YARN分布式缓存之前,文件将被下载到本地磁盘的逗号分隔列表。
spark.executor.instances 2 静态的executor数量。
spark.yarn.am.memoryOverhead AM memory * 0.10, with minimum of 384 每个driver可以分配的堆外内存。
spark.yarn.queue defaule 指定队列。
spark.yarn.jars none 指定jar包地址。
spark.yarn.archive none 指定文件夹来上传jar包。 地址最后不要加 / 。eg:"hdfs://XXXX/jars”。
spark.yarn.access.hadoopFileSystems none Spark安全的访问Hadoop文件系统,用逗号分隔。
spark.yarn.appMasterEnv.[EnvironmentVariableName] none 将EnvironmentVariableName指定的环境变量添加到在YARN上启动的Application Master进程。
spark.yarn.containerLauncherMaxThreads 25 pplication master能用来启动executor container的最大线程数量。
spark.yarn.am.extraJavaOptions none application master的jvm参数。
spark.yarn.am.extraLibraryPath none application master的额外库路径。
spark.yarn.maxAppAttempts yarn.resourcemanager.am.max-attempts in YARN 将要提交应用程序的最大的尝试次数。
spark.yarn.am.attemptFailuresValidityInterval none 定义AM失败跟踪校验间隔。
spark.yarn.executor.failuresValidityInterval none 定义executor失败跟踪校验间隔。
spark.yarn.submit.waitAppCompletion true 在YARN cluster模式下,控制是否客户端等到Spark应用结束后再退出。
spark.yarn.am.nodeLabelExpression none 一个YARN节点标签表达式(node label expression),以此来限制AM可以被调度到哪些节点上执行。 只有Hadoop 2.6+才能支持节点标签表达式,所以如果用其他版本运行,这个属性将被忽略。
spark.yarn.executor.nodeLabelExpression none 一个YARN节点标签表达式(node label expression),以此来限制executor可以被调度到哪些节点上启动。 只有Hadoop 2.6+才能支持节点标签表达式,所以如果在其他版本上运行时,这个属性将被忽略。
spark.yarn.tags none 逗号分隔的字符串,传递YARN应用tags。
spark.yarn.keytab none 认证文件keytab的全路径。
spark.yarn.config.gatewayPath none 某些路径,可能在网关主机上能正常访问(Spark应用启动的地方),而在其他节点上的访问方式(路径)可能不同。对于这样的路径,需要本属性配合 spark.yarn.config.replacementPath组合使用,对于支持异构配置的集群,必须配置好这两个值,Spark才能正确地启动远程进程。
spark.yarn.config.replacementPath none 见spark.yarn.config.gatewayPath。
spark.security.credentials.${service}.enabled true 在启用安全性时是否获取服务凭据。
spark.yarn.rolledLog.includePattern none Java Regex 过滤与定义的包含模式匹配的日志文件,这些日志文件将以滚动的方式进行聚合。
spark.yarn.rolledLog.excludePattern none Java Regex 过滤与定义的排除模式匹配的日志文件,并且这些日志文件将不会以滚动的方式进行聚合。