spark调优点

spark调优详解

Apache Spark 内存管理详解转载

Spark性能优化指南——基础篇转载

Spark性能优化指南——高级篇转载

Spark官方调优文档翻译转载

一、开发调优

1、RDD复用与持久化

2、避免使用shuffle算子

      join操作,rdd1.join(rdd2)===>>>rdd较小的情况下,可以通过       

      broadcast传播,并通过map进行查找关联项

3、使用map-side预聚合

    reduceByKey和aggregateBykey会进行预聚合

4、使用高性能算子

      reduceByKey和aggregateBykey 替换groupByKey

       mapPartitions 替代普通map,但要小心OOM

       foreachPartitions替代foreach

       filter后进行coalesce手动减少partitions数量

       repartitionAndSortWithinPartitions 替代repartition和sort类操作(重 分区的shuffle和排序sort同时进行)

5、广播大变量

     默认情况下,算子函数使用外部变量,复制多个副本,网络传输到每个task,使用广播功能,保证每个Executor的内存中,只驻留一份副本,从而减少副本,减小网络开销,减少Executor内存占用,降低GC频率

6、使用kryo优化序列化性能

     需要注册所有要进行序列化的自定义类型

    conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")

    conf.registerKryoClasses(Array(classOf[MyClass1], classOf[MyClass2]))

7、优化数据结构

    在可能以及合适的场景下,使用内存占用较少的数据结构

 

二、资源调优

Executor内存分配

task执行编写的代码 0.2

task通过shuffle拉取上一个stage,进行聚合操作0.2

rdd持久化 0.6

 

num-executors  50-100个

executor-memory  4-8G比较合适

executor-cores 2-4

driver-memory 默认1G足够,需要注意collect算子将数据拉取到driver导致的OOM

spark.default.parallelism 

每个stage默认task数量 ,建议是num-executors*executor-cores 的2-3倍为好,以充分利用集群资源

spark.storage.memoryFraction

持久化比例,默认0.6,如果作业由于频繁GC导致运行缓慢,意味着task执行用户代码内存不够,可以适当调低该参数

spark.shuffle.memoryFraction

0.2,如果shuffle聚合时空间不够,会溢写到磁盘,降低应用性能

 

三、数据倾斜调优

导致数据倾斜的算子

distinct,groupbykey,reducebykey,aggregatebykey,join,cogroup等

stage0 map,shuffle write

state1 shuffle read,groupbykey

略.

 

四、shuffle调优

shuffleManager

未经优化:

stage0 每个task的磁盘文件数和stage1的task数目相等

SortShuffleManager

普通运行机制

       溢写之前排序,批量写入,合并磁盘文件为1个,另外还有索引文件,标识下游task数据对应在文件中的start offset和end offset位置,每个task一个磁盘文件

bypass机制

        磁盘写机制不同,写机制和未经优化的一样,不会排序

 

五、checkpoint

1、保存元数据

应用配置,流式未崩溃之前的各种操作,未完成的batch,元数据保存到HDFS主要针对driver失败后的修复

2、流式数据

HDFS,主要针对window operation,有状态操作,失败之后,不需要将很长的历史数据重算

3、设置checkpoint周期

DStream.checkpoint(interval)一般为batch 5~10倍

4、write ahead logs

可选,促使输入数据写入checkpoint

5、零丢失

checkpoint机制,writeaheadlog,receiver缓存机制,可靠的receiver(数据接收并备份成功后发送ack)可以保证数据零丢失

 

附:参数设置

spark.shuffle.file.buffer

默认32k,磁盘缓冲区,调大减少io次数

spark.reducer.maxSizeInFlight

默认48M,设置shuffle read task 的buffer缓冲大小,决定每次拉取数据量

spark.shuffle.io.maxRetries

默认3,shuffle read 拉取数据时,网络异常导致失败后重试次数

spark.shuffle.io.retryWait

默认5s,重试拉取等待的时间间隔,适当调大,增加shuffle稳定性

spark.shuffle.manager

默认sort,不需要排序的话可以调整bypass或者未经优化的hashshufflemanager

spark.shuffle.sort.bypassMergeThreshold

默认200,如果read task 数小于200,write过程不会排序

spark.shuffle.consolidateFiles

默认false,使用hashShuffleManager时true能够大幅度合并write输出文件,spark.shuffle.manager 参数为hash,设置该参数true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值