大数据秋招面经之spark系列

本文详细梳理了Spark面试中的高频问题,涵盖了Spark介绍、分组取TopN方案、repartition与coalesce的区别、OOM问题及其解决方案、与其他流处理框架的对比、部署方式、任务调度策略等内容,深入探讨了Spark的性能调优、数据处理原理及核心概念,是准备大数据秋招的宝贵资料。
摘要由CSDN通过智能技术生成

文章目录


前言

spark是大数据面试重点,基本属于必须要熟练掌握的内容,考点要远多于hadoop。


提示:以下是本篇文章正文内容,下面案例可供参考

spark高频面试题汇总

1.spark介绍

  1. 基于内存,spark把中间数据放到内存,迭代效率高

  2. spark容错性高,spark引入弹性分布式数据集RDD,数据集一部分丢失,可根据血统进行重建。

  3. spark更加通用,算子更多

  4. 可用于处理复杂的批处理或者基于实时的流式处理(微批)

  5. spark组件:spark core,spark sql,spark streaming,MLib,GraphX

2.spark分组取TopN方案总结:方案2是最佳方案。

方案1:
相同的key为一组,然后groupBykey()后得到数据名叫grouped,然后对grouped进行mapValues就把一个个value取出来,然后将values转化为list调用sorted算子进行排序(默认是升序的,所以要自定义排序比较器,规则为降序)

grouped.mapValues(arr=>arr.toList.sorted( 
     new Ordering[(int,int)]{
   
        override def compare(x:(int,int),  y:(int,int) =y._2.compareTo(x._2))
                         }).take(n))         
        或者用sortBy(xxx,false)来降序

成本:发生了一次shuffle
问题:groupBykey,mapValues在使用时将大数据量放入内存时易发生oom。

方案2:取出所有key,对key进行迭代,每次取出一个key利用spark的排序算子进行排序。用combineByKey代替groupByKey可解决oom问题,它会尽量压缩内存中的数据。
combineByKey中的三个函数:
第一个函数:处理第一条记录,如果key原来未遇到过,就创建key对应的累加器的初始值。
第二个函数:处理第二条以及后续的记录的相关逻辑(其中有排序过程) ,如果key原来遇到过,使用该方法将key的累加器对应的当前值与新值合并。
第三个函数:将各个分区的结果合并

方案3:自定义分区器,按照key进行分区,不同的key进入到不同分区,对每个分区用spark的排序算子进行排序

3. repartition与coalesce

repartition的底层调用了coalesce,且repartition的其中一个入参是true:表示一定发生shuffle,会进行重新分区。
coalesce会不会发生shuffle与入参传入的参数是false还是true有关,true就会发生shuffle。
所以当有增加分区数需求时必会发生shuffle,可用repartiton,当减少分区数时刻用coalesce,避免发生shuffle,用IO使数据移动。

4. spark的oom问题怎么产生的以及解决方案

第一数据倾斜的话可以先局部聚合再全局聚合
第二某些算子可能造成oom,比如groupByKey

5.storm与flink,spark str

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值