zoukankan      html  css  js  c++  java
  • Spark面试题(持续更新)

    1.RDD中reduceBykey与groupByKey哪个性能好,为什么?

    reduceByKey:reduceByKey会在结果发送至reducer之前会对每个mapper在本地进行merge,有点类似于在MapReduce中的combiner。这样做的好处在于,在map端进行一次reduce之后,数据量会大幅度减小,从而减小传输,保证reduce端能够更快的进行结果计算。
    groupByKey:groupByKey会对每一个RDD中的value值进行聚合形成一个序列(Iterator),此操作发生在reduce端,所以势必会将所有的数据通过网络进行传输,造成不必要的浪费。同时如果数据量十分大,可能还会造成OutOfMemoryError。
    通过以上对比可以发现在进行大量数据的reduce操作时候建议使用reduceByKey。不仅可以提高速度,还是可以防止使用groupByKey造成的内存溢出问题。

    2.Spark与MapReduce的区别

    1. 针对迭代的业务场景,Spark可以基于内存计算,MR是基于磁盘
      spark与Hadoop MR不同的是,任务的中间结果可以保存到内存中,大大地提高了计算性能.
    2. Spark中有DAG有向无环图切分任务的执行先后顺序
    3. Spark存储数据可以指定副本个数(持久化存储),MR默认3份。
    4. MapReduce中只有map reduce两端,逻辑实现需要自己实现, Spark中有各种场景算子适用不同的场景。
      spark中做了很多已有的算子的封装,提供了各种场景的算子,而MR中只有map和reduce 相当于Spark中的map和reduceByKey两个算子
    5. Spark是粗粒度资源申请,Application执行快,MR是细粒度资源申请
    6. Spark中shuffle map端自动聚合功能,MR需要手动设置
    7. Spark中shuffle ByPass机制有自己灵活的实现

    3.Spark运行模式(部署模式)

    • Local

      在本地eclipse、IDEA中写spark代码运行程序,一般用于测试

    • Standalone

      spark自带的资源调度框架(可以抛开hdfs,抛开yarn去运行),支持完全分布式集群搭建。Spark可以运行在standalone集群上

    • Yarn

      Hadoop生态圈里面的一个资源调度框架,Spark也是可以基于Yarn来计算的。

      要基于Yarn来进行资源调度,必须实现AppalicationMaster接口,Spark实现了这个接口,所以可以基于Yarn。

    • Mesos

      运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算,(很少用)

    4.RDD五大特性

    1. RDD是由一系列的partition组成的。
    2. 算子(函数)是作用在RDD的每一个partition(split)上的。
      算子:Spark中,RDD的方法就叫算子(也叫函数)如flatMap,map,reduceByKey,foreach
    3. RDD之间有一系列的依赖关系,可以基于上一个RDD重新计算出RDD。。
      RDD2丢失了的话,可以将flatMap作用到RDD1上来生成RDD2
      RDD2依赖于RDD1产生,RDD3依赖于RDD2来产生
    4. 分区器是作用在K,V格式的RDD上。
      分区器:决定数据去哪一个分区 hash()%reduce个数
    5. Partition对外提供最佳的计算位置,利于数据处理的本地化。“计算移动,数据不移动”
      如要处理某个节点上的数据时

    5.RDD的弹性体现在什么方面?

    1.自动进行内存和磁盘数据存储的切换

    Spark优先把数据放到内存中,如果内存放不下,就会放到磁盘里面,程序进行自动的存储切换

    2.基于Lineage(血统)的高效容错机制

    在RDD进行转换和动作的时候,会形成RDD的Lineage依赖链,当某一个RDD失效的时候,可以通过重新计算上游的RDD来重新生成丢失的RDD数据。

    3.Task 如果失败会自动进行特定次数的重试

    默认重试次数是4次。

    TaskSchedulerImpl 是底层任务调度TaskScheduler的实现,这些Schedulers 从每一个Stage 中的DAGScheduler 中获取TaskSet,运行它们会尝试是否有故障。

    4.Stage 如果失败会自动进行特定次数的重试,而且只会计算失败的分片

    Stage 类注释

    Finally, a single stage can be re-executed in multiple attempts due to fault recovery. In that* case, the Stage object will track multiple StageInfo objects to pass to listeners or the web UI.* The latest one will be accessible through latestInfo.
    

    5.checkpoint 和persist,可主动或被动触发

    RDD可以通过Persist持久化将RDD缓存到内存或者磁盘,当再次用到该RDD时直接读取就行。也可以将RDD进行检查点,检查点会将数据存储在HDFS中,该RDD的所有父RDD依赖都会被移除

    checkpoint【每次对RDD操作都会产生新的RDD,如果链条比较长,计算比较笨重,就把数据放在硬盘中】和persist 【内存或磁盘中对数据进行复用】(检查点、持久化)

    6.数据调度弹性: DAGScheduler ,TASKScheduler调度 和资源管理无关

    Spark 将Job执行模型抽象为通用的有向无环图(DAG),这可以将多Stage的任务串联或并行执行,从而不需要将Stage 中间结果写到HDFS 中,调度引擎自动处理Stage的失败以及Task的失败。

    7.数据分片的高度弹性(coalesce,repartition)

    可以根据业务的特征,动态调整数据分片的个数,提升整体的应用执行效率。

  • 相关阅读:
    Spring IoC
    常见切入点表达式的例子(aop execution 表达式 )
    数据结构与算法(2)栈、中缀表达式、递归
    数据结构与算法(1)稀疏数组、队列、链表
    airflow实践
    head first 设计模式笔记13-与设计模式相处,剩下的模式,模式的分类
    head first 设计模式笔记12-复合模式
    head first 设计模式笔记11-代理模式
    head first 设计模式笔记10-状态模式
    WebDriver自动化测试常用处理方法
  • 原文地址:https://www.cnblogs.com/chenxiaoge/p/13335453.html
Copyright © 2011-2022 走看看