[Spark参数配置]--1.6.0版本的参数配置

前言

   以下是整理的Spark中的一些配置参数,1.6.0版本的官方文档请参考Spark Configuration。

Spark提供三个位置用来配置系统:

  • (1)Spark属性:控制大部分的应用程序参数,可以用SparkConf对象或者Java系统属性设置
  • (2)环境变量:可以通过每个节点的conf/spark-env.sh脚本设置。例如IP地址、端口等信息
  • (3)日志配置:可以通过log4j.properties配置

Spark的属性

   Spark属性控制大部分的应用程序设置,并且为每个应用程序分别配置它。这些属性可以直接在SparkConf上配置,然后传递给SparkContextSparkConf 允许你配置一些通用的属性(如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 --name "My app" --master local[4] --conf spark.shuffle.spill=false --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" spark-examples-1.6.0-cdh5.8.0-hadoop2.6.0-cdh5.8.0.jar

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://:4040上的应用程序Web UI在Environment标签中列出了所有的Spark属性。这对你确保设置的属性的正确性是很有用的。

注意:只有通过spark-defaults.conf, SparkConf以及命令行直接指定的值才会显示

对于其它的配置属性,我们可以认为程序用到了默认的值。

1、可用的属性

控制内部设置的大部分属性都有合理的默认值,一些最通用的选项设置如下:

应用程序属性

属性名称 默认 含义
spark.app.name      
                                               
                        (没有) 您的应用程序的名称。这将出现在用户界面和日志数据中。
spark.driver.cores 1 用于驱动程序进程的核心数量,仅在集群模式下使用。
spark.driver.maxResultSize 1g 每个Spark动作(例如collect)的所有分区的序列化结果的总大小限制。应该至少有1M,或者0表示无限制。
如果总数超过这个限制,工作将会被中止。具有高限制可能会导致驱动程序内存不足错误
(取决于spark.driver.memory和JVM中对象的内存开销)。
设置适当的限制可以保护驱动程序免于内存不足错误。
spark.driver.memory 1g 用于驱动程序进程的内存量,即SparkContext被初始化的地方。(例如1g2g)。 
注意:在客户端模式下,不能SparkConf 直接在应用程序中设置此配置,因为驱动程序JVM已经在此时启动。
相反,请通过
--driver-memory命令行选项或在您的默认属性文件中进行设置。
spark.executor.memory 1g 每个执行程序进程使用的内存量(例如2g8g)。
spark.extraListeners (没有) 一个用逗号分隔的类实现的列表SparkListener当初始化SparkContext时,
这些类的实例将被创建并注册到Spark的监听器总线。
如果一个类有一个接受SparkConf的单参数构造函数,
那么将会调用该构造函数;
否则,将调用一个零参数的构造函数。如果没有找到有效的构造函数,
则SparkContext创建将失败并出现异常。
spark.local.dir / tmp目录 用于Spark中“scratch”空间的目录,包括映射输出文件和存储在磁盘上的RDD。
这应该在系统中的快速本地磁盘上。
它也可以是不同磁盘上多个目录的逗号分隔列表。注意:在Spark 1.0和更高版本中,将由群集管理器设置的SPARK_LOCAL_DIRS(Standalone,Mesos)或LOCAL_DIRS(YARN)环境变量覆盖。
spark.logConf false 当SparkContext启动时,将有效的SparkConf记录为INFO。
spark.master (没 有) 要连接到的群集管理器。查看允许的主URL的列表 
还有许多配置就不一一举例,可以参考官方文档:
https://spark.apache.org/docs/1.6.0/configuration.html


[Spark参数配置]--1.6.0版本的参数配置_第1张图片



你可能感兴趣的:(Spark)