spark运行流程

 

spark面试题2021 spark笔试题_大数据

 1.Driver创建一个sparkContext

2.sparkContext向资源管理器注册并申请启动executor,资源管理器启动executor

3.executor向sparkContext申请task

4.sparkContext将应用程序分发给executor

5.sparkContext建成DAG图,DAGScheduler将DAG图解析成stage,每个stage有多个task,形成taskSet发送给taskScheduler,由taskScheduler将task发送给executor运行

6.tast在executor上运行,运行完释放所有资源

spark有哪些组件?

1.master:管理集群和节点,不参与计算

2.worker:计算节点,管理executor,和master汇报

3.Driver:运行程序的main方法,创建sparkContext对象

4.sparkContext:控制整个application的生命周期,包括dagScheduler和taskScheduler等组件

5.client:用户提交程序的入口

SparkRDD机制理解吗?

rdd是分布式弹性数据集,所有的算子都是基于rdd来执行的,rdd执行过程中会形成dag图,然后形成后lineage,如果某个节点上的rdd分区因为节点故障,导致数据丢失,那么rdd可以根据自己的数据来源重新计算该分区,保证容错性,rdd存储是block和node之间的映射,逻辑上是一个hdfs文件,他是被分区的,每个分区分布在集群中不同节点上,从而让rdd的数据可以并行计算.rdd的数据默认存放在内存中,但是内存资源不足时,spark会自动将rdd数据写入磁盘。

rdd中reduceByKey和groupByKey哪个性能好,为什么?

reduceByKey 和 groupByKey都存在shuffle操作,但是reduceByKey可以在shuffle之前对分区内相同key的数据集进行预聚合(combine)功能,这样会较少落盘的数据量,而groupByKey只是进行分组,不存在数据量减少的问题,reduceByKey性能比较高。
 reduceByKey其实包含分组和聚合的功能;groupByKey只能分组,不能聚合,所以在分组聚合的场合下,推荐使用reduceByKey,如果仅仅是分组而不需要聚合,那么还是只能使用groupByKey。

cogroup rdd实现原理,在什么场景下使用过这个rdd?

cogroup:对多个rdd中的kv元素,每个rdd中相同的key中的元素分别聚合成一个集合。

与reduceByKey不同的是:reduceByKey针对一个rdd中相同的元素进行合并,而cogroup针对多个rdd中相同的key的元素进行合并。

cogroup的函数实现:这个实现根据要进行合并的两个rdd操作,生成一个CoGroupedRDD的实例,这个rdd的返回结果是把相同的key中两个rdd分别进行合并操作,最后返回的rdd的value是一个pair的实例,这个实例包括两个iterable的值,第一个值表示的是rdd1中相同key的值,第二个值表示的是rdd2中相同key的值。

场景:表关联查询或者处理重复的key.

如何区分rdd的宽窄依赖?

窄依赖:父rdd的一个分区只能被子rdd的一个分区依赖。

宽依赖:父rdd的一个分区可以被子rdd的多个分区所依赖,涉及到shuffle。

为什么设计宽窄依赖?