前言:
现在姐妹们对“spark shuffle并行度”可能比较注重,朋友们都需要学习一些“spark shuffle并行度”的相关资讯。那么小编也在网上网罗了一些关于“spark shuffle并行度””的相关知识,希望看官们能喜欢,姐妹们一起来学习一下吧!如果面试时被问到spark任务如何调优,我们该如何回答呢?
下面我们从四大方面回答这个问题,保证吊打面试官。
一、spark性能调优
1、分配更多的资源
比如增加执行器个数(num_executor)、增加执行器个数(executor_cores)、增加执行器内存(executor_memory)
2、调节并行度
spark.default.parallelism
3、重构RDD架构以及RDD持久化
尽量去复用RDD,差不多的RDD可以抽取成一个共同的RDD,公共RDD一定要实现持久化
4、广播变量
SparkContext.broadcast方法创建一个对象,通过value方法访问
5、使用kryo序列化
SparkConf中设置属性:spark.serializer: org.apache.spark.serializer.kryoSerializer
6、使用fastutil优化数据格式(代替java中的Array、List、Set、Map)
7、调节数据本地化等待时长
调节参数: spark.locality.wait
二、JVM调优
降低cache操作的内存占比 1.6版本之前使用的是静态内存管理
spark中堆内存被划分为两块:
一块是专门来给RDD作cache\persist持久化的 StorageMemory,另一块是给spark算子函数运行使用的,存放函数中自己创建的对象。
1.6版本之后采用统一内存管理机制
storage和execution各占50%,若己方不足对方空余可占用对方空间
可尝试调节executor堆外内存
spark.yarn.executor.memoryOverhead = 2048m
调节连接等待时长
spark.core.connection.ack.wait.timeout = 300
三、shuffle数据倾斜调优
1、预聚合源数据,对hive源表提前进行聚合操作,在hive聚合之后,spark任务再去读取
2、检查倾斜的key是否是脏数据,可以提前过滤
3、提高shuffle操作reduce的并行度
4、使用随机key实现双重聚合
5、将reduce端 join转换成map端 join
6、sample采样倾斜key,单独进行join后在union
7、使用随机数以及扩容表进行join
四、算子调优
1、使用mapPartition提升map类操作的性能
2、filter过后使用coalesce减少分区数量
3、使用foreachPartition优化写数据性能
4、使用repartition解决sparkSql低并行度的性能问题
5、reduceByKey替换groupByKey实现map读预聚合
关注【飞哥大数据】,私信回复666 获取2022年100+公司面试真题,以及spark与flink面试题汇总
标签: #spark shuffle并行度