spark全面个人总结(20个面试点)非网文 持续更新中

2024-08-23 13:44

本文主要是介绍spark全面个人总结(20个面试点)非网文 持续更新中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.  请简述Spark的工作原理和架构?

  1. 基于RDD,一种数据结构,含数据项、处理函数、血缘。
  2. spark解析任务,生成rdd,并将系列rdd转换成一系列物理计划,然后发送到集群上的各个节点执行。
  3. spark负责管理这些任务,并分配到集群中的各个执行器,利用分区存储副本实现容错

2.  Spark与Hadoop MapReduce相比,主要有哪些优势?

  1. 速度快 (1.基于内存计算 2.spark更灵活,job数更少)
  2. 易用性,支持多种编程语言 scala java python R
  3. 功能更强大 ,可以做批处理、准实时处理、机器学习和图计算

3.  Spark有哪几种运行模式?请详细解释它们之间的区别。

   spark local 、 spark on mesos、spark standalone、 spark on yarn

Local mode: 在本地模式下,spark作业在单个机器上运行,通常用于开发和测试

Standalone: spark使用自己的集群管理器来调度作业

yarn模式:yarn是hadoop的资源管理器,spark可以运行在yarn之上

mesos模型:mesos是一个开源的资源管理器和资源调度器

kubernetes:Kubernetes是一个容器编排平台,Spark可以利用Kubernetes来部署和运行

4.  Spark的RDD(弹性分布式数据集)是什么?它有哪些特性?

 

rdd:抽象数据结构,也是spark最小的计算单元,含数据分区、数据项、转换函数、rdd血缘、 (但并不会存储数据)

特性:

  1. rdd有多个分区构成
  2. 对rdd的每个分区做计算
  3. rdd之间有依赖关系,可以溯源
  4. rdd里面存的数据是key-value形式,则可以传递一个自定义的partition进行重新分区
  5. 存储存取每个partitiion的优先位置。计算每个split时,在split所在机器的本地上运行task是最好的。也就是说 计算靠近数据

5.  Spark的内存计算模型是如何工作的? 

内存管理策略:内存管理器、存储级别、缓存和持久化、内存溢出处理、内存使用监控、内存使用策略

6.  请解释一下Spark的“弹性”特性。

  1. 存储弹性(数据持久化、数据分区、数据复制)
  2. 容错弹性(任务重试、数据恢复、动态资源调整、容错机制(日志记录、检查点))

7.  Spark Streaming与Spark SQL有什么区别? 

  a. 处理的数据类型

     spark streaming主要处理实时流数据,例如来自传感器、日志、社交媒体等的连续数据流

     spark sql侧重于处理结构化的静态数据,例如关系型数据库中的表、parquet格式的文件等

  b.处理方式:

     spark streaming以微批处理的方式处理流数据,将数据流切分成小的批次进行处理

     spark sql 通常是对已经存在的数据集进行一次性的查询和分析操作

8.  Spark如何处理流数据?请举例说明。

     主要通过spark streaming实现。Spark streaming 是spark用于处理实时数据流的组件,它允许你将实时数据流分割成一系列小的批处理,然后在每个微批上运行你的处理逻辑。

步骤:

1.创建一个spark应用程序,并使用sparkcontext初始化spark streaming应用

2.创建dstream:dstream是spark streaming中的基本数据流抽象,定义一个函数从数据源创建dstream

3.在每个微批上运行你的数据处理逻辑

4.运行 spark streaming应用程序

9.  Spark的持久化有哪些级别?它们之间有什么区别?

  1. memory_only  缓存到内存里面
  2. memory_and_disk 优先存内存,内存不足,存储在磁盘上
  3. memory_only_ser 将rdd数据序列化后存储在内存中,能节省内存空间
  4. memory_and_disk_ser: 类似memory_only_ser,但内存不足时会将数据存储到磁盘
  5. disk_only: 将rdd数据全部存储在磁盘中

序列化:是指将对象转换为字节流的过程,以便于在内存、磁盘、网络中传输或存储

10.  Spark的广播变量和累加器有什么用?

  1. 广播变量主要用于在集群中的各个节点之间高效地共享只读文件(比如将小表数据广播到大表数据节点进行本地计算)
  2. 累加器可以实现不同节点之间的共享和累加计算。比如在通过数据集中某个字段值大于10的记录数量,可以创建一个累加器,在处理数据时判断并对累加器进行累加。

 11.  Spark的Shuffle操作是如何进行的?

根据分区策略,每个执行器将数据按照键分组,并发送到相应的目标分区,对每个执行器内部的数据根据键进行排序,写入磁盘,任务调度,决定哪些任务需要拉取哪些shuffle文件,数据拉取、数据合并、数据读取。

12.  Spark中如何进行数据的分区?分区策略对性能有何影响?

spark分区是根本设置的分区策略进行分区的,分区策略有hash分区、range分区(按照指定键值的范围来划分分区)、自定义分区

影响:提高数据读取策略、计算效率、容错性

13.  Spark如何实现数据并行处理?请给出一个具体示例。

分区、执行器都可以实现数据并行处理

14.  Spark如何处理大数据集的内存溢出问题?

  1. 采用序列化存储、数据压缩
  2. 内存管理策略:内存管理器、存储级别、缓存和持久化、内存溢出处理、内存使用监控、内存使用策略

15.  Spark的SparkContext和JobTracker、TaskTracker有什么关系? 

  1. sparkcontext:spark应用程序的控制中心,连接spark集群、任务提交、状态监控、配置参数、rdd创建、执行转换和行动操作等等。
  2. jobtracker:集群的主节点,负责资源管理和作业调度。
  3. tasktracker:工作节点,负责执行分配给它的任务。

早期版本里面,sparkcontext负责与jobtracker通信,提交作业,并管理任务的执行。tasktracker执行jobtracker分配的任务

16.  Spark如何优化数据读写操作?请给出一些建议。

spark的读写流程:数据源加载-RDD转换-持久化-action

读优化:内存缓存、宽窄依赖、数据局部性(spark尝试将数据处理任务调度到存储数据的节点上,减少网络传输延迟)、

写优化:压缩和编码、并行写入、

17.  Spark如何与Hive集成?请简述一下流程

Apache spark与apache hive的集成主要通过spark sql实现,spark sql是spark提供的一个用于处理结构化数据的模块,它允许spark运行sql查询并利用hive的元数据和数据仓库功能。

18.  Spark如何与HDFS、S3等存储系统集成?

配置spark以访问hdfs、s3存储系统,并使用相应的url格式来指定数据路径,从而读取和处理在这些系统中的数据。

19.  Spark如何与其他编程语言集成使用?请举例说明。

1.可以使用spark的各种api,如java api、r api、

2.使用Spark的高级API(如DataFrame和Dataset)

这篇关于spark全面个人总结(20个面试点)非网文 持续更新中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099551

相关文章

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in