Spark 官方文档——Configuration配置

本文档详细介绍了Spark的配置方法,包括通过SparkConf、环境变量和log4j.properties设置。讨论了动态加载配置、查看配置、以及各种配置参数如Application Properties、内存管理和安全性。还提到了如何覆盖配置目录以及集成Hadoop集群配置。
摘要由CSDN通过智能技术生成

Spark可以通过三种方式配置系统:

  • 通过SparkConf对象, 或者Java系统属性配置Spark的应用参数
  • 通过每个节点上的conf/spark-env.sh脚本为每台机器配置环境变量
  • 通过log4j.properties配置日志属性

Spark属性

Spark属性可以为每个应用分别进行配置,这些属性可以直接通过SparkConf设定,也可以通过set方法设定相关属性。 
下面展示了在本地机使用两个线程并发执行的配置代码:

val conf = new SparkConf()
             .setMaster("local[2]")
             .setAppName("CountingSheep")
val sc = new SparkContext(conf)

 

对于部分时间参数需要制定单位,例如

  • 时间单位:ms、s、m(min)、h、d、y分别表示毫秒、秒、分钟、小时、天和年。
  • 存储单位:
1b (bytes)
1k or 1kb (kibibytes = 1024 bytes)
1m or 1mb (mebibytes = 1024 kibibytes)
1g or 1gb (gibibytes = 1024 mebibytes)
1t or 1tb (tebibytes = 1024 gibibytes)
1p or 1pb (pebibytes = 1024 tebibytes)

 

动态加载Spark配置

有时为了避免通过编码设定参数,可以通过创建空的SparkConf,并在调用脚本时制定相关参数

./bin/spark-submit --name "My app" --master local[4] --conf spark.eventLog.enabled=false
  --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" myApp.jar

 

spark shell和spark-submit提供两种方式动态加载配置

  • 命令行参数动态设定,例如–conf –master
  • 通过配置文件。spark-submit默认读取conf/spark-defaults.conf文件,每一行代表一个配置
spark.master            spark://5.6.7.8:7077
spark.executor.memory   4g
spark.eventLog.enabled  true
spark.serializer        org.apache.spark.serializer.KryoSerializer

 

参数设置在执行时会进行合并,默认最高优先级是通过代码设置,其次是通过命令行参数,最后是默认的配置文件。

查看Spark配置

可以通过web界面http://:4040中的Environment查看Spark配置信息(仅显示spark-defaults.conf、SparkConf和命令行参数)。可以根据web页面确定配置属性是否生效。

配置参数 Available Properties

大部分配置参数都有默认值,以下是常用配置

Application Properties

属性 默认值 描述
spark.app.name (none) 应用程序的名称,会在日志和webUI显示
spark.driver.cores 1 driver程序占用的CPU核数,只在cluster模式下有小。
spark.driver.maxResultSize 1g 对Spark每个action结果集大小的限制,最少是1M,若设为0则不限制大小。若Job结果超过限制则会异常退出,若结果集限制过大也可能造成OOM问题。
spark.driver.memory 1g driver进程可用的内存。注意:不能在代码中配置,因为此时driver已经启动,可以通过–driver-memory命令行参数或者配置文件进行配置。
spark.executor.memory 1g 每个executor可用的内存数量 (e.g. 2g, 8g).
spark.extraListeners (none) 一系列实现SparkListener的类,spark监听总线会创建这些类的实例。
spark.local.dir /tmp 用于存储mpp输出文件和RDD缓存文件,常配置在SSD等存储设备上,可以通过逗号分隔指定多个目录。 注意: 在Spark 1.0 后续版本,会被SPARK_LOCAL_DIRS (Standalone, Mesos) or LOCAL_DIRS (YARN) 环境变量覆盖.
spark.logConf false 将SparkConf 的有效配置作为INFO进行记录
spark.master (none) 集群master节点

运行时环境

属性 默认值 描述
spark.driver.userClassPathFirst false 用户指定的jars优先于Spark的库。用于解决用户与环境的版本冲突
spark.executor.logs.rolling.maxRetainedFiles (none) 系统保留日志的最大数量,当超限时,旧的日志被删除,默认不启动
spark.executor.logs.rolling.time.interval daily 设置日志rolling时间间隔,默认rolling不启动
spark.executor.userClassPathFirst false executor执行时,用户指定的jars优先于Spark的库。用于解决用户与环境的版本冲突
spark.python.worker.memory 512m 每个worker进程在聚集时的内存上限,若超限则输出到硬盘

Shuffle 行为

属性 默认值 描述
spark.reducer.maxSizeInFlight 48m 多个reduce任务从map输出获取结果的最大尺寸。由于每个reducer需要创建缓存保留数据,除非内存很大,一般不要修改此参数
spark.shuffle.compress true 是否对map的输出结果进行压缩,压缩器为spark.io.compression.codec
spark.shuffle.file.buffer 32k 每个shuffle文件输出流的内存缓存区大小。这些缓冲区减少了系统IO的调用次数
spark.shuffle.manager sort shuffle数据的实现方法,包括sort和hash两种。sort内存利用率更改,从1.2版本后sort作为默认实现方法
spark.shuffle.service.enabled false 激活外部shuffle服务。服务维护executor写的文件,因而executor可以被安全移除。需要设置spark.dynamicAllocation.enabled 为true,同事指定外部shuffle服务。
spark.shuffle.service.port 7337 默认的外部shuffle服务端口
spark.shuffle.sort.bypassMergeThreshold 200 用于设置在Reducer的partition数目少于多少的时候,Sort Based Shuffle内部不使用Merge Sort的方式处理数据,而是直接将每个partition写入单独的文件。这个方式和Hash Based的方式是类似的,区别就是在最后这些文件还是会合并成一个单独的文件,并通过一个index索引文件来标记不同partition的位置信息。 从Reducer看来,数据文件和索引文件的格式和内部是否做过Merge Sort是完全相同的。这个可以看做SortBased Shuffle在Shuffle量比较小的时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值