前言
以下是整理的Spark中的一些配置参数,1.6.0版本的官方文档请参考Spark Configuration。
Spark提供三个位置用来配置系统:
- (1)Spark属性:控制大部分的应用程序参数,可以用SparkConf对象或者Java系统属性设置
- (2)环境变量:可以通过每个节点的
conf/spark-env.sh
- 脚本设置。例如IP地址、端口等信息
- (3)日志配置:可以通过log4j.properties配置
Spark的属性
Spark属性控制大部分的应用程序设置,并且为每个应用程序分别配置它。这些属性可以直接在SparkConf上配置,然后传递给SparkContext
。SparkConf
允许你配置一些通用的属性(如master URL、应用程序名称等等)以及通过set()
方法设置的任意键值对。例如,我们可以用如下方式创建一个拥有两个线程的应用程序。
val sparkConf = new SparkConf()
.setMaster("local[4]")
.setAppName("TestSpark")
.set("spark.executor.memory", "2g")
val sparkContext = new SparkContext(conf)
一、动态加载Spark属性
在一些情况下,你可能想在SparkConf
中避免硬编码确定的配置。例如,你想用不同的master或者不同的内存数运行相同的应用程序。Spark允许你简单地创建一个空conf。
val sc = new SparkContext(new SparkConf())
然后我们可以在运行时设置变量:
spark-submit
Spark shell和spark-submit
工具支持两种方式动态加载配置。第一种方式是命令行选项,例如--master
,如上面shell显示的那样。spark-submit
可以接受任何Spark属性,用--conf
参数表示。但是那些参与Spark应用程序启动的属性要用特定的参数表示。运行./bin/spark-submit --help
将会显示选项的整个列表。bin/spark-submit
也会从conf/spark-defaults.conf
中读取配置选项,这个配置文件中,每一行都包含一对以空格
或者等号
分开的键和值。例如:
spark.master spark://5.6.7.8:7077
spark.executor.memory 512m
spark.eventLog.enabled true
spark.serializer org.apache.spark.serializer.KryoSerializer
任何标签指定的值或者在配置文件中的值将会传递给应用程序,并且通过SparkConf
合并这些值。在SparkConf
上设置的属性具有最高的优先级,其次是传递给spark-submit
或者spark-shell
的属性值,最后是spark-defaults.conf
文件中的属性值。
优先级顺序:
SparkConf > CLI > spark-defaults.conf
二、查看Spark属性
在http://<driver>:4040
上的应用程序Web UI在Environment
标签中列出了所有的Spark属性。这对你确保设置的属性的正确性是很有用的。注意:只有通过spark-defaults.conf, SparkConf以及命令行直接指定的值才会显示
。
对于其它的配置属性,我们可以认为程序用到了默认的值。
1、可用的属性
控制内部设置的大部分属性都有合理的默认值,一些最通用的选项设置如下:
应用程序属性
属性名称 | 默认 | 含义 |
| (没有) | 您的应用程序的名称。这将出现在用户界面和日志数据中。 |
| 1 | 用于驱动程序进程的核心数量,仅在集群模式下使用。 |
| 1g | 每个Spark动作(例如collect)的所有分区的序列化结果的总大小限制。应该至少有1M,或者0表示无限制。 如果总数超过这个限制,工作将会被中止。具有高限制可能会导致驱动程序内存不足错误 (取决于spark.driver.memory和JVM中对象的内存开销)。设置适当的限制可以保护驱动程序免于内存不足错误。 |
| 1g | 用于驱动程序进程的内存量,即SparkContext被初始化的地方。(例如 注意:在客户端模式下,不能 相反,请通过 |
| 1g | 每个执行程序进程使用的内存量(例如 |
| (没有) | 一个用逗号分隔的类实现的列表 这些类的实例将被创建并注册到Spark的监听器总线。如果一个类有一个接受SparkConf的单参数构造函数, 那么将会调用该构造函数;否则,将调用一个零参数的构造函数。如果没有找到有效的构造函数, 则SparkContext创建将失败并出现异常。 |
| / tmp目录 | 用于Spark中“scratch”空间的目录,包括映射输出文件和存储在磁盘上的RDD。 这应该在系统中的快速本地磁盘上。 它也可以是不同磁盘上多个目录的逗号分隔列表。注意:在Spark 1.0和更高版本中,将由群集管理器设置的SPARK_LOCAL_DIRS(Standalone,Mesos)或LOCAL_DIRS(YARN)环境变量覆盖。 |
| false | 当SparkContext启动时,将有效的SparkConf记录为INFO。 |
| (没 有) | 要连接到的群集管理器。查看允许的主URL的列表 。 |
还有许多配置就不一一举例,可以参考官方文档:
https://spark.apache.org/docs/1.6.0/configuration.html