「每日一道大数据面试题系列」spark如何调优
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「每日一道大数据面试题系列」spark如何调优相关的知识,希望对你有一定的参考价值。
参考技术A如果面试时被问到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作cachepersist持久化的 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读预聚合
大数据面试题系列一
Hadoop
Hive
1、Hive-SQL查询连续活跃登录用户思路详解
2、页面停留时长 LEAD 和 LAG
Kafka
Hbase
Spark
1、Spark的Cache和Checkpoint区别和联系
2、Spark 参数调优
3、Spark 数据倾斜
4、GC导致的 Shuffle文件拉取失败
Flink
1、Flink中的Checkpoint和Spark中的Checkpoint区别
2、Flink反压机制及与Spark Streaming的区别
以上是关于「每日一道大数据面试题系列」spark如何调优的主要内容,如果未能解决你的问题,请参考以下文章