Spark常见问题整理--面试前必看

一、job、stage、Task之间的关系是什么?

  • 一个job可以包含多个stage

  • 一个stage包含多个task

二、job、stage、Task之间的关系是什么?

  • 每提交一个任务,就会创建一个job,即调用action算子的时候会创建job【当调用算子之后返回值不是RDD类型的就可以归为Action算子】
  • 根据宽依赖和窄依赖划分stage,如果是宽依赖,就新增一个stage
  • Task数量实际上就是分区的数量

三、什么是宽依赖、窄依赖?

  • 如果一个父RDD分区被多个子RDD的分区使用,就是宽依赖【超生】如果一个父RDD分区被多个子RDD的分区使用,就是宽依赖【超生】
  • 如果一个父RDD分区只被一个子RDD分区使用,就是窄依赖【独生】如果一个父RDD分区只被一个子RDD分区使用,就是窄依赖【独生】
  • abstract class Dependencyabstract class Dependency
    • abstract class NarrowDependency extend Dependency 有一个抽象方法,getParents()
      • class OneToOneDependency extend NarrowDependency 实现抽象方法getParents()
      • class RangeDependency extend NarrowDependency 实现抽象方法getParents()class RangeDependency extend NarrowDependency 实现抽象方法getParents()
    • class ShuffleDependency extend Dependencyclass ShuffleDependency extend Dependency

四、Action算子和Transformation算子是什么,列举一些?

  • Action算子会创建job,会立即执行。 例如:take ,first,collect,foreach,foreachPartition。

  • Transformation不会立即执行,但是里边会记录一些依赖关系,还有函数。 例如:map,filter,flatMap,reduceByKey,groupByKey等等。

五、reduceByKey和groupByKey有什么区别?

reduceByKey:reduceByKey 会在结果发送至reducer 之前会对每个mapper 在本
地进行merge,有点类似于在MapReduce 中的combiner。这样做的好处在于,
在map 端进行一次reduce 之后,数据量会大幅度减小,从而减小传输,保证reduce
端能够更快的进行结果计算。

groupByKey:groupByKey 会对每一个RDD 中的value 值进行聚合形成一个序列
(Iterator),此操作发生在reduce 端,所以势必会将所有的数据通过网络进行传输,
造成不必要的浪费。同时如果数据量十分大,可能还会造成OutOfMemoryError。

结论:

所以在进行大量数据的reduce 操作时候建议使用reduceByKey。不仅可以提高速
度,还可以防止使用groupByKey 造成的内存溢出问题。

六、RDD五大属性

请添加图片描述

七、Spark的架构与作业提交流程

请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值