Spark 面试总结

Spark 通用问题

任务提交流程

  1. 用户创建Spark程序并提交
  2. 每个action会生成一个job,包含了一系列的RDD和对其如何进行操作的transformation
  3. 每个job生成一个DAG(有向无环图)
  4. DAGScheduler根据宽依赖对DAG进行划分stage并生成task组(一个stage对应一组task,一个partition对应一个task)
  5. Spark集群在worker上以一组Task为单位进行执行计算
image.png

宽窄依赖

image.png
  • 窄依赖: 一个父RDD的 partition 至多被子 RDD 某个partition 使用一次 (union, map,filter)
  • 宽依赖: 一个父RDD 的partition会被子RDD的partition使用多次,有 shuffle ,遇到shuffle,stage会被拆分

Spark中产生宽窄依赖的依据为是否会产生shuffle,当发生shuffle时,会产生宽依赖,基本上shuffle算子都会产生宽依赖,但是join除外,在执行join算子之前如果先执行groupByKey,执行groupByKey之后,会把相同的key分到同一个分区,再执行join算子,join算子是把key相同的进行join(只是对于k v形式的数据可以使用),不一定会产生shuffle

Spark core

执行流程详解

Spark on yarn 执行流程

Spark SQL

dataFrame、dataset、RDD 的区别和联系

Spark Streaming

你可能感兴趣的:(Spark 面试总结)