大数据(spark)面试

本文详细探讨了Spark的核心概念,包括SparkSQL与SparkStreaming的比较,重点解析了shuffle过程,讨论了缓存机制、cache与checkpoint的区别,以及Spark运行模式。此外,还涵盖了Spark的垃圾回收机制、版本配置、与其他框架的对比、RDD、DataFrame、DataSet的差异,以及Spark的DAG执行流程。面试中常见的算子、优化策略、广播变量、宽窄依赖、容错机制等关键知识点也逐一展开,深入剖析了Spark相较于MapReduce的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第7章Spark
7.1 sparksql 和 sparkstreaming哪个比较熟
答:都还行,SparkSql 的 DataFrame 或者 DataSet 和 SparkStreaming 的 DStream 都是基于SparkCore 的,最终都会转化为 Sparktask 执行。我们可以交流一下本质的东西 SparkCore,而SparkCore 的核心又是 RDD。
7.2 说一下 sparkshuffle
答:Spark 的 shuffle 也是一处理问题的思想:分而治之。shuffle 一般称为洗牌,一般会有Shuffle。Write 阶段 和 ShuffleRead 阶段。
在 Spark 中实现 Shuffle 的方式有两种,一种是 HashShuffle,一种是 SortShuffle。shuffle 的性能是影响 spark 应用程序性能的关键。shuffle 发生在 stage 之间,stage 中用的 pipline 的计算模式。
7.3 Spark Shuffle 的调优点:

1:Shuffle 的选择 2:缓冲区的大小 3:拉去的数据量的大小 4:间隔时间重试次数。

7.4 缓存这块熟悉吗,介绍缓存级别

答:Spark 的缓存机制是 Spark 优化的一个重要点,它将需要重复使用或者共用的 RDD 缓存在内存中,可以提高 Spark 的性能。
Spark 的底层源码中使用 StorageLevel 来表示缓存机制,其中包括:使用内存,使用磁盘,使用序列化,使用堆外内存。在他的半生对象中基于这几种方式提供了一些实现:不使用缓存,Memory_Only,Disk_only,offHeap 分别都有相应的序列化,副本,组合的实现提供选择。持久化的级别 StorageLevel 可以自定义,但是一般不自定义。如何选择 RDD 的缓存级别的本质是在内存的利用率和 CPU 的利用率之间的权衡。一般默认选择的是 Memory_only, 其次是 Memery_only_Ser, 再次是 Memory_only_and_Dis 至于怎么选择你得自己权衡。

7.5 说一下 cache 和 checkpoint 的区别

答:要知道区别,首先要知道实现的原理和使用的场景 catche 的就是将共用的或者重复使用的 RDD 按照持久化的级别进行缓存 checkpoint 的是将业务场景非常长的逻辑计算的中间结果缓存到 HDFS 上,它的实现原理是:
首先找到 stage 最后的 finalRDD,然后按照 RDD 的依赖关系进行回溯,找到使用了 checkPoint 的 RDD 然后标记这个使用了 checkPoint 的 RDD 重新的启动一个线程来将 checkPoint 之前的 RDD 缓存到 HDFS 上面最后将 RDD 的依赖关系从 checkPoint 的位置切断知道了实现的原理和使用场景后我们就很容易的知道了 catch 和 checkpoint 的区别了。

7.6 spark 运行模式 local local[] local[*] 分别是什么

答:该模式被称为 Local[N] 模式,是用单机的多个线程来模拟 Spark 分布式计算,通常用来验证开发出来的应用程序逻辑上有没有问题其中N代表可以使用 N 个线程,每个线程拥有一个 core 。如果不指定 N,则默认是1个线程(该线程有1个 core )。如果是 local[*],则代表 Run Spark locally with as many worker threads as logical cores on your machine: 在本地运行Spark,与您的机器上的逻辑内核一样多的工作线程。

7.7 Spark 怎么设置垃圾回收机制 ?
Spark 中各个角色的JVM参数设置:
http://blog.csdn.net/wuxb2000/article/details/52870198 1)Driver 的 JVM 参数: GC 方式, 如果是 yarn-client 模式,默认读取的是 spark-class 文件中的 JAVAOPTS;如果是 yarn-cluster 模式,则读取的是 spark-default.conf 文件中的 spark.driver.extraJavaOptions 对应的参数值。 (2)Executor 的 JVM 参数: GC 方式,两种模式都是读取的是 spark-default.conf 文件中的spark.executor.extraJavaOptions 对应的 JVM 参数值。

7.8 一台节点上以 root 用户执行一个 spark 程序,以其他非 root 用户也同时在执行一个 spark 程序,这时以 spark 用户登录,这个节点上,使用 Jps 会看到哪些线程?

答:单独的用户只能看自己的进程
7.9 spark 和 mapreduce 的对比

答:MR 一般处理大量数据的时候一般会存在高延迟,浪费时间,对于一些有时间要求的业务就很不适合。但是如果用 spark 处理的话就非常快了,特别是对于实时动态处理的过程。

下面我会针对人事简历方面的问题总结一下我的想法

7.10 Spark 的提交方式?
答案:不管是提交到 yarn 上面还是提交到 standalone 上都分为 Client 的方式提交和 Cluster 的方式提交。
7.11 Spark 都有什么算子?
答案:map,reducebykey,filter,mapPartition,flatmap,cogroup,foreach,first,take, join, sortBy,distinct,等等
7.12 spark on yarn 和 mapreduce 中 yarn 有什么区别?

答:没有什么区别,yarn 就是一种任务调度框架

7.13 spark 运行的 job 在哪里可以看到?

答: 一般是在 WEBUI 上 查看,如果问具体怎么配置的可以推到运维人员身上

7.14 用scala 写一个 wordcount ?
object ScalaWordCount {
def main(args: Array[String]): Unit = {
val lines = List(“hello java hello python”,“hello scala”,“hello scala hello java hello scala”)
// 切块
val words = lines.flatMap(.split(" "))
// 生成pair
val tuples = words.map((
,1))
// k,v分组
val grouped = tuples.groupBy(.1)
val sumed = grouped.mapValues(
.size)
// 排序
val sorted = sumed.toList.sortBy(
._2)
// 降序
val result = sorted.reverse
println(result)
}
}
7.15 对 scala 的了解 有用过 play framework 框架吗

答:是一个纯java框架,可以进行快速开发,开发周期较短,并且能够快速建立一个java web所需要的所有内容。

7.16 scala 中的隐式函数的关键字?

答:implicit

7.17 val x=y=1 结果是什么?

答:会报错

7.18 编译好的 scala 程序,运行的时候还需要 scala 环境吗?

答:不需要

下面是我在网络上找的思维导图,介绍的比较详细,大家可以认真的看一下
7.19 spark 提交任务的流程

在这里我找了一个网图,相信看图来的更加直接一些。
在这里插入图片描述
7.20 rdd 怎么转 dataFrame
答:可以通过反射的方式来推断元数据,因为 RDD 本身是没有元数据的,通过反射就可以了解这些元数据并且进一步转换成 dtaframe
7.21 问我 spark、jdk、scala 的版本

JDK:1.8 SPARK:2.2.0 SCALA:2.11.8 HADOOP:2.6.5
7.22 spark 和 storm 的区别?

答:storm是对大量的小型数据块进行处理,并且是动态数据 spark一般是对大量数据进行进行全集处理,并且侧重传输数据的过程
7.23 persist 和 checkpoint 的区别

答:persits一般是将数据持久化到磁盘上但是一旦进程被停掉的话,在磁盘上的数据也会同时被清空 而checkpoint 是将 RDD 持久化到 HDFS 上的,如果不手动删除的话是一直存在的
7.24 怎么理解scala的函数式编程
所谓函数式编程,其实就是以纯函数的方式编写代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值