spark.app.name
意义:
The name of your application. This will appear in the UI and in log data.
你的应用程序的名称。这将在用户界面(UI)和日志数据中显示。
作用:
1. 应用程序标识
appName 用于标识当前运行的Spark应用程序。这个名称在Spark的Web UI、日志数据、监控工具等多个地方都会显示,使得用户能够轻松区分和管理不同的Spark应用程序。2. 管理和监控
通过为Spark应用程序设置明确的appName,管理员和开发者可以更加方便地管理和监控应用程序的状态。在Spark的Web UI中,用户可以根据应用程序名称快速找到对应的应用程序,并查看其执行进度、资源使用情况、作业执行情况等关键信息。3. 日志记录
在日志数据中,appName 的存在有助于快速定位和分析问题。当Spark应用程序出现问题时,开发者可以通过日志数据中的appName 快速找到相关日志,从而进行问题排查和解决。
spark.driver.cores
意义:
Number of cores to use for the driver process, only in cluster mode.
在集群模式下,用于Driver进程的核心数。
默认值:
1
spark.driver.maxResultSize
意义:
这个配置参数限定了每个Spark操作(如collect)中所有分区序列化结果的总大小(以字节为单位)。这个限制应该至少为1MB,或者设置为0表示无限制。如果总大小超过了这个限制,那么作业将会被中止。设置一个较高的限制可能会导致Driver出现内存溢出错误(这取决于spark.driver.memory的设置以及JVM中对象的内存开销)。设置一个适当的限制可以保护Driver免受内存溢出错误的影响。
默认值:
1g
我的理解:
结果集大小限制:spark.driver.maxResultSize用于限制从Executor节点收集回Driver节点的结果数据总大小。这个限制有助于防止Driver节点因为处理过大的结果集而导致内存不足。
内存溢出风险:如果spark.driver.maxResultSize设置得过大,而spark.driver.memory没有相应增加,那么当结果集大小接近或超过Driver内存限制时,可能会增加Driver节点内存溢出的风险。
合理设置:为了避免这种情况,建议根据应用程序的实际需求和预期结果集大小来合理设置spark.driver.maxResultSize,并确保spark.driver.memory足够大以容纳这些结果数据以及其他必要的元数据和执行计划等。
spark.driver.memory
意义:
Driver进程所使用的内存量,与JVM内存字符串的格式相同,需要带有大小单位后缀("k"、"m"、"g"或"t"),这些单位分别代表千字节、兆字节、g字节和t字节(例如,512m表示512兆字节,2g表示2吉字节)。
注意:在客户端模式下,这个配置不应该直接通过你的应用程序中的SparkConf来设置,因为此时Driver JVM已经启动。相反,你应该通过命令行选项
--driver-memory
来设置这个值,或者在你的默认属性文件中进行设置。
默认值:
1g
spark.driver.memoryOverhead
意义:
在集群模式下,每个Driver进程所分配的非堆内存量,除非另有说明,否则以MiB(兆字节)为单位。这部分内存用于诸如虚拟机开销、驻留字符串、其他本地开销等。这通常随着容器大小的增加而增长(通常占容器大小的6-10%)。此选项目前支持YARN、Mesos和Kubernetes。
注意:非堆内存包括堆外内存(当spark.memory.offHeap.enabled=true时)以及由其他Driver进程(例如,与PySpark Driver一起运行的Python进程)所使用的内存,以及在同一容器中运行的其他非Driver进程所使用的内存。运行Driver的容器的最大内存大小由spark.driver.memoryOverhead和spark.driver.memory的总和决定。
默认值:
driverMemory * 0.10, with minimum of 384
我的理解:
通过配置这一项可以避免Driver因为堆外内存不足而导致OOM(内存溢出)问题。
spark.executor.memory
意义:
每个Executor进程所使用的内存量,与JVM内存字符串的格式相同,需要带有大小单位后缀("k"、"m"、"g"或"t"),这些单位分别代表千字节、兆字节、吉字节和太字节(例如,512m表示512兆字节,2g表示2吉字节)。
默认值:
1g
spark.executor.cores
意义:
The number of cores to use on each executor.
默认值:
1 in YARN mode, all the available cores on the worker in standalone and Mesos coarse-grained modes.
standalone模式和Mesos粗粒度模式下:spark.executor.cores 是工作节点上Executor进程可以使用的CPU核心数(注意,不是全部核心,而是配置给Executor的部分)。
spark.executor.memoryOverhead
意义:
每个Executor进程要分配的额外内存量,除非另有说明,否则以MiB为单位。这部分内存用于诸如虚拟机开销、驻留字符串、其他本地开销等。随着Executor大小的增加,这部分内存需求往往会增长(通常是6-10%)。目前,此选项在YARN和Kubernetes上受支持。
注意:额外内存包括PySpark Executor的内存(当spark.executor.pyspark.memory未配置时)以及在同一容器中运行的其他非Executor进程所使用的内存。运行Executor的容器的最大内存大小由spark.executor.memoryOverhead、spark.executor.memory、spark.memory.offHeap.size和spark.executor.pyspark.memory的和决定。
默认值:
executorMemory * 0.10, with minimum of 384
spark.executor.pyspark.memory
意义:
每个Executor中分配给PySpark的内存量,除非另有说明,否则以MiB为单位。如果设置了此值,那么Executor中PySpark的内存使用将被限制在此范围内。如果没有设置,Spark将不会限制Python的内存使用,而是由应用程序自行避免超过与其他非JVM进程共享的开销内存空间。当PySpark在YARN或Kubernetes上运行时,此内存将被添加到Executor的资源请求中。
注意:此功能依赖于Python的resource模块;因此,其行为和限制是继承自该模块的。例如,Windows不支持资源限制,而在MacOS上实际资源并不会被限制。
默认值:
not set
spark.cores.max
意义:
在独立部署集群或“粗粒度”共享模式下的Mesos集群上运行时,可以从整个集群(而不是每台机器)为应用程序请求的最大CPU核心数。如果未设置,则在Spark的独立集群管理器上,默认值为spark.deploy.defaultCores,在Mesos上为无限(所有可用核心)。
默认值:
not set
spark.locality.wait
意义:
在放弃并在一个本地性较差的节点上启动任务之前,等待启动一个数据本地任务的时间有多长。同样的等待时间将用于逐步通过多个本地性级别(进程本地、节点本地、机架本地,然后是任意)。也可以通过设置spark.locality.wait.node等来定制每个级别的等待时间。如果你的任务很长且本地性较差,你应该增加这个设置,但默认设置通常效果很好。
默认值:
3s
spark.task.maxFailures
意义:
在放弃作业之前,任何特定任务失败的次数。不同任务之间的失败总数不会导致作业失败;特定任务必须达到这个尝试次数后才算失败。该值应大于等于1。允许的重试次数 = 该值 - 1。
默认值:
4(允许重试三次)
spark.master
意义:
The cluster manager to connect to. See the list of allowed master URL's.
默认值:
(none)
spark.network.timeout
意义:
所有网络交互的默认超时时间。如果未配置spark.storage.blockManagerHeartbeatTimeoutMs、spark.shuffle.io.connectionTimeout、spark.rpc.askTimeout或spark.rpc.lookupTimeout,则将使用此配置
默认值:
spark.scheduler.mode
意义:
提交到同一SparkContext的作业之间的调度模式。可以设置为FAIR,以使用公平共享而不是将一个作业排队在另一个作业之后。这对于多用户服务很有用。
默认值:
FIFO
spark.dynamicAllocation.enabled
意义:
是否使用动态资源分配,它可以根据工作负载增加或减少注册到此应用程序的执行器数量。有关详细信息,请参阅此处的描述。
这需要设置spark.shuffle.service.enabled或spark.dynamicAllocation.shuffleTracking.enabled。以下配置也与此相关:spark.dynamicAllocation.minExecutors、spark.dynamicAllocation.maxExecutors、spark.dynamicAllocation.initialExecutors和spark.dynamicAllocation.executorAllocationRatio。
默认值:
false
spark.dynamicAllocation.initialExecutors
意义:
如果启用了动态分配,则要运行的初始执行器数量。
如果设置了
--num-executors
(或spark.executor.instances
)并且其值大于此值,则将其用作初始执行器数量。
默认值:
spark.dynamicAllocation.minExecutors
spark.dynamicAllocation.minExecutors
意义:
Lower bound for the number of executors if dynamic allocation is enabled.
默认值:
0
spark.dynamicAllocation.maxExecutors
意义:
Upper bound for the number of executors if dynamic allocation is enabled.
默认值:
infinity
spark.default.parallelism
意义:
在用户未设置的情况下,由join、reduceByKey和parallelize等转换返回的RDD中的默认分区数。
默认值:
对于reduceByKey和join等分布式shuffle操作,分区数的默认值是父RDD中的最大分区数。对于没有父RDD的操作(如parallelize),分区数取决于集群管理器:本地模式下是本地机器的核心数,Mesos细粒度模式下是8,其他情况下是所有执行器节点上的总核心数或2,取两者中的较大值。当用户未设置时,join、reduceByKey和parallelize等转换返回的RDD中的默认分区数即为此值。
spark.shuffle.service.enabled
意义:
启用外部shuffle服务。此服务会保留执行器写入的shuffle文件,以便可以安全地移除执行器。必须设置外部shuffle服务才能启用它。有关详细信息,请参阅动态分配配置和设置文档。
默认值:
false
spark.shuffle.compress
意义:
是否压缩map输出文件。通常这是一个好主意。压缩将使用spark.io.compression.codec。
默认值:
true
spark.reducer.maxSizeInFlight
意义:
从每个reduce任务中同时获取的map输出的最大大小,除非另有指定,否则以MiB为单位。由于每个输出都需要我们创建一个缓冲区来接收它,这代表了每个reduce任务的固定内存开销,因此除非你有大量内存,否则请保持它较小。
默认值:
48m
spark.speculation
意义:
如果设置为“true”,则对任务执行推测执行。这意味着如果阶段中的一个或多个任务运行缓慢,它们将被重新启动。
默认值:
false
spark.speculation.interval
意义:
How often Spark will check for tasks to speculate.
默认值:
100ms
spark.speculation.quantile
意义:
Fraction of tasks which must be complete before speculation is enabled for a particular stage.
默认值:
0.75