Spark 大厂面试题

11,340 阅读3分钟

这是我参与更文挑战的第28天,活动详情查看:更文挑战

一 Spark解决什么问题

Hadoop主要解决,海量数据的存储和海量数据的分析计算。
Spark主要解决海量数据的分析计算。

二 Spark为什么会有自己的资源调度器

Hadoop的Yarn框架比Spark框架诞生的晚,所以Spark自己也设计了一套资源调度框架。

三 Spark运行模式

1. Local:运行在一台机器上,测试用。
2. Standalone:是Spark自身的一个调度系统。 对集群性能要求非常高时用。国内很少使用。
3. Yarn:采用Hadoop的资源调度器。 国内大量使用。
4. Mesos:国内很少使用。

四 Spark常用端口号

1. 4040 spark-shell任务端口
2. 7077 内部通讯端口。 类比Hadoop的8020/9000
3. 8080 查看任务执行情况端口。 类比Hadoop的8088
4. 18080 历史服务器。类比Hadoop的19888
注意:由于Spark只负责计算,所有并没有Hadoop中存储数据的端口50070

五 Spark提交作业参数 ⭐️⭐️⭐️⭐️⭐️

  1. 在提交任务时的几个重要参数
executor-cores —— 每个executor使用的内核数,默认为1,官方建议2-5个,我们企业是4个
    num-executors —— 启动executors的数量,默认为2
    executor-memory —— executor内存大小,默认1G
    driver-cores —— driver使用内核数,默认为1
    driver-memory —— driver内存大小,默认512M
  1. 提交任务的样式
spark-submit \
  --master local[5]  \
  --driver-cores 2   \
  --driver-memory 8g \
  --executor-cores 4 \
  --num-executors 10 \
  --executor-memory 8g \
  --class PackageName.ClassName XXXX.jar \
  --name "Spark Job Name" \
  InputPath      \
  OutputPath

六 Spark的transformation算子(不少于10个)⭐️⭐️⭐️⭐️⭐️

  1. 单Value

    1. map
    2. mapPartitions
    3. mapPartitionsWithIndex
    4. flatMap
    5. glom
    6. groupBy
    7. filter
    8. sample
    9. distinct
    10. coalesce
    11. repartition
    12. sortBy
    13. pipe
  2. 双vlaue

    1. intersection
    2. union
    3. subtract
    4. zip
  3. Key-Value

    1. partitionBy
    2. reduceByKey
    3. groupByKey
    4. aggregateByKey
    5. foldByKey
    6. combineByKey
    7. sortByKey
    8. mapValues
    9. join
    10. cogroup

七 Spark的action算子(不少于6个)⭐️⭐️⭐️⭐️⭐️

  1. reduce
  2. collect
  3. count
  4. first
  5. take
  6. takeOrdered
  7. aggregate
  8. fold
  9. countByKey
  10. save
  11. foreach

八 map和mapPartitions区别

  1. map:每次处理一条数据
  2. mapPartitions:每次处理一个分区数据

九 Repartition和Coalesce区别

  1. 关系:

    两者都是用来改变RDD的partition数量的,repartition底层调用的就是coalesce方法:coalesce(numPartitions, shuffle = true)

  2. 区别:

    repartition一定会发生shuffle,coalesce根据传入的参数来判断是否发生shuffle 一般情况下增大rdd的partition数量使用repartition,减少partition数量时使用coalesce

十 reduceByKey与groupByKey的区别

reduceByKey:具有预聚合操作
groupByKey:没有预聚合
在不影响业务逻辑的前提下,优先采用reduceByKey。

十一 reduceByKey、foldByKey、aggregateByKey、combineByKey区别

ReduceByKey没有初始值分区内和分区间逻辑相同
foldByKey有初始值分区内和分区间逻辑可以相同
aggregateByKey有初始值分区内和分区间逻辑可以不同
combineByKey初始可以变化结构分区内和分区间逻辑不同

十二 控制Spark reduce缓存 调优shuffle

spark.reducer.maxSizeInFilght 此参数为reduce task能够拉取多少数据量的一个参数默认48MB,当集群资源足够时,增大此参数可减少reduce拉取数据量的次数,从而达到优化shuffle的效果,一般调大为96MB,,资源够大可继续往上调。

spark.shuffle.file.buffer 此参数为每个shuffle文件输出流的内存缓冲区大小,调大此参数可以减少在创建shuffle文件时进行磁盘搜索和系统调用的次数,默认参数为32k 一般调大为64k。