Spark参数详解 一(Spark1.6)
2019-01-05 本文已影响2人
利伊奥克儿
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调优过程中,发现有很多参数没用过甚至没见过,本着学习的心态整理了一份参数说明,此为第一部分,后续的会尽快更新!!!
转载请注明出处~~~