Spark参数详解 一(Spark1.6)

2021年11月24日 阅读数:4
这篇文章主要向大家介绍Spark参数详解 一(Spark1.6),主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

Spark参数详解 (Spark1.6)

参考文档:Spark官网 在Spark的web UI在“Environment”选项卡中列出Spark属性。这是一个颇有用的地方,能够检查以确保属性设置正确。注意,只有经过spark-defaults.conf, SparkConf, 或者 command line配置过的属性才会出现 。对于全部其余配置属性,控制内部设置的大多数属性具备合理的默认值,在没有额外配置的额状况下,能够假定使用默认值。html

应用级别的参数

参数名称 默认值 释义 注释
spark.app.name none 应用程序的名称。这将出如今UI和日志数据中
spark.driver.cores 1 用于驱动进程的内核数,仅在集群模式下使用
spark.driver.maxResultSize 1g 每一个Spark动做(例如collect)的全部分区序列化结果的总大小限制。应该是至少1M,或者是0。若是做业的总大小超过此限制,则将停止做业。 有一个高的限制可能会在驱动程序(取决于spark.driver.memoryJVM中对象的内存开销)中致使内存不足错误。内存和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 用于压缩的编解码器 lz四、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调优过程当中,发现有不少参数没用过甚至没见过,本着学习的心态整理了一份参数说明,此为第一部分,后续的会尽快更新!!!
转载请注明出处~~~