- 首页
- 作品
- Spark 编程指南
- 7.2. Spark的属性1
7.2. Spark的属性1
控制内部设置的大部分属性都有合理的默认值,一些最通用的选项设置如下:
应用程序属性
Property Name |
Default |
Meaning |
spark.app.name |
(none) |
你的应用程序的名字。这将在UI和日志数据中出现 |
spark.master |
(none) |
集群管理器连接的地方 |
spark.executor.memory |
512m |
每个executor进程使用的内存数。和JVM内存串拥有相同的格式(如512m,2g) |
spark.driver.memory |
512m |
driver进程使用的内存数 |
spark.driver.maxResultSize |
1g |
每个Spark action(如collect)所有分区的序列化结果的总大小限制。设置的值应该不小于1m,0代表没有限制。如果总大小超过这个限制,工作将会终止。大的限制值可能导致driver出现内存溢出错误(依赖于spark.driver.memory和JVM中对象的内存消耗)。设置合理的限制,可以避免出现内存溢出错误。 |
spark.serializer |
org.apache.spark.serializer.JavaSerializer |
序列化对象使用的类。默认的Java序列化类可以序列化任何可序列化的Java对象但是它很慢。所有我们建议用org.apache.spark.serializer.KryoSerializer |
spark.kryo.classesToRegister |
(none) |
如果你用Kryo序列化,给定的用逗号分隔的自定义类名列表表示要注册的类 |
spark.kryo.registrator |
(none) |
如果你用Kryo序列化,设置这个类去注册你的自定义类。如果你需要用自定义的方式注册你的类,那么这个属性是有用的。否则spark.kryo.classesToRegister 会更简单。它应该设置一个继承自KryoRegistrator的类 |
spark.local.dir |
/tmp |
Spark中暂存空间的使用目录。在Spark1.0以及更高的版本中,这个属性被SPARK_LOCAL_DIRS(Standalone, Mesos)和LOCAL_DIRS(YARN)环境变量覆盖。 |
spark.logConf |
false |
当SparkContext启动时,将有效的SparkConf记录为INFO。 |
运行环境
Property Name |
Default |
Meaning |
spark.executor.extraJavaOptions |
(none) |
传递给executors的JVM选项字符串。例如GC设置或者其它日志设置。注意,在这个选项中设置Spark属性或者堆大小是不合法的。Spark属性需要用SparkConf对象或者spark-submit 脚本用到的spark-defaults.conf 文件设置。堆内存可以通过spark.executor.memory 设置 |
spark.executor.extraClassPath |
(none) |
附加到executors的classpath的额外的classpath实体。这个设置存在的主要目的是Spark与旧版本的向后兼容问题。用户一般不用设置这个选项 |
spark.executor.extraLibraryPath |
(none) |
指定启动executor的JVM时用到的库路径 |
spark.executor.logs.rolling.strategy |
(none) |
设置executor日志的滚动(rolling)策略。默认情况下没有开启。可以配置为time (基于时间的滚动)和size (基于大小的滚动)。对于time ,用spark.executor.logs.rolling.time.interval 设置滚动间隔;对于size ,用spark.executor.logs.rolling.size.maxBytes 设置最大的滚动大小 |
spark.executor.logs.rolling.time.interval |
daily |
executor日志滚动的时间间隔。默认情况下没有开启。合法的值是daily , hourly , minutely 以及任意的秒。 |
spark.executor.logs.rolling.size.maxBytes |
(none) |
executor日志的最大滚动大小。默认情况下没有开启。值设置为字节 |
spark.executor.logs.rolling.maxRetainedFiles |
(none) |
设置被系统保留的最近滚动日志文件的数量。更老的日志文件将被删除。默认没有开启。 |
spark.files.userClassPathFirst |
false |
(实验性)当在Executors中加载类时,是否用户添加的jar比Spark自己的jar优先级高。这个属性可以降低Spark依赖和用户依赖的冲突。它现在还是一个实验性的特征。 |
spark.python.worker.memory |
512m |
在聚合期间,每个python worker进程使用的内存数。在聚合期间,如果内存超过了这个限制,它将会将数据塞进磁盘中 |
spark.python.profile |
false |
在Python worker中开启profiling。通过sc.show_profiles() 展示分析结果。或者在driver退出前展示分析结果。可以通过sc.dump_profiles(path) 将结果dump到磁盘中。如果一些分析结果已经手动展示,那么在driver退出前,它们再不会自动展示 |
spark.python.profile.dump |
(none) |
driver退出前保存分析结果的dump文件的目录。每个RDD都会分别dump一个文件。可以通过ptats.Stats() 加载这些文件。如果指定了这个属性,分析结果不会自动展示 |
spark.python.worker.reuse |
true |
是否重用python worker。如果是,它将使用固定数量的Python workers,而不需要为每个任务fork()一个Python进程。如果有一个非常大的广播,这个设置将非常有用。因为,广播不需要为每个任务从JVM到Python worker传递一次 |
spark.executorEnv.[EnvironmentVariableName] |
(none) |
通过EnvironmentVariableName 添加指定的环境变量到executor进程。用户可以指定多个EnvironmentVariableName ,设置多个环境变量 |
spark.mesos.executor.home |
driver side SPARK_HOME |
设置安装在Mesos的executor上的Spark的目录。默认情况下,executors将使用driver的Spark本地(home)目录,这个目录对它们不可见。注意,如果没有通过spark.executor.uri 指定Spark的二进制包,这个设置才起作用 |
spark.mesos.executor.memoryOverhead |
executor memory * 0.07, 最小384m |
这个值是spark.executor.memory 的补充。它用来计算mesos任务的总内存。另外,有一个7%的硬编码设置。最后的值将选择spark.mesos.executor.memoryOverhead 或者spark.executor.memory 的7%二者之间的大者 |
Shuffle行为(Behavior)
Property Name |
Default |
Meaning |
spark.shuffle.consolidateFiles |
false |
如果设置为"true",在shuffle期间,合并的中间文件将会被创建。创建更少的文件可以提供文件系统的shuffle的效率。这些shuffle都伴随着大量递归任务。当用ext4和dfs文件系统时,推荐设置为"true"。在ext3中,因为文件系统的限制,这个选项可能机器(大于8核)降低效率 |
spark.shuffle.spill |
true |
如果设置为"true",通过将多出的数据写入磁盘来限制内存数。通过spark.shuffle.memoryFraction 来指定spilling的阈值 |
spark.shuffle.spill.compress |
true |
在shuffle时,是否将spilling的数据压缩。压缩算法通过spark.io.compression.codec 指定。 |
spark.shuffle.memoryFraction |
0.2 |
如果spark.shuffle.spill 为“true”,shuffle中聚合和合并组操作使用的Java堆内存占总内存的比重。在任何时候,shuffles使用的所有内存内maps的集合大小都受这个限制的约束。超过这个限制,spilling数据将会保存到磁盘上。如果spilling太过频繁,考虑增大这个值 |
spark.shuffle.compress |
true |
是否压缩map操作的输出文件。一般情况下,这是一个好的选择。 |
spark.shuffle.file.buffer.kb |
32 |
每个shuffle文件输出流内存内缓存的大小,单位是kb。这个缓存减少了创建只中间shuffle文件中磁盘搜索和系统访问的数量 |
spark.reducer.maxMbInFlight |
48 |
从递归任务中同时获取的map输出数据的最大大小(mb)。因为每一个输出都需要我们创建一个缓存用来接收,这个设置代表每个任务固定的内存上限,所以除非你有更大的内存,将其设置小一点 |
spark.shuffle.manager |
sort |
它的实现用于shuffle数据。有两种可用的实现:sort 和hash 。基于sort的shuffle有更高的内存使用率 |
spark.shuffle.sort.bypassMergeThreshold |
200 |
(Advanced) In the sort-based shuffle manager, avoid merge-sorting data if there is no map-side aggregation and there are at most this many reduce partitions |
spark.shuffle.blockTransferService |
Netty |
实现用来在executor直接传递shuffle和缓存块。有两种可用的实现:netty 和nio 。基于Netty的块传递在具有相同的效率情况下更简单 |