Spark面试题(二)

本文深入探讨了Spark的相关面试问题,涵盖了Spark Streaming与Storm的区别、Spark的组件、工作机制、宽窄依赖、stage划分、缓存策略、与Flume的整合、数据丢失保障、Hadoop与Spark的shuffle对比、RDD特性、Spark的优劣势、Shuffle过程、Spark SQL性能、Spark工作流程、性能优化策略、Spark on Yarn与Standalone的区别、不同模式、内存管理和广播变量的优化、数据本地性、Spark on Yarn的优势、Task类型、map与mapPartitions的区别以及Python开发中添加第三方模块的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、spark streaming和storm有何区别?

一个实时毫秒,一个准实时亚秒,不过storm的吞吐率比较低。

 

二、spark有哪些组件?

Master:管理集群和节点,不参与计算。

Worker:计算节点,进程本身不参与计算,和master汇报。

Driver:运行程序的main方法,创建sparkcontext对象。

Spark context:控制整个application的生命周期,包括DAGSchedular和TaskSchedular等组件。

Client:用户提交程序的入口。

 

三、spark的工作机制

用户在client端提交作业后,会由Driver运行main方法并创建spark context。

执行RDD算子,形成DAG图输入DAGSchedular,按照RDD之间的依赖关系划分stage输入TaskSchedular。

TaskSchedular会将stage划分为task set分发到各个节点的executor中执行。

 

四、spark中的宽窄依赖

RDD和他依赖的父RDD的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。

宽依赖:指的是多个子RDD的partition会依赖同一个父RDD的partition。

窄依赖:指的是每一个父RDD的partition最多被子RDD的一个Partition使用。

 

五、spark中如何划分stage?

1.spark application中可以因为不同的action触发众多的job,一个Application中可以有很多job,每个job是有一个或多个stage构成的,后面的stage依赖于前面的stage,也就是说只有前面的stage计算完毕后,后面的stage才会运行。

2.stage划分的依据是宽依赖,何时产生宽依赖,例如ReduceBykey,GroupByKey的算子,会导致宽依赖的产生。

3.由Action算子(例如collect)导致了SparkContext.RunJob的执行,最终导致了DAGSchedular的submitJob的执行,其核心是通过发送一个case class Jobsubmitted对象给eventProcessLoop。

EventProcessLoop是DAGSchedularEventProcessLoop的具体事例,而DAGSchedularEventProcessLoop是eventLoop的子类,具体实现EventLoop的onReceiver方法,onReceiver方法转过来回调doOnReceive。

4.在handleJobSubmitted中首先创建finalStage,创建finalStage时候会建立父Stage的依赖链条。

总结:依赖是从代码的逻辑层面上来展开说的,可以简单点说:写介绍什么是RDD中的宽窄依赖,然后再根据DAG有向无环图进行划分,从当前job的最后一个算子往前推,遇到宽依赖,那么当前在这个批次中的所有算子操作都划分成一个stage,然后继续按照这种方式再继续往前推,如再遇到宽依赖,又划分成一个stage,一直到最前面的一个算子。最后整个job会被划分成多个stage,而stage之间又存在依赖关系,后面的stage依赖于前面的stage。

 

六、spark-submit的时候如何引入外部jar包

在通过spark-submit提交任务时,可以通过添加配置参数来指定:

--driver-class-path 外部jar包

--jars 外部jar包

 

七、spark中cache和persist的区别?

Cache:缓存数据,默认是缓存在内存中,,其本质还是调用persist

Persist:缓存数据,有丰富的缓存策略。数据可以保存在内存也可以保存在磁盘中,使用的时候指定对应的缓存级别。

 

八、flume整合Spark S

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值