Spark面试题

RDD怎么理解?

RDD 是 Spark 的灵魂,也称为弹性分布式数据集。一个 RDD 代表一个可以被分区的只读数据集。RDD 内部可以有许多分区(partitions),每个分区又拥有大量的记录(records)。Rdd的五个特征: 1. dependencies: 建立 RDD 的依赖关系,主要 RDD 之间是宽窄依赖的关系,具有窄依赖关系的 RDD 可以在同一个 stage 中进行计算。 2. partition: 一个 RDD 会有若干个分区,分区的大小决定了对这个 RDD 计算的粒度,每个 RDD 的分区的计算都在一个单独的任务中进行。 3. preferedlocations: 按照“移动数据不如移动计算”原则,在 Spark 进行任务调度的时候,优先将任务分配到数据块存储的位置。 4. compute: Spark 中的计算都是以分区为基本单位的,compute 函数只是对迭代器进行复合,并不保存单次计算的结果。 5. partitioner: 只存在于(K,V)类型的 RDD 中,非(K,V)类型的 partitioner 的值就是 None。

RDD 的算子主要分成2类,action 和 transformation。这里的算子概念,可以理解成就是对数据集的变换。action 会触发真正的作业提交,而 transformation 算子是不会立即触发作业提交的。每一个 transformation 方法返回一个新的 RDD。只是某些 transformation 比较复杂,会包含多个子 transformation,因而会生成多个 RDD。这就是实际 RDD 个数比我们想象的多一些 的原因。通常是,当遇到 action 算子时会触发一个job的提交,然后反推回去看前面的 transformation 算子,进而形成一张有向无环图。

groupByKey和reduceByKey是属于Transformation还是 Action?
前者,因为 Action 输出的不再是 RDD 了,也就意味着输出不是分布式的,而是回送到 Driver 程序。以上两种操作都是返回 RDD,所以应该属于 Transformation。

列举一些 Transformation 和 Action
Transformantion: Map, Filter, FlatMap, Sample, GroupByKey, ReduceByKey, Union, Join, Cogroup, MapValues, Sort, PartionBy

Action: Collect, Reduce, Lookup, Save

说说Spark的特点,相对于MR来说
减少磁盘 I/O,MR 会把 map 端将中间输出和结果存储在磁盘中,reduce 端又需要从磁盘读写中间结果,势必造成磁盘 I/O 称为瓶颈。Spark 允许将 map 端的中间结果输出和结果存储在内存中,reduce 端在拉取中间结果的时候避免了大量的磁盘 I/O。
增加并行度,由于把中间结果写到磁盘与从磁盘读取中间结果属于不同的缓解,Hadoop 将他们简单地通过串行执行衔接起来,Spark 则把不同的环节抽象成为 Stage,允许多个 Stage 既可以串行又可以并行执行。
避免重新计算,当 Stage 中某个分区的 Task 执行失败后,会重新对此 Stage 调度,但在重新调度的时候会过滤已经执行成功的分区任务,所以不会造成重复计算和资源浪费。
可选的 Shuffle 排序,MR 在 Shuffle 之前有着固定的排序操作,而 Spark 则可以根据不同场景选择在 map 端排序还是 reduce 排序。
灵活的内存管理策略,Spark 将内存分为堆上的存储内存、堆外的存储内存,堆上的执行内存,堆外的执行内存4个部分。

概述一下spark中的常用算子区别(map、mapPartitions、foreach、foreachPartition)

map:用于遍历RDD,将函数f应用于每一个元素,返回新的RDD(transformation算子)。

foreach:用于遍历RDD,将函数f应用于每一个元素,无返回值(action算子)。

mapPartitions:用于遍历操作RDD中的每一个分区,返回生成一个新的RDD(transformation算子)。

foreachPartition: 用于遍历操作RDD中的每一个分区。无返回值(action算子)。

总结:一般使用mapPartitions或者foreachPartition算子比map和foreach更加高效,推荐使用。

Pair RDD{(1,2),(3,4),(3,6)}转化操作.reduceByKey((x,y)=>x+y)的结果是什么?
{(1,2),(3,10)}

Pair RDD{(1,2),(3,4),(3,6)}转化操作.groupByKey()的结果是什么?
{(1,[2]),(3,[4,6])}

Pair RDD{(1,2),(3,4),(3,6)}转化操作.mapValues(x=>x+1)的结果是什么?
{(1,3),(3,5),(3,7)}

两个Pair RDD,分别rdd={(1,2),(3,4),(3,6)},other={(3,9)},rdd.substractByKey(other)的结果是什么?
这是删除rdd与other不同键的操作
结果:{(1,2)}

如果要统计一个文本中的单词出现次数,写出主要代码实现
(py or scala or java皆可)

rdd = sc.textFile(....)
val words = rdd.flatMap(x=>x.split(" "))
val result = words.map(x=>(x,1)).reduceByKey((x,y)=>x+y)

spark支持处理那些文件格式的读取?
文本、json、csv、hadoop sequenceFiles、Protocal buffers...

spark如何将一个目录下的所有文件读到一个pair rdd中?
sc.wholetextFiles("file://root/home/dir")

Transformation和action是什么?区别?举几个常用方法
RDD 创建后就可以在 RDD 上进行数据处理。RDD 支持两种操作: 1. 转换(transformation): 即从现有的数据集创建一个新的数据集 2. 动作(action): 即在数据集上进行计算后,返回一个值给 Driver 程序

RDD 的转化操作是返回一个新的 RDD 的操作,比如 map() 和 filter() ,而行动操作则是向驱动器程序返回结果或把结果写入外部系统的操作,会触发实际的计算,比如 count() 和 first() 。Spark 对待转化操作和行动操作的方式很不一样,因此理解你正在进行的操作的类型是很重要的。如果对于一个特定的函数是属于转化操作还是行动操作感到困惑,你可以看看它的返回值类型:转化操作返回的是 RDD,而行动操作返回的是其他的数据类型。

RDD 中所有的 Transformation 都是惰性的,也就是说,它们并不会直接计算结果。相反的它们只是记住了这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结果给 Driver 的 Action 时,这些 Transformation 才会真正运行。

这个设计让 Spark 更加有效的运行。

Spark为什么快,Spark SQL 一定比 Hive 快吗?
From: https://blog.csdn.net/Stefan_xiepj/article/details/80347720

Spark SQL 比 Hadoop Hive 快,是有一定条件的,而且不是 Spark SQL 的引擎比 Hive 的引擎快,相反,Hive 的 HQL 引擎还比 Spark SQL 的引擎更快。其实,关键还是在于 Spark 本身快。

消除了冗余的 HDFS 读写: Hadoop 每次 shuffle 操作后,必须写到磁盘,而 Spark 在 shuffle 后不一定落盘,可以 cache 到内存中,以便迭代时使用。如果操作复杂,很多的 shufle 操作,那么 Hadoop 的读写 IO 时间会大大增加,也是 Hive 更慢的主要原因了。
消除了冗余的 MapReduce 阶段: Hadoop 的 shuffle 操作一定连着完整的 MapReduce 操作,冗余繁琐。而 Spark 基于 RDD 提供了丰富的算子操作,且 reduce 操作产生 shuffle 数据,可以缓存在内存中。
JVM 的优化: Hadoop 每次 MapReduce 操作,启动一个 Task 便会启动一次 JVM,基于进程的操作。而 Spark 每次 MapReduce 操作是基于线程的,只在启动 Executor 是启动一次 JVM,内存的 Task 操作是在线程复用的。每次启动 JVM 的时间可能就需要几秒甚至十几秒,那么当 Task 多了,这个时间 Hadoop 不知道比 Spark 慢了多少。

说说SparkContext和SparkSession有什么区别
Application: 用户编写的 Spark 应用程序,Driver 即运行上述 Application 的 main() 函数并且创建 SparkContext。Application 也叫应用。
SparkContext: 整个应用的上下文,控制应用的生命周期。
RDD: 不可变的数据集合,可由 SparkContext 创建,是 Spark 的基本计算单元。
SparkSession: 可以由上节图中看出,Application、SparkSession、SparkContext、RDD之间具有包含关系,并且前三者是1对1的关系。

原文地址:https://www.cnblogs.com/starcrm/p/10530992.html

时间: 2024-10-05 20:40:42

Spark面试题的相关文章

spark面试题-1

原文链接:https://blog.csdn.net/Lwj879525930/article/details/82559596 1.spark中的RDD是什么,有哪些特性? 答:RDD(Resilient Distributed Dataset)叫做分布式数据集,是spark中最基本的数据抽象,它代表一个不可变,可分区,里面的元素可以并行计算的集合 Dataset:就是一个集合,用于存放数据的 Destributed:分布式,可以并行在集群计算 Resilient:表示弹性的,弹性表示 1.R

spark基本面试题

目录 一.spark基本常识 二.spark要点 一.spark基本常识 1.spark中的RDD是什么,有哪些特性? ??RDD(Resilient Distributed Dataset)叫做分布式数据集模式spark中最基本的数据抽象,它代表一个不可变,可分区,里面的元素可以并行计算的集合. ??Resilient:表示弹性的,弹性表示 ??Destributed:分布式,可以并行在集群计算 ??Dataset:就是一个集合,用于存放数据的 五大特性: ??1)一个分区列表,RDD中的数据

面试链接

Scala面试题: https://www.cnblogs.com/Gxiaobai/p/10460336.html spark-Streaming面试题: http://app.myzaker.com/news/article.php?pk=59a6517b1bc8e03276000029 spark面试题: https://www.jianshu.com/p/7a8fca3838a4 原文地址:https://www.cnblogs.com/hdc520/p/11431635.html

最近经历的一些大数据(Spark/Hadoop)面试题

1.简答说一下hadoop的map-reduce编程模型 首先map task会从本地文件系统读取数据,转换成key-value形式的键值对集合 使用的是hadoop内置的数据类型,比如longwritable.text等 将键值对集合输入mapper进行业务处理过程,将其转换成需要的key-value在输出 之后会进行一个partition分区操作,默认使用的是hashpartitioner,可以通过重写hashpartitioner的getpartition方法来自定义分区规则 之后会对ke

Android面试题收集

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发.这里会不断收集和更新Android基础相关的面试题,目前已收集100题. 1.Android系统的架构 Android系统架构之应用程序 Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等.所有的应用程序都是使用JAVA语言编写的. Android系统架构之应用程

Spark上的决策树(Decision Tree On Spark)

最近花了一些时间学习了Scala和Spark,学习语言和框架这样的东西,除了自己敲代码折腾和玩弄外,另一个行之有效的方法就是阅读代码.MLlib正好是以Spark为基础的开源机器学习库,便借机学习MLlib是如何利用Spark实现分布式决策树.本文主要是剖析MLlib的DecisionTree源码,假设读者已经入门Scala基本语法,并熟悉决策树的基本概念,假如您不清楚,可以参照Coursera上两门课程,一门是Scala之父Martin Odersky的<Functional Programm

Apache Spark源码走读之7 -- Standalone部署方式分析

欢迎转载,转载请注明出处,徽沪一郎. 楔子 在Spark源码走读系列之2中曾经提到Spark能以Standalone的方式来运行cluster,但没有对Application的提交与具体运行流程做详细的分析,本文就这些问题做一个比较详细的分析,并且对在standalone模式下如何实现HA进行讲解. 没有HA的Standalone运行模式 先从比较简单的说起,所谓的没有ha是指master节点没有ha. 组成cluster的两大元素即Master和Worker.slave worker可以有1到

杭州高级.NET程序员常见面试题

大数据处理 大数据处理有哪些方案? 说明: hadoop   ( hadoop权威指南中文第二版.pdf) spark 有没有用过缓存?服务端的高速缓存有没有用过? 如何解决数据并发问题? 说明: 使用同步机制 使用临界区管理 多线程的问题 sql搜索时,如何过滤? 设计模式 什么是工厂模式?一般应用在哪些场景?什么是单例模式? 开发框架 会不会MVC框架?什么是ORM? C#语法 泛型应用在哪些场景中,有什么好处?有没有用过委托,说说应用场景?有没有用过事件?页面生存周期有哪些事件?如何序列化

大数据面试题汇总(不断更新中)

结合自身面试经历,包括BAT.SF.中信等等公司所做的面试题汇总.主要包括以下几大类: 一.spark相关 1.Spark的Shuffle原理及调优? 2.hadoop和spark使用场景? 3.spark如何保证宕机迅速恢复? 4.hadoop和spark的相同点和不同点? 5.RDD持久化原理? 6.checkpoint检查点机制? 7.checkpoint和持久化机制的区别? 8.Spark Streaming和Storm有何区别?  9.RDD机制?  10.Spark streamin