spark面试官喜欢问的细节问题

1. EventTimeLine 的颜色代表

  • 红色 Task Deserialization Time 任务反序列化时间Task Deserialization Time,一般来说它不应该这占用如此大的比例
  • 绿色 Executor Computing Time 的比例,就是executor真正执行工作所花的时间
  • 蓝色 Scheduler Delay 等待的时间

2. Scheduling Mode

Spark中的调度模式主要有两种:FIFO和FAIR
哪种调度器由参数spark.scheduler.mode来设置,可选的参数有FAIRFIFO,默认是FIFO 源码中根据用户配置的 SchedulingMode 决定是生成FIFOSchedulableBuilder 还是生成 FairSchedulableBuilder 类型的 schedulableBuilder 对象 在生成 schedulableBuilder 后,调用其buildPools方法生成 调度池 如果不加设置,jobs会提交到 default 调度池 中。由于 调度池 的使用是Thread级别的, wight 调度池的权重 poolname 调度池名 如果有必要,可以去了解FairScheduler是如何在各个Pool之间分配资源,以及每个Pool如何在Job之间分配资源的

3. Spark为什么有些job显示是skiped

Stage对应的TaskSet中所有任务成功执行后,会将Stage对应的StageInfo反馈到JobProgressListener.stageIdToInfo,这样这些任务就不会显示为skipped
任务出现skipped是正常的,之所以出现skipped是因为要计算的数据已经缓存到了内存,没有必要再重复计算。出现skipped对结果没有影响。

4. Spark异步接口task失败任务不会重启

同步任务会在最大重试次数之后停止,异步不会,所以需要针对task级别的任务进行监控,不然任务会一直出错,你却不知道造成业务损失,自定义listener

5. 参数调优

spark.shuffle.memoryFraction
参数说明:该参数用于设置shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能够使用的Executor内存的比例,默认是0.2。也就是说,Executor默认只有20%的内存用来进行该操作。shuffle操作在进行聚合时,如果发现使用的内存超出了这个20%的限制,那么多余的数据就会溢写到磁盘文件中去,此时就会极大地降低性能。
参数调优建议:如果Spark作业中的RDD持久化操作较少,shuffle操作较多时,建议降低持久化操作的内存占比,提高shuffle操作的内存占比比例,避免shuffle过程中数据过多时内存不够用,必须溢写到磁盘上,降低了性能。此外,如果发现作业由于频繁的gc导致运行缓慢,意味着task执行用户代码的内存不够用,那么同样建议调低这个参数的值
当然网上调优文章一大堆,可自行查找

6. Spark 为什么比 MapReduce快

7. Flink与SparkStreaming 的区别

8. 分别介绍Flink、Spark 的内存管理模型

9. 宽窄依赖的区别

10. job 和stage怎么划分

11. RDD、DateSet、DateFrame的区别

12. 如何定位、解决数据倾斜

13.spark 异步接口怎么使用,什么场景使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容