1、背景
有需要的可以联系我2317384986 yxxy1717
① Application Properties 应用基本属性
spark.driver.cores
driver端分配的核数,默认为1,thriftserver是启动thriftserver服务的机器,资源充足的话可以尽量给多。
spark.driver.memory
driver端分配的内存数,默认为1g,同上。
spark.executor.memory
每个executor分配的内存数,默认1g,会受到yarn CDH的限制,和memoryOverhead相加 不能超过总内存限制。
spark.driver.maxResultSize
driver端接收的最大结果大小,默认1GB,最小1MB,设置0为无限。
这个参数不建议设置的太大,如果要做数据可视化,更应该控制在20-30MB以内。
过大会导致OOM。
spark.extraListeners
默认none,随着SparkContext被创建而创建,用于监听单参数、无参数构造函数的创建,并抛出异常。
② Runtime Environment 运行环境
主要是一些日志,jvm参数的额外配置,jars等一些自定义的配置,一般不会用到这一块。
③ Shuffle Behavior
spark.reducer.maxSizeInFlight
默认48m。从每个reduce任务同时拉取的最大map数,每个reduce都会在完成任务后,需要一个堆外内存的缓冲区来存放结果,如果没有充裕的内存就尽可能把这个调小一点。。相反,堆外内存充裕,调大些就能节省gc时间。
spark.reducer.maxBlocksInFlightPerAddress
限制了每个主机每次reduce可以被多少台远程主机拉取文件块,调低这个参数可以有效减轻node manager的负载。(默认值Int.MaxValue)
spark.reducer.maxReqsInFlight
限制远程机器拉取本机器文件块的请求数,随着集群增大,需要对此做出限制。否则可能会使本机负载过大而挂掉。。(默认值为Int.MaxValue)
spark.reducer.maxReqSizeShuffleToMem
shuffle请求的文件块大小 超过这个参数值,就会被强行落盘,防止一大堆并发请求把内存占满。(默认Long.MaxValue)
spark.shuffle.compress
是否压缩map输出文件,默认压缩 true
spark.shuffle.spill.compress
shuffle过程中溢出的文件是否压缩,默认true,使用spark.io.compression.codec压缩。
spark.shuffle.file.buffer
在内存输出流中 每个shuffle文件占用内存大小,适当提高 可以减少磁盘读写 io次数,初始值为32k
spark.shuffle.memoryFraction
该参数代表了Executor内存中,分配给shuffle read task进行聚合操作的内存比例,默认是20%。
cache少且内存充足时,可以调大该参数,给shuffle read的聚合操作更多内存,以避免由于内存不足导致聚合过程中频繁读写磁盘。
spark.shuffle.manager
当ShuffleManager为SortShuffleManager时,如果shuffle read task的数量小于这个阈值(默认是200),则shuffle write过程中不会进行排序操作,而是直接按照未经优化的HashShuffleManager的方式去写数据,但是最后会将每个task产生的所有临时磁盘文件都合并成一个文件,并会创建单独的索引文件。
当使用SortShuffleManager时,如果的确不需要排序操作,那么建议将这个参数调大一些,大于shuffle read task的数量。那么此时就会自动启用bypass机制,map-side就不会进行排序了,减少了排序的性能开销。但是这种方式下,依然会产生大量的磁盘文件,因此shuffle write性能有待提高。
spark.shuffle.consolidateFiles
如果使用HashShuffleManager,该参数有效。如果设置为true,那么就会开启consolidate机制,会大幅度合并shuffle write的输出文件,对于shuffle read task数量特别多的情况下,这种方法可以极大地减少磁盘IO开销,提升性能。
如果的确不需要SortShuffleManager的排序机制,那么除了使用bypass机制,还可以尝试将spark.shuffle.manager参数手动指定为hash,使用HashShuffleManager,同时开启consolidate机制。
spark.shuffle.io.maxRetries
shuffle read task从shuffle write task所在节点拉取属于自己的数据时,如果因为网络异常导致拉取失败,是会自动进行重试的。该参数就代表了可以重试的最大次数。如果在指定次数之内拉取还是没有成功,就可能会导致作业执行失败。
对于那些包含了特别耗时的shuffle操作的作业,建议增加重试最大次数(比如60次),以避免由于JVM的full gc或者网络不稳定等因素导致的数据拉取失败。在实践中发现,对于针对超大数据量(数十亿~上百亿)的shuffle过程,调节该参数可以大幅度提升稳定性。
spark.shuffle.io.retryWait
同上,默认5s,建议加大间隔时长(比如60s),以增加shuffle操作的稳定性。
spark.io.encryption.enabled + spark.io.encryption.keySizeBits + spark.io.encryption.keygen.algorithm
io加密,默认关闭
④ Spark UI
这一块配置,是有关于spark日志的。日志开关,日志输出路径,是否压缩。
还有一些可视化界面、端口的配置
⑤ Compression and Serialization
spark.broadcast.compress
广播变量前是否会先进行压缩。默认true (spark.io.compression.codec)
spark.io.compression.codec