大数据秋招面经之spark系列


文章目录

  • 前言
  • 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介绍

  1. 基于内存,spark把中间数据放到内存,迭代效率高

  2. spark容错性高,spark引入弹性分布式数据集RDD,数据集一部分丢失,可根据血统进行重建。

  3. spark更加通用,算子更多

  4. 可用于处理复杂的批处理或者基于实时的流式处理(微批)

  5. 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

5.storm与flink,spark str

你可能感兴趣的:(大数据,spark)