分类 | 属性名称 | 实践 | 默认值 | 作用 | 中文含义 |
queue | default | 执行队列 | |||
spark.driver.extraClassPath | --class | (none) | 包名 | 附加到驱动程序的类路径之前的类路径条目。 注意:在客户端模式下,这个配置不能SparkConf 直接在你的应用程序中设置,因为此时驱动程序 JVM 已经启动。相反,请通过--driver-class-path命令行选项或在您的默认属性文件中进行设置。 |
|
Application Properties | spark.app.name | (none) | 应用程序名称,也可在程序内设置 | 您的应用程序的名称。这将出现在 UI 和日志数据中。 | |
spark.master | --master | (none) | 设置主节点 URL 的参数 支持: local: 本地机器。 spark://host:port:远程Spark 单机集群,需要指定端口。 yarn:yarn 集群 |
要连接的集群管理器,查看允许的主URL的列表。 | |
spark.submit.deployMode | cluster | (none) | "允许选择是否在本地(使用 client 选项)启动 Spark 驱动程序, 或者在集群内(使用 cluster 选项)的其中一台工作机器上启动。" |
Spark驱动程序的部署模式,“客户端”或“集群”,这意味着在集群内部的一个节点上本地(“客户端”)或远程(“集群”)启动驱动程序。 | |
spark.driver.maxResultSize | 5g | 1g | 代表每个Spark的action(例如collect)的结果总大小的限制,默认为1g。 如果总大小超过此限制,作业将被中止,如果该值较高可能会导致Driver发生OOM,因此用户需要根据作业实际情况设置适当值。 |
每个 Spark 操作(例如收集)的所有分区的序列化结果的总大小限制(以字节为单位)。应至少为 1M, 0 表示无限制。如果总大小超过此限制,作业将被中止。具有上限可能会导致驱动程序中的内存不足错误(取决于 spark.driver.memory 和 JVM 中对象的内存开销)。设置适当的限制可以保护驱动程序免受内存不足错误的影响。 | |
spark.driver.memory | 16g | 1g | 管理多少内存,换言之就是为当前应用分配了多少内存。 | 用于驱动程序进程的内存量,即初始化 SparkContext 的位置,与具有大小单位后缀(“k”、“m”、“g”或“t”)的 JVM 内存字符串格式相同(例如512m,2g) . 注意:在客户端模式下,这个配置不能SparkConf 直接在你的应用程序中设置,因为此时驱动程序 JVM 已经启动。相反,请通过--driver-memory命令行选项或在您的默认属性文件中进行设置。 |
|
spark.executor.memory | 25g | 1g | 设置executor执行时所需的memory 每个节点上占用的内存。每一个节点可使用内存 表示分配给每个executor的内存,默认是1G。 |
每个执行程序进程使用的内存量,格式与带有大小单位后缀(“k”、“m”、“g”或“t”)(例如512m,2g)的 JVM 内存字符串相同。 | |
spark.executor.memoryOverheadFactor | 10240 | executorMemory * spark.executor。 memoryOverheadFactor,最少384个 |
设置堆外内存的参数 | 除非另有说明,否则每个执行程序进程要分配的额外内存量,以 MiB 为单位。这是占 VM 开销、实习字符串、其他本机开销等的内存。这往往会随着执行程序的大小(通常为 6-10%)而增长。YARN 和 Kubernetes 目前支持此选项。 注意:额外内存包括 PySpark 执行程序内存(spark.executor.pyspark.memory未配置时)和运行在同一容器中的其他非执行程序进程使用的内存。容器到运行 executor 的最大内存大小由 、 和spark.executor.memoryOverhead之 spark.executor.memory和spark.memory.offHeap.size决定 spark.executor.pyspark.memory。 |
|
Spark SQL | spark.sql.shuffle.partitions | 2000 | 200 | Spark sql默认shuffle分区个数为200,参数由 spark.sql.shuffle.partitions控制,此参数只能控制Spark sql、DataFrame、 DataSet分区个数。不能控制RDD分区个数 |
为联接或聚合打乱数据时要使用的默认分区数。注意:对于结构化流,在从同一检查点位置重新启动查询之间无法更改此配置。 |
Dynamic Allocation | spark.dynamicAllocation.enabled | TRUE | FALSE | 是否开启动态资源配置,根据工作负载来衡量是否应该增加或减少executor,默认false | 是否使用动态资源分配,它根据工作负载向上和向下缩放在此应用程序中注册的执行器数量。有关更多详细信息,请参阅 此处的说明。 这需要spark.shuffle.service.enabled或被 spark.dynamicAllocation.shuffleTracking.enabled设置。以下配置也相关: spark.dynamicAllocation.minExecutors、spark.dynamicAllocation.maxExecutors和 spark.dynamicAllocation.initialExecutors spark.dynamicAllocation.executorAllocationRatio |
spark.dynamicAllocation.initialExecutors | 4 | spark. dynamicAllocation. minExecutors |
动态分配初始executor个数默认值=spark.dynamicAllocation.minExecutors | 如果启用了动态分配,则要运行的初始执行程序数。 如果设置了`--num-executors`(或`spark.executor.instances`)并且大于此值,它将用作执行器的初始数量。 |
|
spark.dynamicAllocation.maxExecutors | 80 | infinity(无穷) | 最大Executro数目 | 如果启用了动态分配,则执行器数量的上限。 | |
spark.dynamicAllocation.minExecutors | 10 | 0 | 最少的Excutor数目 | 如果启用了动态分配,则执行者数量的下限。 | |
Execution Behavior | spark.executor.cores | 5 | 1 在 YARN 模式下,worker 上的所有可用核心在独立和 Mesos 粗粒度模式下。 | 表示分配给每个executor的core数即核数,在spark on yarn模式下默认是1 | 每个执行器上使用的核心数。在独立模式和 Mesos 粗粒度模式下,有关更多详细信息,请参阅 此说明。 |
spark.default.parallelism | 对于 和 之类的分布式 shuffle 操作reduceByKey,join父 RDD 中的最大分区数。对于parallelize 没有父 RDD 的操作,它取决于集群管理器: 本地模式:本地机器上的核心数 Mesos 细粒度模式:8 其他:所有执行器节点上的核心总数或2,以较大者为准 |
RDD任务的默认并行度,Spark中所谓的并行度是指RDD中的分区数,即RDD中的Task数。 当初始RDD没有设置分区数(numPartitions或numSlice)时,则分区数采用spark.default.parallelism的取值。 |
当用户未设置时,由join、reduceByKey和并行化等转换返回的rdd中的默认分区数。 | ||
Compression and Serialization | spark.kryoserializer.buffer.max | 128m | 64m | 设置Kryo序列化缓冲区大小 |
除非另有说明,否则 Kryo 序列化缓冲区的最大允许大小,以 MiB 为单位。这必须大于您尝试序列化的任何对象,并且必须小于 2048m。如果您在 Kryo 中遇到“超出缓冲区限制”异常,请增加此值。 |
Networking | spark.rpc.askTimeout | 500 | spark.network.timeout | spark 默认 ask 请求操作超时时间 | RPC 请求操作在超时前等待的持续时间。 |
spark.network.maxRemoteBlockSizeFetchToMem | 10m | 200m | 这个参数作用是在reduce task读取map task block时放入内存中的最大值; 默认是没有限制全放内存 |
当块的大小高于此阈值(以字节为单位)时,远程块将被提取到磁盘。这是为了避免一个巨大的请求占用过多的内存。请注意,此配置将影响 shuffle 提取和块管理器远程块提取。对于启用了外部 shuffle 服务的用户,此功能仅在外部 shuffle 服务至少为 2.3.0 时才能使用。 | |
Shuffle Behavior | spark.shuffle.accurateBlockThreshold | 10m | 100 * 1024 * 1024 | 以字节为单位的阈值,高于该阈值可准确记录HighlyCompressedMapStatus中Shuffle块的大小。这有助于通过避免在获取shuffle块时低估shuffle块大小来防止OOM。 | 以字节为单位的阈值,在该阈值之上,HighlyCompressedMapStatus 中的 shuffle 块的大小被准确记录。这有助于通过避免在获取 shuffle 块时低估 shuffle 块大小来防止 OOM。 |
Scheduling | spark.cores.max | (not set) | 这个参数决定了在Standalone和Mesos模式下,一个Spark应用程序所能申请的CPU Core的数量。这个参数对Yarn模式不起作用,YARN模式下,资源由Yarn统一调度管理,一个应用启动时所申请的CPU资源的数量由另外两个直接配置Executor的数量和每个Executor中core数量的参数决定。在yarn模式下可以直接通过参数--num-executors指定该应用所需的executor数量 | 当以“粗粒度”共享模式在独立部署集群或 Mesos 集群上运行时,从整个集群(而不是从每台机器)请求应用程序的最大 CPU 内核数。如果未设置,默认将 在 Spark 的独立集群管理器上,或在 Mesos 上无限(所有可用内核)。 spark.deploy.defaultCores | |
spark.scheduler.listenerbus.eventqueue.capacity | 20000 | 10000 | spark事件监听队列容量,默认10000,必须为正值,增加可能会消耗更多内存 | 事件队列的默认容量。Spark 将首先尝试使用 `spark.scheduler.listenerbus.eventqueue.queueName.capacity` 指定的容量来初始化事件队列。如果未配置,Spark 将使用此配置指定的默认容量。请注意,容量必须大于 0。如果侦听器事件被丢弃,请考虑增加值(例如 20000)。增加此值可能会导致驱动程序使用更多内存。 |