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个对象重置序列化器。
转载自:https://www.cnblogs.com/lillcol/p/10209048.html