文章目录
- 前言
- spark高频面试题汇总
-
- 1.spark介绍
- 2.spark分组取TopN方案总结:方案2是最佳方案。
- 3. repartition与coalesce
- 4. spark的oom问题怎么产生的以及解决方案
- 5.storm与flink,spark streaming之间的区别
- 6.spark的几种部署方式:
- 7.复习spark的yarn-cluster模式执行流程:
- 8.spark的job提交流程:
- 9.spark中假设一个application中有多个job并行执行,怎么调度
- 10.sparkstreaming的底层实现原理:
- 11.join操作会不会触发spark shuffle
- 12.spark join的几种形式:
- 13.mapreduce的counter:
- 14.spark数据保存到hdfs的方式:
- 15.spark streaming性能调优:
- 16.spark哪些算子会发生shuffle
- 17.spark的partitioner有几种
- 18.spark几个重要的调优参数:
- 19.spark内存模型:
- 20.Spark sql执行流程:
- 21.DataFrame,DataSet,RDD的区别:
- 22.hive on spark与spark on hive的区别:
- 23.spark框架:
- 24.sparkstreaming的流join原理:
- 25.如何解决数据积压问题:
- 26.sparkstreaming消费完kafka数据之后如何高效入库?
- 27.structStreaming和sparkstreaming的offset
- 28.怎么在一个sparkstreaming里同时消费不同的topic然后根据不同的topic里面的内容处理不同的业务逻辑?
- 29.flatmap能不能代替filter实现过滤功能?
- 30.SparkContext.textFile()得到的RDD类型是:
- 31.hadoopRDD面向文件时分区的个数怎么来的:
- 32.HadoopRDD如何读取文件的
- 33.笛卡儿积cartesian不会发生shuffle原因是:
- 34.mapVaules,flatMapValues比map和flatMap的优势
前言
spark是大数据面试重点,基本属于必须要熟练掌握的内容,考点要远多于hadoop。
提示:以下是本篇文章正文内容,下面案例可供参考
spark高频面试题汇总
1.spark介绍
-
基于内存,spark把中间数据放到内存,迭代效率高
-
spark容错性高,spark引入弹性分布式数据集RDD,数据集一部分丢失,可根据血统进行重建。
-
spark更加通用,算子更多
-
可用于处理复杂的批处理或者基于实时的流式处理(微批)
-
spark组件:spark core,spark sql,spark streaming,MLib,GraphX
2.spark分组取TopN方案总结:方案2是最佳方案。
方案1:
相同的key为一组,然后groupBykey()后得到数据名叫grouped,然后对grouped进行mapValues就把一个个value取出来,然后将values转化为list调用sorted算子进行排序(默认是升序的,所以要自定义排序比较器,规则为降序)
grouped.mapValues(arr=>arr.toList.sorted(
new Ordering[(int,int)]{
override def compare(x:(int,int), y:(int,int) =y._2.compareTo(x._2))
}).take(n))
或者用sortBy(xxx,false)来降序
成本:发生了一次shuffle
问题:groupBykey,mapValues在使用时将大数据量放入内存时易发生oom。
方案2:取出所有key,对key进行迭代,每次取出一个key利用spark的排序算子进行排序。用combineByKey代替groupByKey可解决oom问题,它会尽量压缩内存中的数据。
combineByKey中的三个函数:
第一个函数:处理第一条记录,如果key原来未遇到过,就创建key对应的累加器的初始值。
第二个函数:处理第二条以及后续的记录的相关逻辑(其中有排序过程) ,如果key原来遇到过,使用该方法将key的累加器对应的当前值与新值合并。
第三个函数:将各个分区的结果合并
方案3:自定义分区器,按照key进行分区,不同的key进入到不同分区,对每个分区用spark的排序算子进行排序
3. repartition与coalesce
repartition的底层调用了coalesce,且repartition的其中一个入参是true:表示一定发生shuffle,会进行重新分区。
coalesce会不会发生shuffle与入参传入的参数是false还是true有关,true就会发生shuffle。
所以当有增加分区数需求时必会发生shuffle,可用repartiton,当减少分区数时刻用coalesce,避免发生shuffle,用IO使数据移动。
4. spark的oom问题怎么产生的以及解决方案
第一数据倾斜的话可以先局部聚合再全局聚合
第二某些算子可能造成oom,比如groupByKey