Spark- Spark相关问题 未完成

108 阅读3分钟

1、Spark有几种部署模式,分别简要论述

2、Spark用什么提交

shell 脚本

3、Spark 提交作业的参数

4、简述Spark架构,以及作业提交的流程

image.png

5、如何理解spark中的血统概念

6、简述Spark中的宽窄依赖,以及spark中如何划分stage,每个stage又按照什么决定task的个数?

7、列举Spark中的转换算子,并简述其功能

8、列举Spark中的行动算子,并简述其功能

9、列举一些Spark中能引起shuffle的算子,并简述其功能

10、简述Spark两种核心shuffle的工作流程(未优化的hashshuffle,优化的hashshuffle,sortshuffle,byPassshuffle,tunsten-sortshuffle)

11、spark中groupByKey和reduceByKey的区别

12、repartition 和coalesce的关系和区别

13、简述Spark中共享变量的基本原理和用途

广播变量

累加器

14、当Spark涉及到数据库的操作,如何减少Spark中的数据库连接数

使用foreachPartition算子替代foreach算子

15、简述Spark中RDD,DataFrame,DataSet的区别和联系

16、Spark 中join和left join,left semi join的区别

17、SparkStreaming有哪几种方式消费kafka数据,他们之间的区别是什么?

18、简述SparkSteaming中窗口函数的原理

窗口函数就是在原来定义的 SparkStreaming 计算批次大小的基础上再次进行封装, 每 次计算多个批次的数据, 同时还需要传递一个滑动步长的参数, 用来设置当次计算任务完成 之后下一次从什么地方开始计算。

图中 time1 就是 SparkStreaming 计算批次大小, 虚线框以及实线大框就是窗口的大小, 必须为批次的整数倍。 虚线框到大实线框的距离(相隔多少批次) , 就是滑动步长。

19、手写spark 的wordcount代码(Scala)

val conf: SparkConf = new SparkConf().setMaster("local[* ]").setAppName("WordCount")

val sc = new SparkContext(conf)

sc.textFile("/input")

.flatMap(_.split(" "))

.map((_,1))

.reduceByKey(+)

.saveAsTextFile("/output")

sc.stop()

20、如何使用spark实现topN

21、调优之前和调优之后的性能对比

例如调整 map个数, map 个数之前多少、 之后多少, 有什么提升

21、Spark缓存的级别,以及缓存的操作和释放缓存

22、Spark shuffle默认的并行度

200,也就是reduce的分区数

23、kryo序列化

24、broadcast join的原理以及使用场景

25、控制spark shuffle过程中的缓冲区大小,map阶段和reduce阶段

两个参数:

spark.reducer.maxSizeInFilght reduce端缓冲区大小,默认值是48M

spark.shuffle.file.buffer map端的缓冲区大小,默认是32kb

26、SparkStreaming 第一次运行不丢失数据

kafka 参数 auto.offset.reset 参数设置成 earliest 从最初始偏移量开始消费数据

27、SparkStreaming 精准一次消费

28、SparkStreaming控制每秒消费的速度

29、SparkStreaming 背压机制

把 spark.streaming.backpressure.enabled 参数设置为 ture,开启背压机制后 Spark Streaming 会 根据延迟动态去 kafka 消费数据,上限由 spark.streaming.kafka.maxRatePerPartition 参数控制, 所以两个参数一般会一起使用

30、SparkStreaming 一个stage的耗时

31、SparkStreaming优雅关闭

32、SparkStreaming默认分区个数