字节跳动大数据开发面经答案汇总之Spark篇下集

12.Spark 能产生shuffle的算子

  • reduceByKey、sortByKey
  • repartition、coalesce
  • join、cogroup

13.Spark里的reduce by key和group by key两个算子在实现上的区别并且说一下性能

  • groupByKey只能分组,不能聚合,而reduceByKey包含分组和聚合两个功能
  • reduceByKey会在shuffle前对分区内相同key的数据进行预聚合(类似于MapReduce的combiner),减少落盘的数据量,而groupByKey只是shuffle,不会进行预聚合的操作,因此reduceByKey的会高一些

14.Spark内存管理

  • spark分为堆内内存和堆外内存,堆内内存由JVM统一管理,而堆外内存直接向操作系统进行内存的申请,不受JVM控制 spark.executor.memoryspark.memory.offHeap.size
  • 堆内内存又分为存储内存和执行内存和其他内存和预留内存,存储内存主要存放缓存数据和广播变量,执行内存主要存放shuffle过程的数据,其他内存主要存放rdd的元数据信息,预留内存和其他内存作用相同。

15.看过Spark底层源码没有

  • 看过,比如spark shuffle源码,...

16.Spark 数据倾斜

见之前的文章

17.用Spark遇到了哪些问题

  • 聚合函数导致内存溢出
  • 广播join导致内存溢出
  • 数据倾斜

18.Spark join的有几种实现 *

  • 包括 broadcast hash join,shuffle hash join,sort merge join,前两种都是基于hash join;broadcast 适合一张很小的表和一张大表进行join,shuffle适合一张较大的小表和一张大表进行join,sort适合两张较大的表进行join。
  • 先说一下hash join吧,这个算法主要分为三步,首先确定哪张表是build table和哪张表是probe table,这个是由spark决定的,通常情况下,小表会作为build table,大表会作为probe table;然后构建hash table,遍历build table中的数据,对于每一条数据,根据join的字段进行hash,存放到hashtable中;最后遍历probe table中的数据,使用同样的hash函数,在hashtable中寻找join字段相同的数据,如果匹配成功就join到一起。这就是hash join的过程
  • broadcast hash join分为broadcast阶段和hash join阶段,broadcast阶段就是 将小表广播到所有的executor上,hash join阶段就是在每个executor上执行hash join,小表构建为hash table,大表作为probe table
  • shuffle hash join分为shuffle阶段和hash join阶段,shuffle阶段就是 对两张表分别按照join字段进行重分区,让相同key的数据进入同一个分区中;hash join阶段就是 对每个分区中的数据执行hash join
  • sort merge join分为shuffle阶段,sort阶段和merge阶段,shuffle阶段就是 将两张表按照join字段进行重分区,让相同key的数据进入同一个分区中;sort阶段就是 对每个分区内的数据进行排序;merge阶段就是 对排好序的分区表进行join,分别遍历两张表,key相同就join输出,如果不同,左边小,就继续遍历左边的表,反之,遍历右边的表

19.背压机制应用场景 底层实现

  • 背压机制就是根据JobScheduler 反馈作业的执行信息来动态调整receiver的数据接收率

20.spark RDD持久化

  • 因为RDD实际上是不存储数据的,那么如果RDD要想重用,那么就需要重头开始再执行一遍,所以为了提高RDD的重用性,就有了RDD持久化
  • 分类:缓存和检查点
#数据人的面试交流地##大数据开发面经##23届找工作求助阵地##我的实习求职记录#
全部评论
这个岗加班多吗
点赞 回复
分享
发布于 2023-05-31 21:45 湖北
大佬是拿到offer了吗
点赞 回复
分享
发布于 2023-05-31 22:30 黑龙江
滴滴
校招火热招聘中
官网直投

相关推荐

5 38 评论
分享
牛客网
牛客企业服务