一网打尽Spark高频面试题

Posted 大数据那些事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一网打尽Spark高频面试题相关的知识,希望对你有一定的参考价值。

点击上方蓝字
关注我吧

01

Spark主要解决什么问题?


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

02

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


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


03

Spark的运行模式都有哪些?


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


04

Spark的常用端口号都有哪些?


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

05

简述Spark的架构与作业提交流程。


一网打尽Spark高频面试题


06

Spark任务通过什么形式进行提交?作业提交参数都有哪些?


使用shell脚本提交。

1)在提交任务时的几个重要参数

executor-cores —— 每个executor使用的内核数,默认为1,官方建议2-5个,我们企业是4个

num-executors —— 启动executors的数量,默认为2

executor-memory ——executor内存大小,默认1G

driver-cores ——driver使用内核数,默认为1

driver-memory —— driver内存大小,默认512M

2)给一个提交任务的样式

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


07

RDD都有哪些重要特性?(简述你对RDD的认识)


一网打尽Spark高频面试题


08

Spark常用的transformation算子都有哪些


1)单Value

1map

2mapPartitions

3mapPartitionsWithIndex

       4flatMap

       5glom

       6groupBy

       7filter

       8sample

       9distinct

       10coalesce

       11repartition

       12sortBy

       13pipe

2)双vlaue

       1intersection

       2union

       3subtract

       4zip

3Key-Value

       1partitionBy

       2reduceByKey

       3groupByKey

       4aggregateByKey

       5foldByKey

       6combineByKey

       7sortByKey

       8mapValues

       9join

       10cogroup


09

map和mapPartition有什么区别


1)map:每次处理一条数据

2)mapPartitions:每次处理一个分区数据



10

repartition和coalesce有什么区别?


1)关系:
两者都是用来改变RDD的partition数量的,repartition底层调用的就是coalesce方法:coalesce(numPartitions, shuffle = true)
2)区别:
repartition一定会发生shuffle,coalesce根据传入的参数来判断是否发生shuffle
一般情况下增大rdd的partition数量使用repartition,减少partition数量时使用coalesce

11

reduceByKey和groupByKey有什么区别?


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

12


reduceByKey、foldByKey、aggregateByKey、combineByKey区别?


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

13

Kryo序列化


Kryo序列化比Java序列化更快更紧凑,但Spark默认的序列化是Java序列化并不是Spark序列化,因为Spark并不支持所有序列化类型,而且每次使用都必须进行注册。注册只针对于RDD。在DataFrames和DataSet当中自动实现了Kryo序列化。


14

 Spark如何进行任务的划分


(1)Application:初始化一个SparkContext即生成一个Application;
(2)Job:一个Action算子就会生成一个Job;
(3)Stage:Stage等于宽依赖的个数加1;
(4)Task:一个Stage阶段中,最后一个RDD的分区个数就是Task的个数。

一网打尽Spark高频面试题


15

缓存cache和检查点checkpoint区别有什么区别?


1)Cache缓存只是将数据保存起来,不切断血缘依赖。Checkpoint检查点切断血缘依赖。
2)Cache缓存的数据通常存储在磁盘、内存等地方,可靠性低。Checkpoint的数据通常存储在HDFS等容错、高可用的文件系统,可靠性高。
3)建议对checkpoint()的RDD使用Cache缓存,这样checkpoint的job只需从Cache缓存中读取数据即可,否则需要再从头计算一次RDD。


16

Spark累加器的工作原理?


一网打尽Spark高频面试题


17

Spark广播变量的工作原理?


一网打尽Spark高频面试题


18

 SparkSQLRDDDataFrameDataSet三者如何进行互相转换


一网打尽Spark高频面试题


19

Spark涉及到数据库的操作时,如何减少Spark运行中的数据库连接数


使用foreachPartition代替foreach,在foreachPartition内获取数据库的连接。


20

如何使用Spark实现TopN的获取(描述思路或使用伪代码)



方法1:
(1)按照key对数据进行聚合(groupByKey)
(2)将value转换为数组,利用scala的sortBy或者sortWith进行排序(mapValues)数据量太大,会OOM。
方法2:
(1)取出所有的key
(2)对key进行迭代,每次取出一个key利用spark的排序算子进行排序
方法3:
(1)自定义分区器,按照key进行分区,使不同的key进到不同的分区
(2)对每个分区运用spark的排序算子进行排序



一网打尽Spark高频面试题



一网打尽Spark高频面试题
关注公众号,回复关键字“ Spark ”,即能获取全部资料,不要错过!
一网打尽Spark高频面试题

B站|大数据那些事


想获取更多更全资料

扫码加好友入群

欢迎各位大佬加入开源共享

共同面对大数据领域疑难问题

来稿请投邮箱:miaochuanhai@126.com



以上是关于一网打尽Spark高频面试题的主要内容,如果未能解决你的问题,请参考以下文章

高频面试题[Scala/Spark]

面试高频:Java常用的八大排序算法一网打尽!

五万字,57道hadoop大厂高频面试题,每一字都细心打磨,强烈建议收藏!

算法面试手撕代码高频题汇集

大数据开发岗面试复习30天冲刺 - 日积月累,每日五题Day21——Spark8

高频算法面试题_旋转字符串(完整的代码实现)