Spark优化

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拉取的最大记录条数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值