4道Spark面试必问题, 别面试挂了再开始看 !!

Posted 大数据与数据仓库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4道Spark面试必问题, 别面试挂了再开始看 !!相关的知识,希望对你有一定的参考价值。

1. Spark的宽窄依赖

  • 窄依赖指的是每一个父RDD的Partition最多被下游RDD的一个Partition依赖

  • 宽依赖指的是一个Parent RDD的Partition被多个子RDD的Partition依赖

2. Spark 如何做Stage划分?如何优化?

总结一点: 当Spark 遇到宽依赖时会划分Stage

  • 对于宽依赖来说,由于Shuffle的存在,只能在上游RDD 的Shuffle 处理结束后,才能开始接下来的计算,因此宽依赖作为Spark划分Stage的依据,即Spark根据宽依赖将DAG划分为不同的Stage。

  • 对于窄依赖来说,由于Partition之间的依赖关系是确定的,Partition的转换处理可以在同一个线程里完成,为了提高数据处理速度, 窄依赖被Spark划分到同一个执行阶段。

  • 在一个Stage内部,每个Partition都会被分配一个计算任务(Task),这些Task是可以并行执行的。Stage之间根据依赖关系变成了一个大粒度的DAG,这个DAG的执行顺序也是从前向后的。也就是说,Stage只有在它是Stage的开端或者上游 Stage都已经执行结束后,才会执行。

优化方法

  • 由于宽依赖会进行Stage的划分并产生shuffle,而Shuffle操作由于涉及大量的网络传输,较为耗时,故需尽量避免使用会产生shuffle的算子,如reduceByKey, groupByKey, intersection等,可以使用其他的算子来代替。

3. 请描述下Spark的Shuffle过程

Shuffle阶段可进一步划分成三个子过程, 分别如下:

  • Shuffle Write:一批任务(ShuffleMapTask)将程序输出的临时数据并写到本地磁盘。由于每个任务产生的数据要被下一个阶段的每个任务读取一部分,因此存入磁盘时需对数据分区,分区可以使用Hash与Sort两种方法;

  • Shuffle Read:下一个阶段启动一批新任务(ResultTask),它们各自启动一些线程远程读取Shuffle Write产生的数据;

  • Aggregate:一旦数据被远程拷贝过来后,接下来需按照key将数据组织在一起,为后续计算做准备。

4. Spark如何解决数据倾斜问题?

  • 避免产生 shuffle,可在数据输入 spark 之前进行预处理,比如在 Hive 中按照 key 进行分组。或者使用map等算子替代 shuffle 过程,即将 reduce join 替换为map join。

  • 若其中有一个 RDD 很小,则可以将该小RDD进行广播。

  • 如果避免不了 shuffle,可以减少单个 reduce task 的数据量,如缩小 key 粒度并增加 reduce task 数量。也可以通过随机数多次聚合来降低每次聚合时的数据倾斜,聚合之后,把添加的随机数还原为原始的 key,然后对 key 做最后的聚合。

  • 多个 key 导致数据倾斜,首先可以通过采样才确定导致倾斜的key, 如果导致倾斜的key对业务没有影响,则可以直接过滤;如果对业务有影响,则可以将倾斜的key单门拿出来做处理。

以上是关于4道Spark面试必问题, 别面试挂了再开始看 !!的主要内容,如果未能解决你的问题,请参考以下文章

9道Java集合面试题,搞定了再去投简历吧!

万字长文玩转Spark面试: 进大厂必看!

20道Android工程师面试必问题,安卓系列学习进阶视频

合格linux运维人员必会的30道shell编程面试题及讲解

合格linux运维人员必会的30道shell编程面试题及讲解

面试46 道阿里巴巴 Java 面试题,你会几道?