Spark参数详解 (Spark1.6)
参考文档:Spark官网
在Spark的web UI在“Environment”选项卡中列出Spark属性。这是一个很有用的地方,可以检查以确保属性设置正确。注意,只有通过spark-defaults.conf, SparkConf, 或者 command line配置过的属性才会出现 。对于所有其他配置属性,控制内部设置的大多数属性具有合理的默认值,在没有额外配置的额情况下,可以假定使用默认值。
应用级别的参数
参数名称 |
默认值 |
释义 |
注释 |
spark.app.name |
none |
应用程序的名称。这将出现在UI和日志数据中 |
|
spark.driver.cores |
1 |
用于驱动进程的内核数,仅在集群模式下使用 |
|
spark.driver.maxResultSize |
1g |
每个Spark动作(例如collect)的所有分区序列化结果的总大小限制。应该是至少1M,或者是0。如果作业的总大小超过此限制,则将中止作业。 |
有一个高的限制可能会在驱动程序(取决于spark.driver.memory 和 JVM中对象的内存开销)中导致内存不足错误。内存和JVM中对象的内存开销)。设置适当的限制可以保护驱动程序免受内存不足的错误。 |
spark.driver.memory |
1g |
用于驱动进程的内存数量,即初始化SparkContext的地方。(例如1 g, 2 g)。 |
注意:在客户端模式下,这个配置不能在应用程序中通过SparkConf直接设置,因为驱动程序JVM已经在此时启动了。相反,请通过——驱动程序内存命令行选项或在默认属性文件中设置它。 |
spark.executor.memory |
1g |
每个执行程序executor要使用的内存量(例如2g、8g)。 |
|
spark.extraListeners |
none |
实现SparkListener的类的逗号分隔列表;在初始化SparkContext时,这些类的实例将被创建并注册到Spark的侦听器总线。 |
这个没看懂~ |
spark.local.dir |
/tmp |
用于在Spark中“scratch”空间的目录,包括存储在磁盘上的映射输出文件和rdd。这应该在您系统中的一个快速本地磁盘上。它也可以是不同磁盘上多个目录的逗号分隔列表。 |
注意:在Spark 1.0及以后版本中,这将由SPARK_LOCAL_DIRS(Standalone, Mesos)或LOCAL_DIRS (YARN) 环境变量覆盖。 |
spark.logConf |
false |
在启动SparkContext时,将有效的SparkConf记录为信息。 |
|
spark.master |
none |
要连接的集群管理器。 |
|
除此之外,以下属性也可用,在某些情况下可能有用: |
|
|
|
运行时环境相关参数
参数名称 |
默认值 |
释义 |
注释 |
spark.driver.extraClassPath |
none |
在驱动程序的类路径之前添加额外的类路径条目。 |
注意:在客户端模式下,这个配置不能在应用程序中通过SparkConf直接设置,因为驱动程序JVM已经在此时启动了。通过 --driver-class-path或在默认属性文件中配置。这参数么得用过~ |
spark.driver.extraJavaOptions |
none |
一串额外的JVM选项传递给驱动程序。例如,GC设置或其他日志记录。 |
在客户端模式下,这个配置不能在应用程序中通过SparkConf直接设置,因为驱动程序JVM已经在此时启动了,可以通过 --driver-java-options或配置文件里面配置,这参数么得用过~ |
spark.driver.extraLibraryPath |
none |
设置启动驱动程序JVM时要使用的特殊库路径。 |
在客户端模式下,这个配置不能在应用程序中通过SparkConf直接设置,因为驱动程序JVM已经在此时启动了。可以通过 --driver-library-path 或配置文件里面配置,这参数么得用过~ |
spark.driver.userClassPathFirst |
false |
(实验)在驱动程序中加载类时,是否将用户添加的jar优先于Spark自己的jar。 |
此特性可用于缓解Spark的依赖项与用户依赖项之间的冲突。这是目前的一个实验特性。这只在集群模式下使用。这参数么得用过~,基本打包spark相关的包都已经去掉了,预防针冲突,好像新的版本可以用了,下次确认下。 |
spark.executor.extraClassPath |
none |
附加的类路径条目,以作为执行器类路径的前缀。 |
这主要是为了向后兼容旧版的Spark而存在的。用户通常不需要设置这个选项。这参数么得用过~ |
spark.executor.extraJavaOptions |
none |
要传递给执行器的额外JVM选项字符串。例如,GC设置或其他日志记录。 |
这参数么得用过~ |
spark.executor.extraLibraryPath |
none |
设置启动执行器JVM时要使用的特殊库路径。 |
这参数么得用过~ |
spark.executor.logs.rolling.maxRetainedFiles |
none |
设置系统将保留的最新滚动日志文件的数量。旧的日志文件将被删除。默认情况下禁用。 |
这参数么得用过~ |
spark.executor.logs.rolling.maxSize |
none |
设置执行程序日志将被滚动的文件的最大大小。默认情况下禁用滚动。 |
这参数么得用过~ |
spark.executor.logs.rolling.strategy |
none |
设置执行器日志的滚动策略。默认情况下,它是禁用的。它可以设置为“时间”(基于时间的滚动)或“大小”(基于大小的滚动) |
对于“time”,使用spark.executor.log . roll.time .interval来设置滚动间隔。对于“size”,请使用spark.executor.log .rolling.size。设置滚动的最大文件大小。 |
spark.executor.logs.rolling.time.interval |
daily |
设置执行器日志将被滚动的时间间隔。默认情况下禁用滚动 |
有效值为每日、小时、分钟或以秒为单位的任何间隔( daily, hourly, minutely or any interval in seconds) |
spark.executor.userClassPathFirst |
false |
功能与spark.driver.userClassPathFirst相似,但是作用于executor |
这参数么得用过~ |
spark.executorEnv.[EnvironmentVariableName] |
none |
将EnvironmentVariableName 指定的环境变量添加到执行程序进程中。 |
用户可以指定多个环境变量来设置多个环境变量。 |
Shuffle操作相关参数
参数名称 |
默认值 |
释义 |
注释 |
spark.reducer.maxSizeInFlight |
48m |
从每个reduce任务同时获取的映射输出的最大大小。 |
因为每个输出都需要我们创建一个缓冲区来接收它,所以每个reduce任务的内存开销都是固定的,所以除非您有大量的内存,否则请保持较小。 |
spark.shuffle.compress |
true |
是否压缩映射输出文件。一般来说是个好主意。 |
压缩将使用spark.io.compression.codec。 |
spark.shuffle.file.buffer |
32k |
每个shuffle文件输出流的内存缓冲区大小。 |
这些缓冲区减少了在创建shuffle文件时磁盘查找和系统调用的数量。 |
spark.shuffle.io.maxRetries |
3 |
(Netty only)如果设置为非零值,则会自动重试由于io相关异常而失败的获取。 |
这种重试逻辑有助于在面对长时间GC暂停或短暂的网络连接问题时稳定大型shuffle操作。 |
spark.shuffle.io.numConnectionsPerPeer |
1 |
主机之间的连接被重用数量 |
对于拥有许多硬盘和少量主机的集群,这可能导致并发性不足,无法使所有磁盘饱和,因此用户可能会考虑增加这个值。,以减少大型集群的连接累积。 |
spark.shuffle.io.preferDirectBufs |
true |
(仅适用于Netty)堆外缓冲区用于减少shuffle和cache 块传输期间的垃圾收集。 |
对于堆外内存受到严格限制的环境,用户可能希望关闭这个选项,以强制Netty的所有分配都处于堆上。 |
spark.shuffle.io.retryWait |
5s |
(Netty only)两次读取之间等待的时间。 |
默认情况下,重试导致的最大延迟为15秒,计算方法为maxRetries * retryWait。 |
spark.shuffle.manager |
sort |
用于shuffle数据的实现。有两种实现可用:sort 和 hash. |
基于排序的shuffle内存效率更高,从1.2开始就是默认选项。 |
spark.shuffle.service.enabled |
false |
启用外部shuffle服务。该服务保存了由executors 编写的shuffle文件,以便可以安全地删除executors 。 |
spark.dynamicAllocation.enabled 必须设为"true",必须设置外部shuffle服务才能启用它。详情查看动态分配配置和设置文档 |
spark.shuffle.service.port |
7337 |
运行外部shuffle服务的端口。 |
|
spark.shuffle.sort.bypassMergeThreshold |
200 |
(高级)在基于排序的shuffle manager中,如果没有映射端聚合且最多有次参数这么多的reduce分区,避免合并排序数据。 |
|
spark.shuffle.spill.compress |
true |
是否要压缩在shuffle过程中溢出的数据。压缩将使用spark.io.compression.codec。 |
默认即可~ |
Spark UI相关参数
参数名称 |
默认值 |
释义 |
注释 |
spark.eventLog.compress |
false |
是否压缩已记录的事件 |
spark.eventLog.enabled 为"true" |
spark.eventLog.dir |
file:///tmp/spark-events |
spark.eventLog.enabled 为"true",记录Spark事件的基本目录 |
在这个基本目录中,Spark为每个应用程序创建一个子目录,并在这个目录中记录特定于应用程序的事件。用户可能希望将其设置为一个统一的位置,比如一个HDFS目录,以便历史服务器可以读取历史文件。 |
spark.eventLog.enabled |
false |
是否记录Spark事件 |
对于应用程序完成后重构Web UI非常有用。 |
spark.ui.killEnabled |
true |
允许从web ui中删除阶段和相应的作业。 |
|
spark.ui.port |
4040 |
应用程序页面的端口,页面显示内存和工作负载数据。 |
|
spark.ui.retainedJobs |
1000 |
在垃圾收集之前,Spark UI和status APIs记住了多少作业。 |
|
spark.ui.retainedStages |
1000 |
在垃圾收集之前,Spark UI和status APIs记住了多少个阶段。 |
|
spark.worker.ui.retainedExecutors |
1000 |
在垃圾收集之前,Spark UI和status APIs记住了多少已完成的执行器。 |
|
spark.worker.ui.retainedDrivers |
1000 |
在垃圾收集之前,Spark UI和status APIs记住了多少已完成的驱动程序。 |
|
spark.sql.ui.retainedExecutions |
1000 |
在垃圾收集之前,Spark UI和status APIs记录执行了多少次。 |
|
spark.streaming.ui.retainedBatches |
1000 |
在垃圾收集之前,Spark UI和status APIs要记住多少个已完成的批处理。 |
|
压缩和序列化相关参数
参数名称 |
默认值 |
释义 |
注释 |
spark.broadcast.compress |
true |
是否在发送广播变量之前压缩它们。 |
一般来说是个好主意。 |
spark.closure.serializer |
org.apache.spark.serializer.JavaSerializer |
用于闭包的序列化器类。 |
目前只支持Java序列化器。 |
spark.io.compression.codec |
snappy |
用于压缩的编解码器 lz4、lzf、 snappy.。 |
可指定编解码器,例如。org.apache.spark.io.LZ4CompressionCodec, org.apache.spark.io.LZFCompressionCodec, and org.apache.spark.io.SnappyCompressionCodec. |
spark.io.compression.lz4.blockSize |
32k |
在使用LZ4压缩编解码器的情况下,用于LZ4压缩的块大小。 |
当使用LZ4时,降低这个块的大小也会降低洗牌内存的使用。 |
spark.io.compression.snappy.blockSize |
32k |
在使用Snappy压缩编解码器的情况下,用于Snappy压缩的块大小。 |
当使用Snappy时,降低这个块的大小也会降低洗牌内存的使用。 |
spark.kryo.classesToRegister |
none |
如果使用Kryo序列化,请提供一个以逗号分隔的自定义类名列表,以便向Kryo注册。 |
有关更多细节,请参阅调优指南。 |
spark.kryo.referenceTracking |
true (false when using Spark SQL Thrift Server) |
是否在使用Kryo序列化数据时跟踪对同一对象的引用. |
如果对象图具有循环,这是必要的,如果对象图包含同一对象的多个副本,这对于提高效率非常有用。如果您知道情况并非如此,可以禁用它来提高性能。 |
spark.kryo.registrationRequired |
spark.kryo.registrationRequired |
是否需要向Kryo注册。 |
如果设置为“true”,如果未注册的类被序列化,Kryo将抛出异常。如果设置为false(默认值),Kryo将与每个对象一起写入未注册的类名。编写类名会导致显著的性能开销,因此启用此选项可以严格确保用户在注册时没有遗漏类。 |
spark.kryo.registrator |
none |
如果使用Kryo序列化,请用Kryo设置这个类,以便注册自定义类。 |
如果需要以自定义方式注册类,例如指定自定义字段序列化器,则此属性非常有用。否则的话,spark。kryo。classestoregister更简单。它应该被设置为扩展KryoRegistrator的类。有关更多细节,请参阅调优指南。 |
spark.kryoserializer.buffer.max |
64m |
Kryo序列化缓冲区的允许最大值。它必须大于您试图序列化的任何对象。 |
如果您在Kryo中得到一个"buffer limit exceeded" 异常,请增加这个值。 |
spark.kryoserializer.buffer |
64k |
Kryo的序列化缓冲区的初始大小。 |
请注意,每个worker上的每个核心都有一个缓冲区。如果需要,这个缓冲区将增长为spark.kryoserializer.buffer.max。 |
spark.rdd.compress |
false |
是否压缩序列化的RDD分区(例如StorageLevel.MEMORY_ONLY_SER)。 |
可以节省大量空间的代价是一些额外的CPU时间。 |
spark.serializer |
org.apache.spark.serializer.JavaSerializer |
序列化将通过网络发送或需要以序列化形式缓存的对象的类 |
Java序列化的默认值适用于任何可序列化的Java对象,但是速度非常慢。 |
|
使用Spark SQL Thrift Server时org.apache.spark.serializer.KryoSerializer |
|
所以我们建议使用org.apache.spark.serializer。在需要速度时配置Kryo序列化器。可以是org.apache.spark.Serializer的任何子类。 |
spark.serializer.objectStreamReset |
100 |
序列化时使用org.apache.spark.serializer.JavaSerializer,序列化器缓存对象以防止写入冗余数据,但是这会停止这些对象的垃圾收集。 |
通过调用'reset',您可以从序列化器中刷新该信息,并允许收集旧对象。要关闭这个周期复位设置为-1。默认情况下,它将每100个对象重置序列化器。 |
本文是我在对spark调优过程中,发现有很多参数没用过甚至没见过,本着学习的心态整理了一份参数说明,此为第一部分,后续的会尽快更新!!! |
|
|
|
转载请注明出处~~~ |
|
|
|