目录
参考地址 点击跳转
1.运行环境
参数配制 | 默认值 | 解释 |
spark.executor.logs.rolling.maxRetainedFiles | (none) | 设置被系统保留的最近滚动日志文件的数量。更老的日志文件将被删除。默认没有开启。 |
spark.executor.logs.rolling.size.maxBytes | (none) | executor日志的最大滚动大小。默认情况下没有开启。值设置为字节 |
spark.executor.logs.rolling.strategy | (none) | 设置executor日志的滚动(rolling)策略。默认情况下没有开启。可以配置为 |
spark.executor.logs.rolling.time.interval | daily | executor日志滚动的时间间隔。默认情况下没有开启。合法的值是 |
spark.files.userClassPathFirst | false | (实验性)当在Executors中加载类时,是否用户添加的jar比Spark自己的jar优先级高。这个属性可以降低Spark依赖和用户依赖的冲突。它现在还是一个实验性的特征。 |
spark.python.worker.memory | 512m | 在聚合期间,每个python worker进程使用的内存数。在聚合期间,如果内存超过了这个限制,它将会将数据塞进磁盘中 |
spark.python.profile | false | 在Python worker中开启profiling。通过 |
spark.python.profile.dump | (none) | driver退出前保存分析结果的dump文件的目录。每个RDD都会分别dump一个文件。可以通过 |
spark.python.worker.reuse | true | 是否重用python worker。如果是,它将使用固定数量的Python workers,而不需要为每个任务 |
spark.executorEnv.[EnvironmentVariableName] | (none) | 通过 |
spark.mesos.executor.home | driver side SPARK_HOME | 设置安装在Mesos的executor上的Spark的目录。默认情况下,executors将使用driver的Spark本地(home)目录,这个目录对它们不可见。注意,如果没有通过 |
spark.mesos.executor.memoryOverhead | executor memory * 0.07, 最小384m | 这个值是 |
2.Shuffle行为
参数配制 | 默认值 | 解释 |
spark.reducer.maxMbInFlight | 48 | 从递归任务中同时获取的map输出数据的最大大小(mb)。因为每一个输出都需要我们创建一个缓存用来接收,这个设置代表每个任务固定的内存上限,所以除非你有更大的内存,将其设置小一点 |
spark.shuffle.blockTransferService | netty | 实现用来在executor直接传递shuffle和缓存块。有两种可用的实现: |
spark.shuffle.compress | true | 是否压缩map操作的输出文件。一般情况下,这是一个好的选择。 |
spark.shuffle.consolidateFiles | false | 如果设置为”true”,在shuffle期间,合并的中间文件将会被创建。创建更少的文件可以提供文件系统的shuffle的效 率。这些shuffle都伴随着大量递归任务。当用ext4和dfs文件系统时,推荐设置为”true”。在ext3中,因为文件系统的限制,这个选项可 能机器(大于8核)降低效率 |
spark.shuffle.file.buffer.kb | 32 | 每个shuffle文件输出流内存内缓存的大小,单位是kb。这个缓存减少了创建只中间shuffle文件中磁盘搜索和系统访问的数量 |
spark.shuffle.io.maxRetries | 3 | Netty only,自动重试次数 |
spark.shuffle.io.numConnectionsPerPeer | 1 | Netty only |
spark.shuffle.io.preferDirectBufs | true | Netty only |
spark.shuffle.io.retryWait | 5 | Netty only |
spark.shuffle.manager | sort | 它的实现用于shuffle数据。有两种可用的实现: |
spark.shuffle.memoryFraction | 0.2 | 如果 |
spark.shuffle.sort.bypassMergeThreshold | 200 | 当你使用 那么此时就会自动启用bypass机制,map-side就不会进行排序了,减少了排序的性能开销 |
spark.shuffle.spill | true | 如果设置为”true”,通过将多出的数据写入磁盘来限制内存数。通过 |
spark.shuffle.spill.compress | true | 在shuffle时,是否将spilling的数据压缩。压缩算法通过 |
3.压缩和序列化
属性名称 | 默认值 | 含义 |
---|---|---|
spark.broadcast.compress | true | 在发送广播变量之前是否压缩它 |
spark.closure.serializer | org.apache. spark.serializer. JavaSerializer | 闭包用到的序列化类。目前只支持java序列化器 |
spark.io.compression.codec | snappy | 压缩诸如RDD分区、广播变量、shuffle输出等内部数据的编码解码器。默认情况下,Spark提供了三种选择:lz4、lzf和snappy,你也可以用完整的类名来制定。 |
spark.io.compression.lz4.block.size | 32768 | LZ4压缩中用到的块大小。降低这个块的大小也会降低shuffle内存使用率 |
spark.io.compression.snappy.block.size | 32768 | Snappy压缩中用到的块大小。降低这个块的大小也会降低shuffle内存使用率 |
spark.kryo.classesToRegister | (none) | 如果你用Kryo序列化,给定的用逗号分隔的自定义类名列表表示要注册的类 |
spark.kryo.referenceTracking | true | 当用Kryo序列化时,跟踪是否引用同一对象。如果你的对象图有环,这是必须的设置。如果他们包含相同对象的多个副本,这个设置对效率是有用的。如果你知道不在这两个场景,那么可以禁用它以提高效率 |
spark.kryo.registrationRequired | false | 是否需要注册为Kyro可用。如果设置为true,然后如果一个没有注册的类序列化,Kyro会抛出异常。如果设置为false,Kryo将会同时写每个对象和其非注册类名。写类名可能造成显著地性能瓶颈。 |
spark.kryo.registrator | (none) | 如果你用Kryo序列化,设置这个类去注册你的自定义类。如果你需要用自定义的方式注册你的类,那么这个属性是有用的。否则 |
spark.kryoserializer.buffer.max.mb | 64 | Kryo序列化缓存允许的最大值。这个值必须大于你尝试序列化的对象 |
spark.kryoserializer.buffer.mb | 0.064 | Kyro序列化缓存的大小。这样worker上的每个核都有一个缓存。如果有需要,缓存会涨到 |
spark.rdd.compress | true | 是否压缩序列化的RDD分区。在花费一些额外的CPU时间的同时节省大量的空间 |
spark.serializer | org.apache. spark.serializer. JavaSerializer | 序列化对象使用的类。默认的Java序列化类可以序列化任何可序列化的java对象但是它很慢。所有我们建议用org.apache.spark.serializer.KryoSerializer |
spark.serializer.objectStreamReset | 100 | 当用 |
4.运行时行为
属性名称 | 默认值 | 含义 |
---|---|---|
spark.broadcast.blockSize | 4096 | TorrentBroadcastFactory传输的块大小,太大值会降低并发,太小的值会出现性能瓶颈 |
spark.broadcast.factory | org.apache.spark. broadcast.TorrentBroadcastFactory | broadcast实现类 |
spark.cleaner.ttl | (infinite) | spark记录任何元数据(stages生成、task生成等)的持续时间。定期清理可以确保将超期的元数据丢弃,这在运行长时间任务是很有用的,如运行7*24的sparkstreaming任务。RDD持久化在内存中的超期数据也会被清理 |
spark.default.parallelism | 本地模式:机器核数;Mesos:8;其他: | 如果用户不设置,系统使用集群中运行shuffle操作的默认任务数(groupByKey、 reduceByKey等) |
spark.executor.heartbeatInterval | 10000 | executor 向 the driver 汇报心跳的时间间隔,单位毫秒 |
spark.files.fetchTimeout | 60 | driver 程序获取通过 |
spark.files.useFetchCache | true | 获取文件时是否使用本地缓存 |
spark.files.overwrite | false | 调用 |
spark.hadoop.cloneConf | false | 每个task是否克隆一份hadoop的配置文件 |
spark.hadoop.validateOutputSpecs | true | 是否校验输出 |
spark.storage.memoryFraction | 0.6 | Spark内存缓存的堆大小占用总内存比例,该值不能大于老年代内存大小,默认值为0.6,但是,如果你手动设置老年代大小,你可以增加该值 |
spark.storage.memoryMapThreshold | 2097152 | 内存块大小 |
spark.storage.unrollFraction | 0.2 | Fraction of spark.storage.memoryFraction to use for unrolling blocks in memory. |
spark.tachyonStore.baseDir | System.getProperty(“java.io.tmpdir”) | Tachyon File System临时目录 |
spark.tachyonStore.url | tachyon://localhost:19998 | Tachyon File System URL |
5.网络
属性名称 | 默认值 | 含义 |
---|---|---|
spark.driver.host | (local hostname) | driver监听的主机名或者IP地址。这用于和executors以及独立的master通信 |
spark.driver.port | (random) | driver监听的接口。这用于和executors以及独立的master通信 |
spark.fileserver.port | (random) | driver的文件服务器监听的端口 |
spark.broadcast.port | (random) | driver的HTTP广播服务器监听的端口 |
spark.replClassServer.port | (random) | driver的HTTP类服务器监听的端口 |
spark.blockManager.port | (random) | 块管理器监听的端口。这些同时存在于driver和executors |
spark.executor.port | (random) | executor监听的端口。用于与driver通信 |
spark.port.maxRetries | 16 | 当绑定到一个端口,在放弃前重试的最大次数 |
spark.akka.frameSize | 10 | 在”control plane”通信中允许的最大消息大小。如果你的任务需要发送大的结果到driver中,调大这个值 |
spark.akka.threads | 4 | 通信的actor线程数。当driver有很多CPU核时,调大它是有用的 |
spark.akka.timeout | 100 | Spark节点之间的通信超时。单位是秒 |
6.调度相关属性
属性名称 | 默认值 | 含义 |
---|---|---|
spark.task.cpus | 1 | 为每个任务分配的内核数 |
spark.task.maxFailures | 4 | Task的最大重试次数 |
spark.scheduler.mode | FIFO | Spark的任务调度模式,还有一种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 | 推测启动前,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运行后进入等待时间,如果这个等待时间内重新获取足够的资源就继续计算 |
7.动态分配
属性名称 | 默认值 | 含义 |
---|---|---|
spark.dynamicAllocation.shuffleTracking.enable | false | 为executor开启shuffle文件跟踪(即存储shuffle数据),避免动态分配依赖外部shuffle服务。 |
spark.dynamicAllocation.shuffleTracking.timeout | infinity | 当shuffle跟踪开启后,控制executor存储shuffle数据的超时时间 |