7.3. Spark属性2

Spark UI

Property Name Default Meaning
spark.ui.port 4040 你的应用程序dashboard的端口。显示内存和工作量数据
spark.ui.retainedStages 1000 在垃圾回收之前,Spark UI和状态API记住的stage数
spark.ui.retainedJobs 1000 在垃圾回收之前,Spark UI和状态API记住的job数
spark.ui.killEnabled true 运行在Web UI中杀死stage和相应的job
spark.eventLog.enabled false 是否记录Spark的事件日志。这在应用程序完成后,重新构造Web UI是有用的
spark.eventLog.compress false 是否压缩事件日志。需要spark.eventLog.enabled为true
spark.eventLog.dir file:///tmp/spark-events Spark事件日志记录的基本目录。在这个基本目录下,Spark为每个应用程序创建一个子目录。各个应用程序记录日志到直到的目录。用户可能想设置这为统一的地点,像HDFS一样,所以历史文件可以通过历史服务器读取

压缩和序列化

Property Name Default Meaning
spark.broadcast.compress true 在发送广播变量之前是否压缩它
spark.rdd.compress true 是否压缩序列化的RDD分区。在花费一些额外的CPU时间的同时节省大量的空间
spark.io.compression.codec snappy 压缩诸如RDD分区、广播变量、shuffle输出等内部数据的编码解码器。默认情况下,Spark提供了三种选择:lz4, lzf和snappy。你也可以用完整的类名来制定。org.apache.spark.io.LZ4CompressionCodecorg.apache.spark.io.LZFCompressionCodecorg.apache.spark.io.SnappyCompressionCodec
spark.io.compression.snappy.block.size 32768 Snappy压缩中用到的块大小。降低这个块的大小也会降低shuffle内存使用率
spark.io.compression.lz4.block.size 32768 LZ4压缩中用到的块大小。降低这个块的大小也会降低shuffle内存使用率
spark.closure.serializer org.apache.spark.serializer.JavaSerializer 闭包用到的序列化类。目前只支持Java序列化器
spark.serializer.objectStreamReset 100 当用org.apache.spark.serializer.JavaSerializer序列化时,序列化器通过缓存对象防止写多余的数据,然而这会造成这些对象的垃圾回收停止。通过请求'reset',你从序列化器中flush这些信息并允许收集老的数据。为了关闭这个周期性的reset,你可以将值设为-1。默认情况下,每一百个对象reset一次
spark.kryo.referenceTracking true 当用Kryo序列化时,跟踪是否引用同一对象。如果你的对象图有环,这是必须的设置。如果他们包含相同对象的多个副本,这个设置对效率是有用的。如果你知道不在这两个场景,那么可以禁用它以提高效率
spark.kryo.registrationRequired false 是否需要注册为Kyro可用。如果设置为true,然后如果一个没有注册的类序列化,Kyro会抛出异常。如果设置为false,Kryo将会同时写每个对象和其非注册类名。写类名可能造成显著地性能瓶颈。
spark.kryoserializer.buffer.mb 0.064 Kyro序列化缓存的大小。这样worker上的每个核都有一个缓存。如果有需要,缓存会涨到spark.kryoserializer.buffer.max.mb设置的值那么大。
spark.kryoserializer.buffer.max.mb 64 Kryo序列化缓存允许的最大值。这个值必须大于你尝试序列化的对象

Networking

Property Name Default Meaning
spark.driver.host (local hostname) driver监听的主机名或者IP地址。这用于和executors以及独立的master通信
spark.driver.port (random) driver监听的接口。这用于和executors以及独立的master通信
spark.fileserver.port (random) driver的文件服务器监听的端口
spark.broadcast.port (random) driver的HTTP广播服务器监听的端口
spark.replClassServer.port (random) driver的HTTP类服务器监听的端口
spark.blockManager.port (random) 块管理器监听的端口。这些同时存在于driver和executors
spark.executor.port (random) executor监听的端口。用于与driver通信
spark.port.maxRetries 16 当绑定到一个端口,在放弃前重试的最大次数
spark.akka.frameSize 10 在"control plane"通信中允许的最大消息大小。如果你的任务需要发送大的结果到driver中,调大这个值
spark.akka.threads 4 通信的actor线程数。当driver有很多CPU核时,调大它是有用的
spark.akka.timeout 100 Spark节点之间的通信超时。单位是s
spark.akka.heartbeat.pauses 6000 This is set to a larger value to disable failure detector that comes inbuilt akka. It can be enabled again, if you plan to use this feature (Not recommended). Acceptable heart beat pause in seconds for akka. This can be used to control sensitivity to gc pauses. Tune this in combination ofspark.akka.heartbeat.interval and spark.akka.failure-detector.threshold if you need to.
spark.akka.failure-detector.threshold 300.0 This is set to a larger value to disable failure detector that comes inbuilt akka. It can be enabled again, if you plan to use this feature (Not recommended). This maps to akka'sakka.remote.transport-failure-detector.threshold. Tune this in combination of spark.akka.heartbeat.pauses and spark.akka.heartbeat.interval if you need to.
spark.akka.heartbeat.interval 1000 This is set to a larger value to disable failure detector that comes inbuilt akka. It can be enabled again, if you plan to use this feature (Not recommended). A larger interval value in seconds reduces network overhead and a smaller value ( ~ 1 s) might be more informative for akka's failure detector. Tune this in combination ofspark.akka.heartbeat.pauses and spark.akka.failure-detector.threshold if you need to. Only positive use case for using failure detector can be, a sensistive failure detector can help evict rogue executors really quick. However this is usually not the case as gc pauses and network lags are expected in a real Spark cluster. Apart from that enabling this leads to a lot of exchanges of heart beats between nodes leading to flooding the network with those.

Security

Property Name Default Meaning
spark.authenticate false 是否Spark验证其内部连接。如果不是运行在YARN上,请看spark.authenticate.secret
spark.authenticate.secret None 设置Spark两个组件之间的密匙验证。如果不是运行在YARN上,但是需要验证,这个选项必须设置
spark.core.connection.auth.wait.timeout 30 连接时等待验证的实际。单位为秒
spark.core.connection.ack.wait.timeout 60 连接等待回答的时间。单位为秒。为了避免不希望的超时,你可以设置更大的值
spark.ui.filters None 应用到Spark Web UI的用于过滤类名的逗号分隔的列表。过滤器必须是标准的javax servlet Filter。通过设置Java系统属性也可以指定每个过滤器的参数。spark.<class name of filter>.params='param1=value1,param2=value2'。例如-Dspark.ui.filters=com.test.filter1-Dspark.com.test.filter1.params='param1=foo,param2=testing'
spark.acls.enable false 是否开启Spark acls。如果开启了,它检查用户是否有权限去查看或修改job。 Note this requires the user to be known, so if the user comes across as null no checks are done。UI利用使用过滤器验证和设置用户
spark.ui.view.acls empty 逗号分隔的用户列表,列表中的用户有查看(view)Spark Web UI的权限。默认情况下,只有启动Spark job的用户有查看权限
spark.modify.acls empty 逗号分隔的用户列表,列表中的用户有修改Spark job的权限。默认情况下,只有启动Spark job的用户有修改权限
spark.admin.acls empty 逗号分隔的用户或者管理员列表,列表中的用户或管理员有查看和修改所有Spark job的权限。如果你运行在一个共享集群,有一组管理员或开发者帮助debug,这个选项有用

Spark Streaming

Property Name Default Meaning
spark.streaming.blockInterval 200 在这个时间间隔(ms)内,通过Spark Streaming receivers接收的数据在保存到Spark之前,chunk为数据块。推荐的最小值为50ms
spark.streaming.receiver.maxRate infinite 每秒钟每个receiver将接收的数据的最大记录数。有效的情况下,每个流将消耗至少这个数目的记录。设置这个配置为0或者-1将会不作限制
spark.streaming.receiver.writeAheadLogs.enable false Enable write ahead logs for receivers. All the input data received through receivers will be saved to write ahead logs that will allow it to be recovered after driver failures
spark.streaming.unpersist true 强制通过Spark Streaming生成并持久化的RDD自动从Spark内存中非持久化。通过Spark Streaming接收的原始输入数据也将清除。设置这个属性为false允许流应用程序访问原始数据和持久化RDD,因为它们没有被自动清除。但是它会造成更高的内存花费