1.Spark是什么?

Spark是大数据的调度,监控和分配引擎。它是一个快速通用的集群计算平台.Spark扩展了流行的MapReduce模型.Spark提供的主要功能之一就是能够在内存中运行计算 ,但对于在磁盘上运行的复杂应用程序,系统也比MapReduce更有效。

需要尚硅谷 八斗学院 奈学教育完整大数据资料和多家机构面试题的加威: Y17744650906 资料来之不易,不能接受小额有偿的勿扰,谢谢

2.解释Spark的主要功能?

多语言速度
多格式支持延迟执行实时计算
Hadoop集成机器学习
多语言:Spark提供Java,Scala,Python和R中的高级API .Spark代码可以用这四种语言中的任何一种编写。 它为Scala和Python提供了shell。 可以通过./bin/spark-shell进入Scala Shell和通
过./bin/pyspark 进入Python shell
速度:Spark的运行速度比Hadoop MapReduce快100倍,适用于大规模数据处理。 Spark能够通过控制分区实现此速度。 它使用分区管理数据,这些分区有助于以最小的网络流量并行化处理分布式数据处
多种格式:Spark支持多种数据源,如Parquet,JSON,Hive和Cassandra。 Data Sources API提供了一种可插入的机制,用于通过Spark SQL访问结构化数据。 数据源不仅仅是简单的管道,可以转换数据并将其拉入Spark。
延迟执行:Apache Spark延迟执行,直到绝对必要。 这是促进其速度的关键因素之一。 对于transformations,Spark将它们添加到计算的DAG中,并且仅当驱动程序请求某些数据时,才会实际执 行此DAG。
实时计算:Spark的计算是实时的,并且由于其内存计算而具有较少的延迟。 Spark专为大规模可扩展性而设计,Spark团队已经记录了运行具有数千个节点的生产集群的系统用户,并支持多种计算模型。Hadoop集成:Apache Spark提供与Hadoop的兼容性。 Spark是Hadoop的MapReduce的潜在替代品,而Spark能够使用YARN在现有的Hadoop集群上运行资源调度。
机器学习:Spark的MLlib是机器学习组件,在大数据处理方面很方便。 它消除了使用多种工具的需
求,一种用于处理,一种用于机器学习。 Spark为数据工程师和数据科学家提供了一个功能强大,统一的引擎,既快速又易于使用。

3.我们如何在Spark中创建RDD?

Spark提供了两种创建RDD的方法: 1.通过在Driver程序中并行化集合。
2.这使用了SparkContext的’parallelize。

3.通过从外部存储器加载外部数据集,如HDFS,HBase,共享文件系统。

4.如何在Apache Spark中定义分区?

顾名思义,分区是一个较小的逻辑分区,类似于MapReduce中的“split”。 它是大型分布式数据集的逻辑块。 分区是导出数据逻辑单元以加速处理过程的过程。 Spark使用分区来管理数据,这些分区有助于并行化分布式数据处理,只需最少的网络流量,Spark会尝试从靠近它的节点将数据读入RDD。 由于
Spark通常访问分布式分区数据,为了优化转换操作,它创建了用于保存数据块的分区。
5.RDD支持哪些操作?

RDD(Resilient Distributed Dataset)是Spark中的主要逻辑数据单元。 RDD是分布式集合对象。 分布式意味着,每个RDD分为多个分区。 这些分区中的每一个都可以驻留在内存中或存储在群集中不同计算机的磁盘上。 RDD是不可变(只读)数据结构。 无法更改原始RDD,但可以将其转换为所需的不同RDD。
RDD支持两种类型的操作:转换和操作。
转换(Transformations):转换从现有的RDD创建新的RDD,如map,reduceByKey和我们刚看到的过滤器(filter)。 转换按需执行。 这意味着它们是懒惰计算的。
操作(Actions):操作返回RDD计算的最终结果。 Actions使用lineage graph触发执行以将数据加载到原始RDD中,执行所有中间转换并将最终结果返回到驱动程序或将其写入文件系统。

6.你对Spark中的转换
(Transformations)有什么了解?

Transformations是应用于RDD的函数,导致另一个RDD。 在动作发生之前它不会执行。 map()和filter()是转换的示例,前者应用在RDD的每个元素上传递给它的函数,并导致另一个RDD。
filter()通过从当前RDD中选择传递函数参数的元素来创建新的RDD。

正如我们在这里看到的,rawData RDD被转换为moviesData RDD。 Transformations延迟执行

7.如何在Spark中定义操作(Actions)?

Actions有助于将数据从RDD取到本地。Actions的执行是所有先前创建的transformation的结果。Actions使用 lineage graph触发执行以将数据加载到原始RDD中,执行所有中间转换并将最终结果返回到驱动程序或将其写入文件系统。

reduce() 是一个动作,它实现了一次又一次传递的函数,直到剩下一个值。 take() action将RDD中的所有值都带到本地节点。

正如我们在这里看到的,moviesData RDD被保存到名为MoviesData.txt的文本文件中。

8.SparkCore有什么功能?

Spark Core是大规模并行和分布式数据处理的基础引擎。 核心是分布式执行引擎,Java,Scala和Python API为分布式ETL应用程序开发提供了一个平台。 SparkCore执行各种重要功能,如内存管理, 监视作业,容错,作业调度以及与存储系统的交互。 此外,在core上构建的其他库允许streaming, SQL和机器学习的各种工作负载。 它负责:

内存管理和故障恢复
在群集上调度,分发和监视作业与存储系统交互

9.Spark 生态组件有哪些?

Spark Core:用于大规模并行和分布式数据处理的基础引擎Spark Streaming:用于处理实时流数据
Spark SQL:将关系处理与Spark的函数式编程API集成在一起GraphX:图形和图形并行计算
MLlib:在Apache Spark中执行机器学习

10.谈谈RDD、DataFrame、Dataset的区别和各自的优势?
共性:
1、RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便 利。
2、三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action如foreach时,三者才会开始遍历运算。
3、三者都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出。 4、三者都有partition的概念。

5、三者有许多共同的函数,如filter,排序等
6、在对DataFrame和Dataset进行操作许多操作都需要这个包进行支持:
import spark.implicits._
7、DataFrame和Dataset均可使用模式匹配获取各个字段的值和类型。区别:
RDD:
1、RDD一般和spark mlib同时使用2、RDD不支持sparksql操作
DataFrame:
1、与RDD和Dataset不同,DataFrame每一行的类型固定为Row,只有通过解析才能获取各个字段的 值。
2、DataFrame与Dataset均支持sparksql的操作,比如select,groupby之类,还能注册临时表/视窗, 进行sql语句操作。
3、DataFrame与Dataset支持一些特别方便的保存方式,比如保存成csv,可以带上表头,这样每一列 的字段名一目了然。
Dataset:
这里主要对比Dataset和DataFrame,因为Dataset和DataFrame拥有完全相同的成员函数,区别只是每一行的数据类型不同。
DataFrame也可以叫Dataset[Row],每一行的类型是Row,不解析,每一行究竟有哪些字段,各个字段 又是什么类型都无从得知,只能用上面提到的getAS方法或者共性中的第七条提到的模式匹配拿出特定字段。
而Dataset中,每一行是什么类型是不一定的,在自定义了case class之后可以很自由的获得每一行的信息。
11.什么是RDD血统?

Spark不支持内存中的数据副本,因此,如果丢失了任何数据,则使用RDD血统进行重建。 RDD血统是一个重建丢失的数据分区的过程,因此 最好的是RDD记住如何从其他数据集构建。
12.什么是Spark Driver?

Spark Driver是在机器的master上运行的程序,用于声明数据RDD上的转换(transformations)和操作(actions)。 简单来说,Spark中的驱动程序创建SparkContext,连接到给定的Spark Master。该驱动程序还将RDD graph提供给Master,其中 standalone cluster 管理器运行。
13.Spark支持哪些文件系统?

Spark支持以下三个文件系统:
Hadoop分布式文件系统(HDFS)。本地文件系统。
亚马逊S3

14.什么是Spark Executor?

当SparkContext连接到集群管理器时,它会在集群中的节点上获取Executor。 executor是Spark进程,它运行计算并将数据存储在工作节点上。 SparkContext的最终任务被转移到executors以执行它们。
15.Spark中的集群的类型?

Standalone:设置群集的基本manager。
Apache Mesos:通用/常用的集群manager,也运行Hadoop MapReduce和其他应用程序。YARN:负责Hadoop的资源管理。
16.如何理解延迟调用?

Spark在数据运作方式很聪明。 当你告诉Spark对一个给定的数据集进行操作时,它会注意到指令并对其进行记录,这样它就不会忘记 - 但它什么也不做,除非要求最终结果。 在RDD上调用map()之类的转换时,不会立即执行该操作。Transformations不会被执行,直到action操作时,执行操作 。 这有助于优化整体数据处理工作流程。
17.SchemaRDD在Spark RDD中你有什么理解?
SchemaRDD是一个RDD,由行对象(基本字符串或整数数组周围的包装器)组成,其中包含有关每列中数据类型的架构信息。
SchemaRDD旨在让开发人员在日常的代码调试和SparkSQL核心模块上进行单元测试时更加轻松。 这个想法可以归结为使用类似于关系数据库模式的形式描述来描述RDD内部的数据结构。 除了常见的RDD API提供的所有基本功能之外,SchemaRDD还提供了一些通过SparkSQL实现的简单的关系查询接口函数。
现在,它正式重命名为Spark最新的主干上的DataFrame API。

18.你对worker节点有什么了解?

Worker节点是指可以在集群中运行应用程序代码的任何节点。 驱动程序必须侦听并接受来自其
executors的传入连接,并且必须可以从worker进行网络寻址。
worker节点基本上是从节点。 主节点(Master)分配工作,worker节点实际执行分配的任务。
worker节点处理存储在节点上的数据并将资源报告给Master。 基于资源可用性,Master调度任务。
19.说说使用Spark的一些缺点?

以下是使用Apache Spark的一些缺点:
由于与Hadoop和MapReduce相比,Spark利用了更多的存储空间,因此可能会出现某些问题。 开发人员在Spark中运行应用程序时需要小心。
work必须分布在多个节点上,而不是在单个节点上运行所有内容。Spark的“内存”功能在成本效益高的大数据处理方面可能成为瓶颈。

20.列出一些Spark在处理过程中胜过
Hadoop的用例?

传感器数据处理:Apache Spark的“内存”计算在这里工作得最好,因为数据是从不同来源检索和组合的。
实时处理:Spark优先于Hadoop进行实时数据查询。 例如 股票市场分析,银行,医疗保健,电信等流处理:对于处理日志和检测实时流中的欺诈警报,Apache Spark是最佳解决方案。
大数据处理:在处理中型和大型数据集时,Spark的运行速度比Hadoop快100倍。

21.可以使用Spark访问和分析存储在
Cassandra数据库中的数据吗?

是的,如果使用Spark Cassandra Connector,则可以。要将Spark连接到Cassandra集群,需要将Cassandra Connector添加到Spark项目中。 在设置中,Spark执行程序将与本地Cassandra节点通信,并仅查询本地数据。 它通过减少网络的使用来在Spark executor(处理数据)和Cassandra节点
(数据存在的地方)之间发送数据,从而加快查询速度。
22.在使用Spark时,如何最大限度地减少数据传输?
最大限度地减少数据传输并避免混乱有助于编写以快速可靠的方式运行的spark程序。 使用Apache Spark时,可以最大限度地减少数据传输的各种方式:
使用广播变量 - 广播变量可提高小型和大型RDD之间的连接效率。使用累加器 - 累加器有助于在执行时并行更新变量值。
最常见的方法是避免操作ByKey,重新分区或任何其他触发shuffle的操作。

23.Spark技术栈有哪些组件,每个组件都有什么功能,适合什么应用场景?
1)Spark core:是其它组件的基础,spark的内核,主要包含:有向循环图、RDD、Lingage、Cache、broadcast等,并封装了底层通讯框架,是Spark的基础。
2)SparkStreaming是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源
(如Kafka、Flume、Twitter、Zero和TCP 套接字)进行类似Map、Reduce和Join等复杂操作,将流式计算分解成一系列短小的批处理作业。
3)Spark sql:Shark是SparkSQL的前身,Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行外部查询,同时进行更复杂的数据分析。
4)BlinkDB :是一个用于在海量数据上运行交互式 SQL 查询的大规模并行查询引擎,它允许用户通过权衡数据精度来提升查询响应时间,其数据的精度被控制在允许的误差范围内。
5)MLBase是Spark生态圈的一部分专注于机器学习,让机器学习的门槛更低,让一些可能并不了解机器学习的用户也能方便地使用MLbase。MLBase分为四部分:MLlib、MLI、ML Optimizer和

MLRuntime。
6)GraphX是Spark中用于图和图并行计算

24.Apache Spark中的各种持久性级别是什么?
Apache Spark会自动保留来自各种shuffle操作的中间数据,但是,通常建议用户在计划重用RDD时调 用RDD上的persist()方法。 Spark具有各种持久性级别,可将RDD存储在磁盘或内存中,或者作为两者的组合,具有不同的复制级别。
Spark中的各种存储/持久性级别是: 1.MEMORY_ONLY
使用未序列化的Java对象格式,将数据保存在内存中。如果内存不够存放所有的数据,则数据可能就不会进行持久化。那么下次对这个RDD执行算子操作时,那些没有被持久化的数据,需要从源头处重新计 算一遍。这是默认的持久化策略,使用cache()方法时,实际就是使用的这种持久化策略。
2.MEMORY_AND_DISK
使用未序列化的Java对象格式,优先尝试将数据保存在内存中。如果内存不够存放所有的数据,会将数据写入磁盘文件中,下次对这个RDD执行算子时,持久化在磁盘文件中的数据会被读取出来使用。
3.MEMORY_ONLY_SER
基本含义同MEMORY_ONLY。唯一的区别是,会将RDD中的数据进行序列化,RDD的每个partition会 被序列化成一个字节数组。这种方式更加节省内存,从而可以避免持久化的数据占用过多内存导致频繁GC。
4.MEMORY_AND_DISK_SER
基本含义同MEMORY_AND_DISK。唯一的区别是,会将RDD中的数据进行序列化,RDD的每个
partition会被序列化成一个字节数组。这种方式更加节省内存,从而可以避免持久化的数据占用过多内存导致频繁GC。
5.DISK_ONLY
使用未序列化的Java对象格式,将数据全部写入磁盘文件中。
6.MEMORY_ONLY_2, MEMORY_AND_DISK_2, 等等
对于上述任意一种持久化策略,如果加上后缀_2,代表的是将每个持久化的数据,都复制一份副本,并 将副本保存到其他节点上。这种基于副本的持久化机制主要用于进行容错。假如某个节点挂掉,节点的 内存或磁盘中的持久化数据丢失了,那么后续对RDD计算时还可以使用该数据在其他节点上的副本。如 果没有副本的话,就只能将这些数据从源头处重新计算一遍了。
25.cache后面能不能接其他算子,它是不是action操作?
答:cache可以接其他算子,但是接了算子之后,起不到缓存应有的效果,因为会重新触发 cache。cache不是action操作
26.reduceByKey是不是action?

答:不是,很多人都会以为是action,reduce rdd是action

27.数据本地性是在哪个环节确定的?

具体的task运行在那他机器上,dag划分stage的时候确定的
28.RDD的弹性表现在哪几点?

1)自动的进行内存和磁盘的存储切换; 2)基于Lingage的高效容错;
3)task如果失败会自动进行特定次数的重试;
4)stage如果失败会自动进行特定次数的重试,而且只会计算失败的分片; 5)checkpoint和persist,数据计算之后持久化缓存 6)数据调度弹性,DAG TASK调度和资源无关
7)数据分片的高度弹性
29.常规的容错方式有哪几种类型?

1).数据检查点,会发生拷贝,浪费资源
2).记录数据的更新,每次更新都会记录下来,比较复杂且比较消耗性能
30.RDD通过Linage(记录数据更新)的方式为何很高效?
1)lazy记录了数据的来源,RDD是不可变的,且是lazy级别的,且rDD 之间构成了链条,lazy是弹性的基石。由于RDD不可变,所以每次操作就 产生新的rdd,不存在全局修改的问题,控制难度下降,所有有计算链条 将复杂计算链条存储下来,计算的时候从后往前回溯 900步是上一个stage的结束,要么就checkpoint
2)记录原数据,是每次修改都记录,代价很大 如果修改一个集合,代价就很小,官方说rdd是 粗粒度的操作,是为了效率,为了简化,每次都是 操作数据集合,写或者修改操作,都是基于集合的 rdd的写操作是粗粒度的,rdd的读操作既可以是粗粒度的 也可以是细粒度,读可以读其中的一条条的记录。3)简化复杂度,是高效率的一方面,写的粗粒度限制了使用场景 如网络爬虫,现实世界中,大多数写是粗粒度的场景
31.RDD有哪些缺陷?

1)不支持细粒度的写和更新操作(如网络爬虫),spark写数据是粗粒度的 所谓粗粒度,就是批量写入数据,为了提高效率。但是读数据是细粒度的也就是 说可以一条条的读2)不支持增量迭代计算,Flink支持
32.说一说Spark程序编写的一般步骤?

答:初始化,资源,数据源,并行化,rdd转化,action算子打印输出结果或者也可以存至相应的数据存储介质。
33.Spark有哪两种算子?

答:Transformation(转化)算子和Action(执行)算子。

34.Spark提交你的jar包时所用的命令是什么?
答:spark-submit
35.Spark有哪些聚合类的算子,我们应该尽量避免什么类型的算子?
答:在我们的开发过程中,能避免则尽可能避免使用reduceByKey、join、distinct、repartition 等会进行shuffle的算子,尽量使用map类的非shuffle算子。这样的话,没有shuffle操作或者仅有 较少shuffle操作的Spark作业,可以大大减少性能开销。
36.你所理解的Spark的shuffle过程?

答:从下面三点去展开1)shuffle过程的划分2)shuffle的中间结果如何存储3)shuffle的数据如何拉取过来
可以参考这篇博文:http://www.cnblogs.com/jxhd1/p/6528540.html
37.你如何从Kafka中获取数据?

1)基于Receiver的方式 这种方式使用Receiver来获取数据。Receiver是使用Kafka的高层次Consumer API来实现的。receiver从Kafka中获取 的数据都是存储在Spark Executor的内存中的,然后Spark
Streaming启动的job会去处理那些数据。
2)基于Direct的方式 这种新的不基于Receiver的直接方式,是在Spark 1.3中引入的,从而能够确保更加健壮的机制。替代掉使用Receiver来 接收数据后,这种方式会周期性地查询Kafka,来获得每个topic+partition的最新的offset,从而定义每个batch的 offset的范围。当处理数据的job启动时,就会使用Kafka的简单consumer api来获取Kafka指定offset范围的数据。
38.对于Spark中的数据倾斜问题你有什么好的方案?
1)前提是定位数据倾斜,是OOM了,还是任务执行缓慢,看日志,看WebUI
2)解决方法,有多个方面
① 避免不必要的shuffle,如使用广播小表的方式,将reduce-side-join提升为map-side-join
② 分拆发生数据倾斜的记录,分成几个部分进行,然后合并join后的结果
③ 改变并行度,可能并行度太少了,导致个别task数据压力大 •两阶段聚合,先局部聚合,再全局聚合
•自定义paritioner,分散key的分布,使其更加均匀。详细解决方案参考博文:《Spark数据倾斜优化方法》。
39.RDD创建有哪几种方式?

1).使用程序中的集合创建rdd
2).使用本地文件系统创建rdd 3).使用hdfs创建rdd,
4).基于数据库db创建rdd
5).基于Nosql创建rdd,如hbase 6).基于s3创建rdd,
7).基于数据流,如socket创建rdd。
如果只回答了前面三种,是不够的,只能说明你的水平还是入门级的,实践过程中有很多种创建方式。
40.Spark并行度怎么设置比较合适

答:spark并行度,每个core承载24个partition,如,32个core,那么64128之间的并行度,也就是设置64~128个partion,并行读和数据规模无关,只和内存使用量和cpu使用时间有关。
41.Spark中数据的位置是被谁管理的?

答:每个数据分片都对应具体物理位置,数据的位置是被blockManager,无论 数据是在磁盘,内存还是tacyan,都是由blockManager管理
42.Spark的数据本地性有哪几种?

答:Spark中的数据本地性有三种:
a.PROCESS_LOCAL是指读取缓存在本地节点的数据
b.NODE_LOCAL是指读取本地节点硬盘数据
c.ANY是指读取非本地节点数据通常读取数据PROCESS_LOCAL>NODE_LOCAL>ANY,尽量使数据以PROCESS_LOCAL或 NODE_LOCAL方式读取。其中PROCESS_LOCAL还和cache有关,如果RDD经常用的话将该 RDD cache到内存中,注意,由于cache是lazy的,所以必须通过一个action的触发,才能真正的 将该RDD cache到内存中。
43.rdd有几种操作类型?

1)transformation,rdd由一种转为另一种rdd 2)action,
3)cronroller,crontroller是控制算子,cache,persist,对性能和效率的有很好的支持 三种类型,不要回答只有2种操作。
44.Spark如何处理不能被序列化的对象?

将不能序列化的内容封装成object
45.collect功能是什么,其底层是怎么实现的?
答:driver通过collect把集群中各个节点的内容收集过来汇总成结果,collect返回结果是Array类 型的,collect把各个节点上的数据抓过来,抓过来数据是Array型,collect对Array抓过来的结果 进行合并,合并后Array中只有一个元素,是tuple类型(KV类型的)的。

46.Spark程序执行,有时候默认为什么会产生很多task,怎么修改默认task执行个数?
答:1)因为输入数据有很多task,尤其是有很多小文件的时候,有多少个输入 block就会有多少个task
启动;
2)spark中有partition的概念,每个partition都会对应一个task, task越多,在处理大规模数据的时候,就会越有效率。不过task并不是越多越好,如果平时测试, 或者数据量没有那么大,则没有必要task数量太多。
3)参数可以通过spark_home/conf/sparkdefault.conf配置文件设置: spark.sql.shuffle.partitions 50、spark.default.parallelism 10 第一个是针对spark sql的task数量 第二个是非spark sql程序设置生效。
47.为什么Spark Application在没有获得足够的资源,job就开始执行了,可能会导致什么什么 问题发生?
答:会导致执行该job时候集群资源不足,导致执行job结束也没有分配足够的资源,分配了部分
Executor,该job就开始执行task,应该是task的调度线程和Executor资源申请是异步的;如果想等待 申请完所有的资源再执行job的:需要将 spark.scheduler.maxRegisteredResourcesWaitingTime设置的很大;spark.scheduler.minRegisteredResourcesRatio 设置为1,但是应该结合实际考虑 否则很容易出现长时间分配不到资源,job一直不能运行的情况。
48.map与flatMap的区别

map:对RDD每个元素转换,文件中的每一行数据返回一个数组对象 flatMap:对RDD每个元素转换, 然后再扁平化 将所有的对象合并为一个对象,文件中的所有行数据仅返回一个数组 对象,会抛弃值为null的值。
49.列举你常用的action?

collect,reduce,take,count,saveAsTextFile等。
50.Spark为什么要持久化,一般什么场景下要进行persist操作? 为什么要进行持久化?
spark所有复杂一点的算法都会有persist身影,spark默认数据放在内存,spark很多内容都是放在内存 的,非常适合高速迭代,1000个步骤,只有第一个输入数据,中间不产生临时数据,但分布式系统风险很高,所以容易出错,就要容错,rdd出错或者分片可以根据血统算出来,如果没有对父rdd进行
persist 或者cache的化,就需要重头做。以下场景会使用persist
1)某个步骤计算非常耗时,需要进行persist持久化
2)计算链条非常长,重新恢复要算很多步骤,很好使,persist
3)checkpoint所在的rdd要持久化persist, lazy级别,框架发现有checnkpoint,checkpoint时单独触发一个job,需要重算一遍, checkpoint前 要持久化,写个rdd.cache或者rdd.persist,将结果保存起来,再写checkpoint操作,这样执行 起来会非常快,不需要重新计算rdd链条了。checkpoint之前一定会进行persist。

4)shuffle之后为什么要persist,shuffle要进性网络传输,风险很大,数据丢失重来,恢复代价 很大
5)shuffle之前进行persist,框架默认将数据持久化到磁盘,这个是框架自动做的。
51.为什么要进行序列化

序列化可以减少数据的体积,减少存储空间,高效存储和传输数据,不好的是使用的时候要反序 列化, 非常消耗CPU。
52.介绍一下cogroup rdd实现原理,你在什么场景下用过这个rdd?
答:cogroup的函数实现:
这个实现根据两个要进行合并的两个RDD操作,生成一个 CoGroupedRDD的实例,这个RDD的返回结果是把相同的key中两个RDD分别进行合并操作,最后 返回的RDD的value是一个Pair的实例,这个实例包含两个Iterable的值,第一个值表示的是RDD1中 相同KEY的值,第二个值表示的是RDD2中相同key的值。由于做cogroup的操作,需要通过 partitioner进行重新分区的操作,因此,执行这个流程时,需要执行一次shuffle的操作(如果要进行合 并的两个RDD的都已经是shuffle后的rdd,同时他们对应的partitioner相同时,就不需要执行 shuffle)。
场景:表关联查询
53.下面这段代码输出结果是什么?

答案: (1,(Spark,100))
(2,(tachyon,90))
(3,(hadoop,80))
54.Executor之间如何共享数据?

答:基于hdfs或者基于tachyon
55.Spark累加器有哪些特点?

1)累加器在全局唯一的,只增不减,记录全局集群的唯一状态2)在exe中修改它,在driver读取
3)executor级别共享的,广播变量是task级别的共享 两个application不可以共享累加器,但是同一个
app不同的job可以共享。
56.spark hashParitioner的弊端是什么?

答:HashPartitioner分区的原理很简单,对于给定的key,计算其hashCode,并除于分区的个数 取余, 如果余数小于0,则用余数+分区的个数,最后返回的值就是这个key所属的分区ID;弊端 是数据不均匀,容易导致数据倾斜,极端情况下某几个分区会拥有rdd的所有数据。
57.RangePartitioner分区的原理?

答:RangePartitioner分区则尽量保证每个分区中数据量的均匀,而且分区与分区之间是有序的, 也就是说一个分区中的元素肯定都是比另一个分区内的元素小或者大;但是分区内的元素是不能 保证顺序的。简单的说就是将一定范围内的数映射到某一个分区内。其原理是水塘抽样。可以参考这篇博文 h ttp s

spark core面试专题相关推荐

  1. 2021年大数据Spark(十八):Spark Core的RDD Checkpoint

    目录 RDD Checkpoint 引入 API 代码演示 总结:持久化和Checkpoint的区别 问题: 答案: 区别: RDD Checkpoint 引入 RDD 数据可以持久化,但是持久化/缓 ...

  2. SparkSQL 与 Spark Core的关系

    不多说,直接上干货! SparkSQL 与 Spark Core的关系 Spark SQL构建在Spark Core之上,专门用来处理结构化数据(不仅仅是SQL). Spark SQL在Spark C ...

  3. sparkcore分区_Spark学习:Spark源码和调优简介 Spark Core (二)

    本文基于 Spark 2.4.4 版本的源码,试图分析其 Core 模块的部分实现原理,其中如有错误,请指正.为了简化论述,将部分细节放到了源码中作为注释,因此正文中是主要内容. 第一部分内容见: S ...

  4. hashmap中用红黑树不用其他树_HashMap面试专题:常问六题深入解析

    引言 其实我很早以前就想写一篇关于HashMap的面试专题.对于JAVA求职者来说,HashMap可谓是集合类的重中之重,甚至你在复习的时候,其他集合类都不用看,专攻HashMap即可. 然而,鉴于网 ...

  5. rdd数据存内存 数据量_spark系列:spark core 数据交互技术点(数据模型)

    spark core实现了spark的基本功能:存储交互.任务调度.内存管理.错误恢复等:本片文章主要介绍与数据交互相关的核心技术点. 本文目录: RDD特性及交互 shuffle操作及调优 RDD持 ...

  6. BAT Android面试专题深入探究:四大组件+ViewPager+组件化架构+Bitmap

    本篇是结合我之前面试别人的经验,以及跟一些在BAT上班的朋友,讨论总结出的一份很深的大公司需要用到的一些高端Android技术.这里也专门整理了一个文档,重点和难点都有详细解析.这些题目有点技术含量, ...

  7. 分布式实时计算—Spark—Spark Core

    原文作者:bingoabin 原文地址:Spark Core 目录 一.Spark Core 1. 主要功能 2. Spark Core子框架 3. Spark架构 4. Spark计算模型 二.组件 ...

  8. Hadoop/Spark相关面试问题总结

    Hadoop/Spark相关面试问题总结 面试回来之后把当中比較重要的问题记了下来写了个总结: (答案在后面) 1.简答说一下hadoop的map-reduce编程模型 2.hadoop的TextIn ...

  9. php面试专题---2、常量及数据类型考点

    php面试专题---2.常量及数据类型考点 一.总结 一句话总结: 变量为null和变量判断为false的情况需要仔细注意下 1.PHP中字符串可以使用哪三种定义方法以及各自的区别是什么? 单引号:不 ...

最新文章

  1. mysql 2048kb限制_如何解决phpmyadmin导入数据库文件最大限制2048KB
  2. 皮肤的实时3S渲染(OpenGL + GLSL)
  3. PHP 获取服务器详细信息
  4. 将activity设置成对话框模式时遇到的问题(android)
  5. Java解析HTML之NekoHTML
  6. 模拟退火算法(SA)
  7. 计算机故障排除pdf,计算机常见故障排除方法【藏】.pdf
  8. 七夕抢付限量优惠,全新XPS13二合一笔记本戴尔官网独家首发
  9. MAVEN打包时没有将src/main/cache文件夹打到到WAR包中
  10. usb key 开发(一)
  11. 07Spring Boot配置绑定
  12. 重磅!首届倍增科学技术研究院高级研究员研讨会胜利召开
  13. 为什么结婚戒指要戴在无名指
  14. 世界公认的健康水果大排名!第一名居然是……
  15. Vue h5 调用微信扫码接口
  16. RoboMaster机甲大师裁判系统赛事引擎助手-RM Referee Aid
  17. VTK学习笔记(三十六)VTK图像填充
  18. 元宇宙老炮儿口述:19年的行业教训
  19. web安全--信息收集
  20. 用Python写了个检测文章抄袭,详谈去重算法原理

热门文章

  1. 织梦仿产品展示页产品图集调用方法
  2. 小程序源码:喝酒神器新UI版本带特效和音效,缩减版本微信小程序
  3. 四川服务器磁盘阵列卡电池性能,高端硬件RAID卡的改进
  4. Delphi WebBrowser 去除滚动条和边框
  5. 机器学习---数学基础(一、微积分)
  6. 浅谈企业入侵防御体系建设
  7. pscad永磁直驱风机系统,该模型上可改为风火打捆小系统
  8. LDcad零件新增与导入
  9. AM335x SPL 代码分析
  10. 2020 年 “联想杯”全国高校程序设计在线邀请赛暨第三届上海理工大学程序设计竞赛 部分题解