「每日一道大数据面试题系列」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如何调优的主要内容,如果未能解决你的问题,请参考以下文章

Spark面试题——Spark资源调优

大数据面试题汇总(不断更新中)

最全的大数据面试系列Spark面试题大全

最全的大数据面试系列Spark面试题大全

最全的大数据面试系列Spark面试题大全

最全的大数据面试系列Spark面试题大全