Spark 属性配置

1.Spark1.x 属性配置方式

Spark属性提供了大部分应用程序的控制项,并且可以单独为每个应用程序进行配置。

在Spark1.0.0提供了3种方式的属性配置:

  • SparkConf方式

    • SparkConf方式可以直接将属性值传递到SparkContext;
    • SparkConf可以对某些通用属性直接配置,如master使用setMaster,appname使用setAppName;
    • 也可以使用set()方法对属性进行键-值对配置,如set("spark.executor.memory", "1g") 。
  • 命令行参数方式
    • 这种方式是在使用spark-submit或spark-shell提交应用程序的时候,用命令行参数提交;
    • 这种方式可以比较灵活的配置各个应用程序的运行环境;
    • 可以通过spark-submit --help 或 spark-shell –help显示出属性的完整列表。
  • 文件配置方式
    • 该方式是将属性配置项以键值对方式写入文本文件中,一个配置项占一行;
    • 该文件默认为conf/spark-defaults.conf,spark-submit在提交应用程序的时候会检查是否存在该文件,有的话就将相关的属性配置载入;
    • 该文件可以在 spark-submit的命令参数--properties-file定义不同的位置。
  • 优先权
    • SparkConf方式 > 命令行参数方式 >文件配置方式
  • 查看Spark属性配置
    • 通过应用程序的webUI(地址http://<driver>:4040)可以查看Spark属性配置,从而检查属性配置是否正确;
    • 只是显示通过上面三种方式显式指定的属性配置,对于其他属性可以假定使用默认配置;
    • 对于大多数内部控制属性,系统已经提供了合理的默认配置。

2:Spark1.x中通用属性

A:应用程序属性

  属性名称   默认   含义
  spark.app.name   无 应用程序名称
  spark.master   无 要连接的群集管理器
 spark.executor.memory   512 m 每个executor使用的内存总量
  spark.serializer  org.apache.spark.serializer.
JavaSerializer
在网络数据传送或缓存时使用的序化 器 ,默认的序 化 器 是Java序化 器 ,虽然这种序 化 器 对任何Java对象可以使用,兼容性好,但是处理速度相当的慢;如果要追求处理速度的话,建议使用org.apache.spark.serializer.KryoSerializer序化 器 。当然也可以任意是定义为org.apache.spark.Serializer 子类的 序化器 。
  spark.kryo.registrator   无 如果要使用 Kryo 序化 器 ,需要创建一个继承 KryoRegistrator的类并设置系统属性spark.kryo.registrator指向该类。
  spark.local.dir   /tmp 用于暂存 空间的目录,该目录用于保存map输出文件或者 转储 RDD。该目录位于高速的本地磁盘上,或者位于使用逗号分隔的多个不同磁盘上的目录。注意: 在Spark 1.0 及更高版本这属性将被 群集管理器配置的环境变量 SPARK_LOCAL_DIRS (Standalone、Mesos) 或 LOCAL_DIRS (YARN) 代替。
  spark.logConf   false SparkContext 启动时记录有效 SparkConf信息。

B:运行时环境

  属性名称   默认   含义
  spark.executor.memory  512 m 分配给每个executor进程总内存(使用类似512m、2g格式) 
 spark.executor.extraJavaOptions   无 要传递给executor的额外 JVM 选项,注意不能使用它来设置Spark属性或堆大小设置。
  spark.executor.extraClassPath   无 追加到executor类路径中的附加类路径,主要为了兼容旧版本的Spark,通常不需要用户设置。
 spark.executor.extraLibraryPath   无   启动executor JVM 时要用到的特殊库路径。
  spark.files.userClassPathFirst  false executor在加载类的时候是否优先使用用户自定义的JAR包,而不是Spark带有的JAR包。此功能可以用于解决Spark依赖包和用户依赖包之间的冲突。目前,该属性只是一项试验功能。

C:Shuffle 操作

  属性名称   默认   含义
 spark.shuff le.consolidateFiles  false 如果设置为true,在shuffle时就合并中间文件,对于有大量Reduce任务的shuffle来说,合并文件可以提高文件系统性能。如果使用的是 ext4 或 xfs 文件系统, 建议设置为true;对于ext3, 由于文件系统的限制,设置为true 反而 会使内核>8的机器 降低性能。
  spark.shuffle.spill  true 如果设置为true,在 shuffle 期间 通过溢出数据到磁盘来降低 了 内存 使用总 量,溢出阈值是由spark.shuffle.memoryFraction指定的。
  spark.shuffle.spill.compress  true 是否压缩在 shuffle 期间溢出的数据,如果压缩将使用spark.io.compression.codec。
  spark.shuffle.compress  true 是否压缩map输出文件,压缩将使用spark.io.compression.codec。
  spark.shuffle.file.buffer.kb  100 每个shuffle的文件输出流 内存缓冲区 的 大小 ,以KB为单位。这些缓冲区可以减少磁盘寻道的次数,也减少创建shuffle中间文件时的系统调用。
 spark.reducer.maxMbInFlight   48 每个reduce任务同时获取map输出的最大大小 (以兆字节为单位)。由于每个map输出都需要一个缓冲区来接收它,这代表着 每个 reduce 任务有 固定的内存开销,所以要设置小点,除非有很大内存。

D:Spark UI

  属性名称   默认   含义
  spark.ui.port   4040 应用程序webUI的端口
  spark.ui.retainedStages   1000 在GC之前webUI保留的stage数量
  spark.ui.killEnabled   true 允许在 webUI将stage和相应的job杀死
  spark.eventLog.enabled   false 是否记录 Spark事件,用于 应用程序在完成后 重构 webUI。
 spark.eventLog.compress   false 是否压缩记录Spark事件,前提spark.eventLog.enabled为true。
  spark.eventLog.dir  file:///tmp/spark-events 如果spark.eventLog.enabled为 true,该属性为记录spark 事件的根目录。在此根目录中,Spark为 每个应用程序 创建分目录,并将 应用程序的 事件记录到在此目录中。用户可以将此属性设置为HDFS目录,以便history server读取历史记录文件。

E:压缩和序化

  属性名称   默认   含义
  spark.broadcast.compress   true 是否在发送之前压缩广播变量。
  spark.rdd.compress   false 是否压缩序化的RDD分区 ,可以节省大量空间,但会消耗一些额外的CPU时间。
  spark.io.compression.codec   org.apache.spark.io. 
LZFCompressionCodec
用于压缩内部数据如 RDD 分区和shuffle输出的 编码 解码器 。 Spark提供两个编解码器: org.apache.spark.io.LZFCompressionCodec和org.apache.spark.io.SnappyCompressionCodec。其中,Snappy提供更快速的压缩和解压缩,而LZF提供了更好的压缩比。
 spark.io.compression.snappy
.block.size
  32768 使用 Snappy 编 码 解码器时, 编 码 解码器使用的 块大小 (以字节为单位)  。
  spark. closure .serializer  org.apache.spark.serializer.
JavaSerializer
用于闭包 的序化器,目前只有支持Java序化器。
  spark.serializer. 
objectStreamReset
  10000 使用 org.apache.spark.serializer.JavaSerializer序化时,序化器缓存对象以防止写入冗余数据,这时停止这些对象的垃圾收集。通过调用重置序化器,刷新该信息就可以收集旧对象。若要关闭这重定期重置功能将其设置为 < = 0  。默认情况下 每10000个对象将 重置序化器。
 spark.kryo.referenceTracking   true 当使用 Kryo 序化数据时, 是否跟踪对同一对象的引用。如果你的对象图有回路或者同一对象有多个副本,有必要设置为true;其他情况下 可以禁用以提高性能。
 spark.kryoserializer.buffer.mb   2 在Kryo 里 允许的最大对象大小 ( Kryo 会创建一个缓冲区,至少和序化的最大单个对象一样大) 。如果Kryo 出现缓冲区限制超出异常报错,增加这个值。注意,每个worker的每个core只有一个缓冲区。

F:执行操作

  属性名称   默认   含义
  spark.default.parallelism 本地模式: 本地机器内核数

Mesos精细模式: 8

其他: 所有executor的core总数

或者2,以较大者为准

如果用户没设置,系统使用集群中运行shuffle操作的默认任务数(groupByKey、 reduceByKey等)。
  spark.broadcast.factory org.apache.spark.broadcast. 
HttpBroadcastFactory
广播的实现类
  spark.broadcast.blockSize   4096 TorrentBroadcastFactory块 大小(以kb为单位)。太大值在广播时降低并行性 (使速度变慢);太小值, BlockManager性能 可能会受到冲击。
  spark.files.overwrite   false 通过 SparkContext.addFile() 添加的文件在目标中已经存在并且内容不匹配时,是否覆盖目标文件。
  spark.files.fetchTimeout   false 在 获取由driver 通过SparkContext.addFile() 添加的文件时, 是否使用 通信时间 超时。
 spark.storage.memoryFraction   0.6 Java堆用于cache的比例
  spark.tachyonStore.baseDir  System.getProperty("java.io.tmpdir") 用于存储RDD的techyon目录,tachyon文件系统的URL由spark.tachyonStore.url设置。也可以是逗号分隔的多个techyon目录。
  spark.storage. 
memoryMapThreshold
  8192 以字节为单位的块大小,用于磁盘读取一个块大小进行内存映射。这可以防止Spark在内存映射时使用很小块,一般情况下,对块进行内存映射的开销接近或低于操作系统的页大小。
  spark.tachyonStore.url   tachyon://localhost:19998 基于techyon文件的URL。
  spark.cleaner.ttl   无限 spark记录任何元数据(stages生成、task生成等)的持续时间。定期清理可以确保将超期的元数据遗忘,这在运行长时间任务是很有用的,如运行24/7的sparkstreaming任务。注意RDD持久化在内存中的超期数据也会被清理。

G:网络通信

  属性名称   默认   含义
  spark.driver.host   本地主机名 运行driver的主机名或 IP 地址。
  spark.driver.port   随机 driver侦听的端口。
  spark.akka.frameSize   10 以MB为单位的driver和executor之间通信信息的大小,设置值越大,driver可以接受更大的计算结果。
  spark.akka.threads   4 用于通信的actor线程数,在大型集群中拥有更多CPU内核的driver可以增加actor线程数。
  spark.akka.timeout   100 以秒为单位的 Spark节点 之间通信超时时间。
 spark.akka.heartbeat.pauses   600 下面3个参数是用于设置akka自带的故障探测器,设置很大值的话,可以停用故障探测器。如果想启用故障探测器,以秒为单位设置这3个参数。通常是在特殊需要的情况下开启故障探测器,一个敏感的故障探测器有助于恶意的executor的定位,而对于由于GC暂停或网络滞后引起的情况下,不需要开启故障探测器;另外故障探测器的开启会导致由于心跳信息的频繁交换而引起的网络泛滥。 
本参数是设置可接受的心跳停顿时间。
  spark.akka.failure-detector.threshold  300.0 对应AKKA的akka.remote.transport-failure-detector.threshold
 spark.akka.heartbeat.interval   1000 心跳间隔时间

H:调度

  属性名称   默认   含义
  spark.task.cpus   1 为每个任务分配的 内核 数。
  spark.task.maxFailures   4 job放弃task前该task的失败次数,该值>=1
  spark.scheduler.mode  FIFO SparkContext对job进行调度所采用的模式。 
对于多用户可采用FAIR模式。
  spark.cores.max   未设置 当应用程序运行在Standalone集群或者粗粒度共享模式Mesos集群时,应用程序向集群请求的最大CPU内核总数(不是指每台机器,而是整个集群)。如果不设置,对于Standalone集群将使用spark.deploy.defaultCores中数值,而Mesos将使用集群中可用的内核。
  spark.mesos.coarse   false 如果设置为true,在Mesos集群中运行时使用粗粒度共享模式。
  spark.speculation   false 以下几个参数是关于Spark推测执行机制的相关参数 。此参数设定是否使用推测执行 机制,如果设置为true则spark使用推测 执行 机制,对于Stage中拖后腿的Task在其他节点中重新启动,并将最先完成的Task的计算结果最为最终结果。
  spark.speculation.interval    100 Spark多长时间进行检查task运行状态用以推测,以毫秒为单位。
  spark.speculation.quantile   0.75 推测启动前,Stage必须要完成总Task的百分比。
  spark.speculation.multiplier   1.5 比已完成Task的运行速度中位数慢多少倍才启用推测
  spark.locality.wait   3000 以下几个参数是关于Spark数据本地性的相关参数。 
本参数是以毫秒为单位启动本地数据task的等待时间,如果超出就启动下一本地优先级别的task。该设置同样可以应用到各优先级别的本地性之间(本地进程 -> 本地节点 -> 本地机架 -> 任意节点 ),当然,也可以通过spark.locality.wait.node等参数设置不同优先级别的本地性。
  spark.locality.wait.process  spark.locality.wait  本地进程级别的本地等待时间
  spark.locality.wait.node  spark.locality.wait 本地节点级别的本地等待时间
  spark.locality.wait.rack  spark.locality.wait 本地机架级别的本地等待时间
 spark.scheduler.revive.interval    1000 复活重新获取资源的Task的最长时间间隔(毫秒),发生在Task因为本地资源不足而将资源分配给其他Task运行后进入等待时间,如果这个等待时间内重新获取足够的资源就继续计算。

I:安全

  属性名称   默认   含义
  spark.authenticate  false Spark是否启用内部身份验证。
 spark.authenticate.secret   无 设置Spark用于组件之间进行身份验证的密钥。如果不是YARN上运行并且spark.authenticate为true时,需要设置密钥。
  spark.core.connection. 
auth.wait.timeout
  30 Spark用于组件时间进行身份认证的超时时间。
  spark.ui.filters   无 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.ui.acls.enable  false Spark webUI存取权限是否启用。如果启用,在用户浏览web界面的时候会检查用户是否有访问权限。
  spark.ui.view.acls   空 以逗号分隔Spark webUI访问用户的列表。默认情况下只有启动Spark job的用户才有访问权限。

J:Spark Streaming

  属性名称   默认   含义
 spark.streaming.blockInterval   200 在时间间隔内 (毫秒)Spark Streaming接收器将接收数据合并成数据块并存储在Spark。
  spark.streaming.unpersist  true 如果设置为true,强迫将SparkStreaming持久化的RDD数据从Spark内存中清理,同样的,SparkStreaming接收的原始输入数据也会自动被清理;如果设置为false,则允许原始输入数据和持久化的RDD数据可被外部的Streaming应用程序访问,因为这些数据不会自动清理。

3:集群特有的属性

A:Standalone特有属性

Standalone还可以通过环境变量文件conf/spark-env.sh来设置属性,相关的配置项是:

  • SPARK_MASTER_OPTS  配置master使用的属性
  • SPARK_WORKER_OPTS  配置worker使用的属性
  • SPARK_DAEMON_JAVA_OPTS  配置master和work都使用的属性

配置的时候,使用类似的语句:

export SPARK_MASTER_OPTS="-Dx1=y1 -Dx2=y2"

# - 其中x代表属性,y代表属性值

其中SPARK_MASTER_OPTS所支持的属性有:

  属性名称   默认   含义
 spark.deploy.spreadOut   true Standalone集群管理器是否自由选择节点还是固定到尽可能少的节点,前者会有更好的数据本地性,后者对于计算密集型工作负载更有效
 spark.deploy.defaultCores   无限 如果没有设置spark.cores.max,该参数设置Standalone集群分配给应用程序的最大内核数,如果不设置,应用程序获取所有的有效内核。注意在一个共享的集群中,设置一个低值防止攫取了所有的内核,影响他人的使用。
 spark.worker.timeout  60 master因为没有收到心跳信息而认为worker丢失的时间(秒)

其中SPARK_WORKER_OPTS所支持的属性有:

  属性名称   默认   含义
 spark.worker.cleanup.enabled   false 是否定期清理worker的应用程序工作目录,只适用于Standalone模式,不适用于YARN模式。清理的时候将无视应用程序是否在运行。
 spark.worker.cleanup.interval  1800  清理worker本地过期的应用程序工作目录的时间间隔(秒)
 spark.worker.cleanup.appDataTtl   7*24*3600  worker保留应用程序工作目录的有效时间。该时间由磁盘空间、应用程序日志、应用程序的jar包以及应用程序的提交频率来设定。

其中SPARK_DAEMON_JAVA_OPTS所支持的属性有:

  属性名称   含义
 spark.deploy.recoveryMode 下面3个参数是用于配置zookeeper模式的master HA。 
设置为ZOOKEEPER表示启用master备用恢复模式,默认为NONE。
 spark.deploy.zookeeper.url zookeeper集群URL
 spark.deploy.zookeeper.dir zooKeeper保存恢复状态的目录,缺省为/spark
 spark.deploy.recoveryMode 设成FILESYSTEM启用master单节点恢复模式,缺省值为NONE
 spark.deploy.recoveryDirectory Spark保存恢复状态的目录

B:YARN特有属性

YARN特有属性的配置,应该是支持SparkConf方式和conf/spark-defaults.conf文件配置方式,  。

  属性名称   默认   含义
 spark.yarn.applicationMaster.waitTries  10 RM等待Spark AppMaster启动次数,也就是SparkContext初始化次数。超过这个数值,启动失败。
 spark.yarn.submit.file.replication  3  应用程序上载到HDFS的文件的复制因子
 spark.yarn.preserve.staging.files  false  设置为true,在job结束后,将stage相关的文件保留而不是删除。
 spark.yarn.scheduler.heartbeat.interval-ms  5000 Spark AppMaster发送心跳信息给YARN RM的时间间隔
 spark.yarn.max.executor.failures   2倍于executor数 导致应用程序宣告失败的最大executor失败数
 spark.yarn.historyServer.address  无  Spark history server的地址(要含有http://)。这个地址会在应用程序完成后提交给YARN RM,使得将信息从RM UI连接到history server UI上。

http://spark.apache.org/docs/latest/configuration.html#spark-properties

http://spark.apache.org/docs/latest/spark-standalone.html#cluster-launch-scripts

这个是配置点

时间: 2024-10-25 13:13:40

Spark 属性配置的相关文章

Spark1.0.0属性配置

1:Spark1.0.0属性配置方式 Spark属性提供了大部分应用程序的控制项,并且可以单独为每个应用程序进行配置. 在Spark1.0.0提供了3种方式的属性配置: SparkConf方式 SparkConf方式可以直接将属性值传递到SparkContext: SparkConf可以对某些通用属性直接配置,如master使用setMaster,appname使用setAppName: 也可以使用set()方法对属性进行键-值对配置,如set("spark.executor.memory&qu

spark1.0属性配置以及spark-submit简单使用

在spark1.0中属性支持三种配置方式: 1.代码 在代码中构造SparkConf时指定master.appname或者key-value等 val conf = new SparkConf(); conf.setAppName("WordCount").setMaster(" spark://hadoop000:7077") val sc = new SparkContext(conf) val conf = new SparkConf(); conf.set(

讨论Spark的配置监控和性能优化

讨论Spark的配置监控和性能优化(某课程笔记) 上完这节课以后,你将能够描述集群的概念 通过修改Spark的属性,环境变量,或者是日志属性来配置Spark 使用Web端界面,以及各种不同的外部工具来监控Spark和应用程序 在Spark集群中有三种主要的组成部分.驱动程序,是放置主程序中SparkContext的地方,要运行一个集群,你需要一个集群管理器 它可以是单机版的集群管理器,也可以是 Mesos 或者 Yarn 而worker节点,就是放置执行器的地方 执行器,是运行计算和储存应用程序

Linux网络属性配置

Linux网络属性配置 IP(Internet protocol)地址: 网络号+主机号 IPv4:32bits 8bits 8bits 8bits 8bits 0-255 0.0.0.0-255.255.255 IP地址分类: A类: 第一段为网络号,后三段为主机号 网络号 0固定 000 0000-0 111 1111 : 网络数量: 1-127 每个网络中的主机数量:2^24 -2 (全0,全1) 主机全0表示网络本身地址, 全1表示所有主机广播地址地址 默认子网掩码:255.0.0.0

VS项目属性配置实验过程

一.实验背景 cocos2d-x已经发展的相对完善了,从项目的创建.编译.运行到最后的打包都有相应的便捷工具,开发者只需要关注自己的游戏逻辑代码即可,这一点很赞,可是傻瓜式的编程,让我至今还只停留在使用vs建个空项目做个小demo的阶段,我根本不知道cocos2d-x项目究竟是如何组织的,那些项目与项目之间的关系,那些库文件的引用,那些属性的配置,那些路径设置,那些宏定义究竟是在哪里,为什么会出现两个窗口,一大片属性究竟是什么意思,,所以很有必要研究一下.现在把实验过程同大家交流一下,有什么说的

【linux相识相知】网络属性配置

当我们拥有一个崭新的计算机的时候,第一步恐怕都是迫不及待的下载各种软件,看视频,听音乐等,这里的关键的一点是要有网络.现在的个人计算机大部分都是windows操作系统的,接入网络网络很简单,插上网线也许就能上网了,最麻烦不过找到网络和共享中心手动配置一个ip地址.网关地址和dns服务器就能上网了,当然这都是得益于图形化界面.但是现在很多的服务器都是linux操作系统且没有图形化的界面,这时候我们就需要了解怎样正确的给linux主机配置网络属性了,本次博客就来说说以正确的方式打开linux操作系统

Spring Boot项目属性配置

接着上面的入门教程,我们来学习下Spring Boot的项目属性配置. 1.配置项目内置属性 属性配置主要是在application.properties文件里配置的(编写时有自动提示)这里我们将server的端口变为8888,路径加上HelloWorld: 在DeomApplication.java的页面时点击运行按钮,打开浏览器输入:http://localhost:8888/HelloWorld/hello 此时,控制台的输出信息也可以看到端口变成8888了: 之前的url已无效: 更改后

Oozie工作流属性配置的方式与策略

本文原文出处: http://blog.csdn.net/bluishglc/article/details/46049817 Oozie工作流属性配置的三种方式 Oozie有三种方法可以给工作流提供属性属性配置: App部署文件夹根目录下的:config-default.xml 作业属性文件:job.properties 在命令行中指定属性:-Dkey=value Oozie工作流属性配置的策略(最佳实践) 坦率地讲,三种配置相互重叠,全部使用会使属性的配置过于分散,使得查找和定位属性变得繁琐

Linux网络属性配置详解

一.网络属性概述 在计算机网络中,某台主机要想接入网络实现通信的话,一般要配置IP地址.子网掩码.网关.DNS服务器地址等属性.其中IP地址是主机在互联网上的逻辑地址,通过IP地址可定位互联网上的某一台主机以实现网络的三层通信:而子网掩码与IP地址按位进行"与"运算得到主机所在网段地址,可快速确定用户主机所在网络(网段).配置了IP地址和子网掩码,就可以实现本地通信了,此外实现本地通信还需要主机的MAC地址,因为IP地址之间的通信最终要映射到MAC地址才能完成,而MAC地址一般在厂商生