Spark-2.1.1
优化
[外链图片转存失败(img-iMVe0Xre-1568791026774)(C:\Users\shufang\Pictures\e213d95e54c5b4fb355b710a473292ea.jpg)]
spark_conf tuning
1.资源分配优化
合理设置driver、executor的cores、memory
spark.driver.cores ## default 1
spark.driver.memory ## default 1g,1.6之前是512M
# driver端的堆外内存
spark.driver.memoryOverhead ## driverMemory * 0.10, 最小384M
spark.driver.maxResultSize ## default 1g,用来限制collect到driver端的数据大小
## client模式下不能通过sparkconf直接指定,只能通过--driver-java-options,但是该属性不能用来配置最大堆内存(-Xmx),要想设定,必须通过spark.driver.memory(cluster)设定 或者 client模式下--driver-memory设定
spark.driver.extraJavaOptions
spark.executor.memory ## default 1g:executor堆内存
spark.executor.memoryOverhead ## default 384M executor的堆外内存 :executorMemory * 0.10, with minimum of 384
spark.executor.cores ## default 1
spark.executor.extraJavaOptions ##
spark提交脚本如下:
bin/spark-submit
--conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
--master spark://shufang101:7077 ## cluster such as [yarn] [local[*]]
--name wordcount ## sparkapp_name
--class com.shufang.spark.SparkWordCount ## app class name
--driver-memory 8g
--driver-cores 2
## --num-executors
--executor-cores (5-7)
--executor-memory 8g
--jars ##extra jars the app depend on
xxxxxxxxxxxxxxxxxxxxxxxxx.jar ## the jar contains the class
param1 param2...
2.shuffle 优化
spark.reducer.maxSizeInFlight ## default 48m keep it small unless you have a large amount of memory.
spark.shuffle.file.buffer ## default 32k maptask端的缓冲区大小,达到32k就往磁盘进行溢写
spark.shuffle.io.maxRetries ## default 3 reduce从shuffleMapOutputFile最大重试次数
spark.shuffle.io.retryWait ## default 5s reduce从shuffleMapOutputFile拉取的时间
spark.shuffle.sort.bypassMergeThreshold ## default 200 200个reduceTask之内不需要排序
3.压缩、序列化优化
官网详细配置解析:http://spark.apache.org/docs/2.1.1/configuration.html
spark.broadcast.compress ## default true
spark.io.compression.codec ## default lz4 降低io时内存的消耗
spark.io.compression.lz4.blockSize ## default 32K 当使用来默认lz4进行压缩时,降低这个block的值能降低shuffle的内存使用量;
spark.kryo.registrator ## default none 自定义一个类,继承KryoRegistor,可以指定其他自定义类满足kryo序列化,通过sparkconf().set( "spark.kryo.registrator","自定义KryoRegistor全类名")设置。
spark.serializer ## default org.apache.spark.serializer.JavaSerializer 可以通过
## sparkconf().set("spark.serializer","org.apache.spark.serializer.KryoSerializer")指定序列化方式,比Java的序列化快10倍
spark.kryoserializer.buffer.max ## default 64M 当需要序列化的对象特别大,可以适当增大这个值
spark.kryoserializer.buffer ## default 64K 每个worker的Kryo缓存的初始大小
spark.rdd.compress ## default false 可以通过以cpu计算时间为代价 换取内存的消耗,防止OOM
4.内管理优化
GC调优的第一步是收集有关垃圾收集发生频率和GC使用时间的统计信息。这可以通过添加
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStampsJava选项来完成。
spark.memory.fraction ## default 0.6【jvm堆空间 - 300M】*0.6 一般保持这个内存占比不变,因为太低会导致频繁的数据io到磁盘,另外的other 0.4主要是用来存储用户的自定义数据结构,元数据信息
spark.memory.storageFraction ## default 0.5 of 【spark.memory.fraction】 storage memory的内存占比,如果storage内存占比0.5,那么execution内存自动就是0.5
spark.memory.offHeap.enabled ## default false 开启堆外内存
spark.memory.offHeap.size ## default 0 设置对外内存的大小 一般2048M
spark.default.parallelism ## yar-default = max(total_executor_cores ,2) 默认并行度并行度
spark.files.maxPartitionBytes ## default = 128M
rdd的分区决定由一下参数决定
sc.defaultParallelism = ## spark.default.parallelism
sc.defaultMinPartitions = ## min(spark.default.parallelism ,2)
rdd分区数与数据源有关:
scala collection ## sc.defaultParallelism
kafka ## direct方式消费 topic.partitions
hbase ## regions
hive ## max (hdfs上block nums , sc.defaultMinPartitions)
hdfs ## max (hdfs上block nums , sc.defaultMinPartitions)
本地file ## max(本地文件系统上当前文件的分片数,sc.defaultMinPartitions)
5.sparkStreaming 调优
spark.streaming.stopGracefullyOnShutdown ## 默认false 配合yarn application -kill app_id使用
spark.streaming.backpressure.enabled ## default false 背压模式,控制接收数据与消费数据的速度
spark.streaming.kafka.maxRatePerPartition ## default none 每秒从kafka拉取的最大记录条数
背压模式,控制接收数据与消费数据的速度
spark.streaming.kafka.maxRatePerPartition ## default none 每秒从kafka拉取的最大记录条数