Spark RDD经典基础面试题
面试基础题
- SparkContext哪一端创建的的?
Driver端 - DAG是在哪一端被构建的?
Driver端 - RDD是在哪一端生成的?
Driver端 - 调用RDD的算子(Transformation和Action)是在哪一端调用的
Driver端 - RDD在调用Transformation和Action时需要传入函数,函数是在哪一端声明【定义】和传入的?
Driver端 - RDD在调用Transformation和Action时需要传入函数,请问传入的函数是在哪一端执行了函数的业务逻辑?
Executor - Task是在哪一端生成的呢?
Driver端 - DAG是在哪一端构建好的并被切分成一到多个Stage的
Driver端 - DAG是哪个类完成的切分Stage的功能?
DAGScheduler - DAGScheduler将切分好的Task以什么样的形式给TaskScheduler
TaskSet - 自定义的分区器这个类是在哪一端实例化的?
Driver端 - 分区器中的getParitition方法在哪一端调用的呢?
Executor - 广播变量是在哪一端调用的方法进行广播的?
Driver端 - 要广播的数据应该在哪一端先创建好再广播呢?
Driver端 - 广播变量以后能修改吗?
不能 - 广播变量广播到Executor后,一个Executor进程中有几份广播变量的数据
一个 - 累加器事先在哪一端创建的
Driver端 - 累加器事先在哪一端累加的
Executor - shuffle算子是否一定会触发shuffle
不会,需要看情况.如果现有数据已经按照一定规则和分区进行过划分,将要做的操作还是一样的分区规则和分区数量,则不需要再次shuffle了.具体可以看代码
如reduceByKey
从上述源码可以看出,如果之前的分区器和现在要使用的分区器是一样的,都是hashpartitionner,并且分区器相等,则会按照key对数据做聚合,而不会产生shuffle
否则就会创建一个新的ShuffleRDD对象,这时候才会真正的产生shuffle操作.
注意,对于哈希分区器来说,重写了equals方法,首先2者需要都是哈希分区器
然后是2者的分区数量相同,因为哈希分区器就是将key的哈希值模除分区数量,所以符合2个条件之后,起始2者就算相等了,就算地址值不同,最终的分区结果也是一样的