Spark 常用配置总结

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

 

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SparkSpark Streaming的依赖包总结: 1. Spark依赖包: - Spark Core:包含Spark的核心组件,如RDD、SparkContext等。 - Spark SQL:提供了一种基于结构化数据的编程接口,支持SQL查询和DataFrame API。 - Spark Streaming:提供了一种实时数据处理的编程接口,支持数据流的处理和分析。 - Spark MLlib:提供了一些常用的机器学习算法和工具。 - Spark GraphX:提供了一些图计算的算法和工具。 2. Spark Streaming依赖包: - Spark Streaming Core:包含Spark Streaming的核心组件,如DStream、Receiver等。 - Spark Streaming Kafka:提供了与Kafka集成的工具和API。 - Spark Streaming Flume:提供了与Flume集成的工具和API。 - Spark Streaming Twitter:提供了与Twitter集成的工具和API。 胖包和瘦包的配置: - 胖包:将所有的依赖包都打包到一个jar文件中,方便部署和使用,但是文件较大。 - 瘦包:只打包必要的依赖包,其他依赖包需要在运行时从外部获取,文件较小,但是需要额外的配置。 在Spark中,可以通过以下两种方式来配置胖包和瘦包: 1. 使用sbt或maven等构建工具,在打包时指定依赖包的范围,可以选择打包所有依赖包或只打包必要的依赖包。 2. 在Spark配置文件中,可以通过spark.driver.extraClassPath和spark.executor.extraClassPath参数来指定额外的依赖包路径,这些依赖包将会被添加到Spark的classpath中。如果使用瘦包,需要将所有的依赖包放到指定的路径下,以便Spark能够找到它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值