========= 基础 =========
1、RDD 的 基础
https://www.jianshu.com/p/fca10efd2315
https://www.jianshu.com/p/6319d6239f03
https://www.jianshu.com/p/64ade88f0e19
https://blog.csdn.net/weixin_38750084/article/details/82955062
源码
https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala
2、driver的功能是什么?
一个程序,它声明数据的RDD上的转换和操作,并将这些请求提交给master
功能
1)、创建SparkContext的程序,连接到给定的SparkMaster
2)、划分rdd stage 并生成 DAGScheduler
3)、通过taskScheduler生成并发送task到executor
它的位置独立于master、slave。您在master节点,也可以从另一个节点运行它。唯一的要求是它必须在一个可以从Spark Workers访问的网络中
2、RDD宽依赖和窄依赖?
- wide dependency or shuffle dependency:多个子RDD的Partition会依赖同一个父RDD的Partition
- narrow dependency:每一个父RDD的Partition最多被子RDD的一个Partition使用
3、map 和 flatMap、mapPartition 的区别?
map:通过向这个RDD的所有元素应用一个函数来返回一个新的RDD。
flatMap:返回一个新的RDD 首将一个函数应用于该RDD的所有元素,然后将结果展平。
mapPartitions:通过向这个RDD的每个分区应用一个函数来返回一个新的RDD,preservespartitioning 指示输入函数是否保留分区器,默认为false,除非这是pairRDD,并且输入函数不修改keys
4、spark中的RDD是什么?有哪些特性?
RDD是弹性分布式数据集 不可变的可并行操作的元素的分区集合
每个RDD具有五个主要特性:
1)、有分区列表
2)、可用于计算每个分区的函数
3)、依赖于其他RDD的列表
4)、可选pairRDD的分区器(例如说RDD是哈希分区的)
5)、优先选择本地最优的位置去计算每个分片(例如,HDFS文件块位置)即数据的本地性
5、spark中如何划分 stage
stage是一组并行任务,作为job的部分 计算相同的函数
stage通过是否存在Shuffle或者宽依赖为边界来划分的 如遇到reduceByKey,groupByKey的算子等算子
从当前job的最后一个算子往前推,遇到宽依赖,那么当前在这个批次中的所有算子操作都划分成一个stage,然后继续按照这种方式在继续往前推,如在遇到宽依赖,又划分成一个stage,一直到最前面的一个算子。最后整个job会被划分成多个stage,而stage之间又存在依赖关系,后面的stage依赖于前面的stage
========= 进阶 =========
1、Spark 优化方式
2、Spark 如何防止 OOM
3、Hadoop 和 Spark 的 shuffle有什么区别
shuffle 是洗牌过程,将数据打乱,然后按照用户的指示输出。
4、Spark 为什么要持久化?哪些场景需要 persist
持久化是 control 操作,中间结果比较难算出来,而且还需要复用。
比如机器学习
5、什么是 Transformation 和 action
按需执行的函数。
6、Spark 作业执行原理
7、spark Job 调度流程
8、减少 Spark IO
广播变量、累加器、减少Shuffle
9、一致性语义有几个级别
10、CAP 理论
11、Spark-submit --files 和 addFile 的区别
12、spark 如何跳过 失败的 task