美文网首页
Spark相关面试问题整理

Spark相关面试问题整理

作者: lxhao | 来源:发表于2020-02-14 21:22 被阅读0次
    1. Spark和MapReduce的区别?
      Spark和MapReduce都是分布式计算框架,都是采用map-reduce的编程模型,map段执行map函数把数据处理成k-v对,reduce阶段聚合相同k的数据,执行reduce函数,他们的不同点如下:
      a. 整体调度上,MapReduce执行一个map-reduce任务后必须把数据写入共享存储(比如HDFS),才能重新申请资源执行下一个map-reduce任务。Spark根据数据是否发生shuffle把多个map-reduce任务拆分成多个Stage,根据Stage之间的依赖关系构建DAG进行统一调度,中间结果不需要写入共享存储,可以直接保存在内存中或写入本地磁盘,从而避免了重复的资源申请和容器初始化,也避免了把数据写入HDFS带来的网络资源消耗和等待耗时。
      b. 具体的Task调度上来看,MapReduce采用了多进程模型,每个节点上运行多个Task,每个Task拥有独立的进程,而Spark采用了多线程模型,每个节点上运行多个Executor,每个Executor维护一个线程池用来运行Task。MapReduce上对每个Task都需要执行“申请资源” -> “运行Task” -> “释放资源”。Spark采用线程池方式的耗时:a. 避免了资源的反复申请和释放,节省耗时;b. 实际数据处理中,很容易出现数据倾斜,所有Task共享Executor的内存可以减少OOM;c. 广播变量只需要在Executor中加载一次,后续Task可以反复使用。
      c. 具体的Task执行上,MapReduce会对map任务的输出结果根据key排序,reduce任务也会对从map端读取的数据进行排序后再处理,Spark则不会做排序操作。
      d. API上,MapReduce只有map和reduce接口,Spark提供了更丰富的API,如纯Map操作的map, flatMap, filter, keyBy,涉及Reduce阶段的reduceByKey, sortByKey, mean, gourpBy, sort等。

    2. 介绍下Spark的RDD?
      RDD是Spark的核心,是一个抽象的只读、分布式数据集,可以从文件或以一个已有的RDD生成一个新的RDD,RDD提供了各种各样的算子,通过这些算子可以对数据进行处理,这些算子分为两类,Transformation算子和Action算子,Transformation算子对数据处理后返回一个新的RDD,连续处理的RDD之间会存在依赖关系,这个依赖关系叫做Lineage,根据Lineage可以实现RDD的容错,此外,根据RDD间是否有shuffle,把RDD切分成多个Stage构成DAG,Spark会根据DAG做统一的调度。

    3. RDD的弹性体现在哪里?
      a. Task失败重试,默认重试4次。
      b. Stage失败重试,而且只重试失败的部分。
      c. 内存和磁盘自动转换(比如cache,map任务的处理结果)。
      d. 支持设置checkpoint。

    相关文章

      网友评论

          本文标题:Spark相关面试问题整理

          本文链接:https://www.haomeiwen.com/subject/dfddfhtx.html