Apache Spark常见面试问题和答案合集:面试必备

2021年11月28日19:19:27 发表评论 557 次浏览
Apache Spark常见面试问题和答案合集:面试必备

Apache Spark 是最流行的分布式通用集群计算框架之一。该开源工具提供了一个接口,用于对具有隐式数据并行性和容错功能的整个计算机集群进行编程。

热门的Apache Spark面试问题和答案合集

在这里,我们编制了一份顶级 Apache Spark 面试问题列表。这些将帮助你评估你的 Apache Spark 为迎接即将到来的面试做好准备。你认为你能得到正确的答案吗?嗯,只有经历过才知道!

问题:Apache Spark面试题有哪些 - 你能解释一下 Apache Spark 的主要功能吗?

回答

  • 支持多种编程语言——Spark 代码可以用四种编程语言中的任何一种编写,即 Java、Python、R 和Scala。它还提供了这些编程语言的高级 API。此外,Apache Spark 提供了 Python 和 Scala 中的 shell。Python shell 通过 ./bin/pyspark 目录访问,而要访问 Scala shell 需要转到 .bin/spark-shell 目录。
  • 惰性求值——Apache Spark 使用了惰性求值的概念,即将求值延迟到绝对强制执行的时候。
  • 机器学习——对于大数据处理,Apache Spark 的 MLib 机器学习组件很有用。它消除了使用单独的引擎进行处理和机器学习的需要。
  • 多种格式支持——Apache Spark 提供对多种数据源的支持,包括 Cassandra、Hive、JSON 和 Parquet。数据源 API 提供了一种可插入的机制,用于通过 Spark SQL 访问结构化数据。这些数据源不仅仅是能够转换数据并将其拉入 Spark 的简单管道。
  • 实时计算——Spark 专为满足大规模可扩展性需求而设计。由于其内存计算,Spark 的计算是实时的并且延迟更少。
  • 速度——对于大规模数据处理,Spark 的速度可以比 Hadoop MapReduce 快 100 倍。Apache Spark 能够通过受控分配实现这种惊人的速度。分布式通用集群计算框架通过分区管理数据,有助于以最小的网络流量并行分布式数据处理。
  • Hadoop 集成 – Spark 提供与 Hadoop 的流畅连接。除了作为 Hadoop MapReduce 功能的潜在替代品之外,Spark 还能够通过 YARN 进行资源调度,从而在现有的 Hadoop 集群之上运行。

问题与 Hadoop MapReduce 相比,Spark 有哪些优势?

回答

  • 提高速度——MapReduce 利用持久存储来执行任何数据处理任务。相反,Spark 使用内存处理,其处理速度比 Hadoop MapReduce 快 10 到 100 倍。
  • 多任务 – Hadoop 仅支持通过内置库进行批处理。另一方面,Apache Spark 带有内置库,用于从同一核心执行多项任务,包括批处理、交互式 SQL 查询、机器学习和流式处理。
  • 不依赖磁盘——虽然 Hadoop MapReduce 高度依赖磁盘,但 Spark 主要使用缓存和内存数据存储。
  • 迭代计算——在同一个数据集上多次执行计算被称为迭代计算。Spark 能够进行迭代计算,而 Hadoop MapReduce 则不能。

问题: 请解释一下RDD(弹性分布式数据集)的概念。另外,请说明如何在 Apache Spark 中创建 RDD。

Apache Spark面试题解析:RDD 或弹性分布数据集是能够并行运行的操作元素的容错集合。RDD 中的任何分区数据都是分布式且不可变的。

从根本上说,RDD 是存储在分布在许多节点的内存中的数据的一部分。这些 RDD 在 Spark 中被懒惰地评估,这是导致 Apache Spark 实现更快速度的主要因素。RDD 有两种类型:

  1. Hadoop 数据集——对 HDFS(Hadoop 分布式文件系统)或其他类型存储系统中的每个文件记录执行功能
  2. 并行化集合——现存的 RDD 彼此并行运行

在 Apache Spark 中创建 RDD 有两种方式:

  • 通过并行化驱动程序中的集合。它利用了 SparkContext 的 parallelize() 方法。例如:
method val DataArray = Array(22,24,46,81,101) val DataRDD = sc.parallelize(DataArray)
  • 通过从一些外部存储加载外部数据集,包括 HBase、HDFS 和共享文件系统

问题Spark Core 的各种功能是什么?

:Spark Core 作为大规模并行和分布式数据处理的基础引擎。它是与 Java、Python 和 Scala API 结合使用的分布式执行引擎,为分布式 ETL(提取、转换、加载)应用程序开发提供平台。

Spark Core 的各种功能有:

  1. 在集群上分发、监控和调度作业
  2. 与存储系统交互
  3. 内存管理和故障恢复

此外,在 Spark Core 之上构建的其他库使其能够处理机器学习、流媒体和 SQL 查询处理的各种工作负载。

问题: 请列举 Spark 生态系统的各个组成部分。

回答

  1. GraphX – 实现图和图并行计算
  2. MLib – 用于机器学习
  3. Spark Core – 用于大规模并行和分布式数据处理的基础引擎
  4. Spark Streaming – 负责处理实时流数据
  5. Spark SQL – 将 Spark 的函数式编程API 与关系处理集成

问题是否有任何 API 可用于在 Spark 中实现图形?

:Apache Spark面试题有哪些:GraphX 是用于在 Apache Spark 中实现图和图并行计算的 API。它使用弹性分布式属性图扩展了 Spark RDD。它是一个有向多重图,可以有多个平行的边。

弹性分布式属性图的每条边和顶点都有与之关联的用户定义属性。平行边允许相同顶点之间存在多种关系。

为了支持图计算,GraphX 公开了一组基本运算符,例如 joinVertices、mapReduceTriplets 和 subgraph,以及 Pregel API 的优化变体。

GraphX 组件还包括越来越多的图形算法和构建器集合,用于简化图形分析任务。

问题告诉我们你将如何在 Spark 中实现 SQL?

:Spark SQL 模块有助于将关系处理与 Spark 的函数式编程 API 集成。它支持通过 SQL 或 HiveQL(Hive Query Language)查询数据。

此外,Spark SQL 支持大量数据源,并允许使用代码转换编织 SQL 查询。DataFrame API、Data Source API、Interpreter & Optimizer 和 SQL Service 是 Spark SQL 包含的四个库。

问题:你对 Parquet 文件的理解是什么?

:Apache Spark面试问题和答案合集介绍 - Parquet 是一种列式格式,受多种数据处理系统支持。有了它,Spark SQL 既可以执行读操作,也可以执行写操作。采用列式存储具有以下优点:

  • 能够获取特定的列进行访问
  • 占用更少的空间
  • 遵循特定于类型的编码
  • 有限的 I/O 操作
  • 提供更好的汇总数据

问题你能解释一下如何将 Apache Spark 与 Hadoop 一起使用吗?

:与 Hadoop 兼容是 Apache Spark 的主要优势之一。二人组弥补了强大的技术对。使用 Apache Spark 和 Hadoop 可以利用 Spark 无与伦比的处理能力,并结合 Hadoop 的 HDFS 和 YARN 的最佳能力。

以下是在 Apache Spark 中使用 Hadoop 组件的方法:

  • 批处理和实时处理——MapReduce 和 Spark 可以一起使用,前者处理批处理,后者负责实时处理
  • HDFS – Spark 能够在 HDFS 之上运行以利用分布式复制存储
  • MapReduce – 可以将 Apache Spark 与 MapReduce 一起使用在同一 Hadoop 集群中或作为处理框架独立使用
  • YARN – Spark 应用程序可以在 YARN 上运行

问题在 Spark 中命名各种类型的集群管理器。

回答

  1. Apache Mesos – 常用的集群管理器
  2. 独立 - 用于设置集群的基本集群管理器
  3. YARN – 用于资源管理

问题是否可以使用 Apache Spark 访问和分析存储在 Cassandra 数据库中的数据?

Apache Spark面试题解析:是的,可以使用 Apache Spark 访问和分析存储在使用 Spark Cassandra 连接器的Cassandra数据库中的数据。需要将它添加到 Spark 项目中,在此期间 Spark 执行器与本地 Cassandra 节点对话并且将仅查询本地数据。

将 Cassandra 与 Apache Spark 连接可以通过减少在 Spark 执行器和 Cassandra 节点之间发送数据的网络使用来加快查询速度。

问题工作节点是什么意思?

:任何能够在集群中运行代码的节点都可以说是工作节点。驱动程序需要侦听传入的连接,然后从其执行程序接受相同的连接。此外,驱动程序必须可从工作节点进行网络寻址。

一个工作节点基本上是一个从节点。主节点分配工作节点然后执行的工作。工作节点处理存储在节点上的数据,并将资源上报给主节点。主节点根据资源可用性调度任务。

问题请解释 Spark 中的稀疏向量。

:稀疏向量用于存储非零条目以节省空间。它有两个并行数组:

  1. 一个用于索引
  2. 另一个为值

稀疏向量的示例如下:

Vectors.sparse(7,Array(0,1,2,3,4,5,6),Array(1650d,50000d,800d,3.0,3.0,2009,95054))

问题你将如何将 Apache Spark 与 Apache Mesos 连接起来?

:将 Apache Spark 与 Apache Mesos 连接的分步过程是:

  1. 配置 Spark 驱动程序连接 Apache Mesos
  2. 将 Spark 二进制包放在 Mesos 可访问的位置
  3. 将 Apache Spark 安装在与 Apache Mesos 相同的位置
  4. 配置 spark.mesos.executor.home 属性以指向安装 Apache Spark 的位置

问题你能解释一下如何在使用 Spark 时最大限度地减少数据传输吗?

:最小化数据传输以及避免改组有助于编写能够可靠、快速运行的 Spark 程序。在使用 Apache Spark 时最小化数据传输的几种方法是:

  • 避免 - ByKey 操作、重新分区和其他负责触发 shuffle 的操作
  • 使用累加器——累加器提供了一种在并行执行变量时更新变量值的方法
  • 使用广播变量——广播变量有助于提高小型和大型 RDD 之间的连接效率

问题Apache Spark 中的广播变量是什么?我们为什么需要它们?

:广播变量不是随任务一起传送变量的副本,而是有助于在每台机器上保持变量的只读缓存版本。

广播变量还用于为每个节点提供大型输入数据集的副本。Apache Spark 尝试通过使用有效的广播算法来分发广播变量以降低通信成本。

使用广播变量消除了为每个任务传送变量副本的需要。因此,可以快速处理数据。与 RDD lookup() 相比,广播变量有助于在内存中存储查找表,从而提高检索效率。

问题请解释一下 Spark 中的 DStream。

:DStream 是 Discretized Stream 的缩写。它是 Spark Streaming 提供的基本抽象,是一个连续的数据流。DStream 是从通过转换输入流生成的已处理数据流或直接从数据源接收的。

一个 DStream 由一系列连续的 RDD 表示,其中每个 RDD 包含来自某个间隔的数据。应用于 DStream 的操作类似于在底层 RDD 上应用相同的操作。DStream 有两个操作:

  1. 负责将数据写入外部系统的输出操作
  2. 导致产生新 DStream 的转换

可以从各种来源创建 DStream,包括 Apache Kafka、Apache Flume 和 HDFS。此外,Spark Streaming 还支持多种 DStream 转换。

问题Apache Spark 是否提供检查点?

:是的,Apache Spark 提供检查点。除了使其对与应用程序逻辑无关的故障具有弹性之外,它们还允许程序全天候运行。沿袭图用于从故障中恢复 RDD。

Apache Spark 带有用于添加和管理检查点的 API。然后用户决定将哪些数据发送到检查点。当谱系图很长并且具有更广泛的依赖性时,检查点比谱系图更受欢迎。

问题:Apache Spark面试题有哪些:Spark 中有哪些不同级别的持久性?

答:Apache Spark面试问题和答案合集:虽然来自不同shuffle操作的中间数据会自动持久化在Spark中,但是如果要重用数据,还是建议在RDD上使用persist()方法。

Apache Spark 具有多个持久性级别,用于将 RDD 存储在磁盘、内存或具有不同复制级别的两者的组合上。这些不同的持久性级别是:

  • DISK_ONLY - 仅在磁盘上存储 RDD 分区。
  • MEMORY_AND_DISK - 在 JVM 中将 RDD 存储为反序列化的 Java 对象。如果 RDD 无法容纳在内存中,则会在磁盘上存储其他分区。每次出现需求时都会从这里读取这些内容。
  • MEMORY_ONLY_SER - 将 RDD 存储为序列化的 Java 对象,每个分区有一个字节数组。
  • MEMORY_AND_DISK_SER - 与 MEMORY_ONLY_SER 相同,不同之处在于将无法放入内存的分区存储到磁盘,而不是在需要时即时重新计算它们。
  • MEMORY_ONLY - 默认级别,它将 RDD 作为反序列化的 Java 对象存储在 JVM 中。如果 RDD 无法容纳可用内存,则某些分区将不会被缓存,从而导致每次需要时都动态地重新计算相同的分区。
  • OFF_HEAP - 像 MEMORY_ONLY_SER 一样工作,但将数据存储在堆外内存中。

问题你能列出使用 Apache Spark 的限制吗?

回答

  • 它没有内置的文件管理系统。因此,它需要与其他平台(如 Hadoop)集成以从文件管理系统中受益
  • 延迟更高,但吞吐量更低
  • 不支持真正的实时数据流处理。实时数据流在 Apache Spark 中被分成批次,处理后再次转换为批次。因此,Spark Streaming 是微批处理,而不是真正的实时数据处理
  • 可用的算法数量较少
  • Spark 流不支持基于记录的窗口标准
  • 工作需要分布在多个集群上,而不是在单个节点上运行所有内容
  • 在使用 Apache Spark 经济高效地处理大数据时,其“内存中”能力成为瓶颈

问题:定义 Apache Spark?

答:Apache Spark 是一个易于使用、高度灵活且快速的处理框架,它具有支持循环数据流和内存计算过程的先进引擎。它可以在 Cloud 和 Hadoop 中独立运行,提供对各种数据源(如 Cassandra、HDFS、HBase 和其他各种数据源)的访问。

问题:Spark Engine 的主要用途是什么?

答:Spark Engine 的主要目的是与集群一起调度、监控和分发数据应用程序。

问题:在 Apache Spark 中定义分区?

Apache Spark面试题解析:Apache Spark 中的分区旨在通过使数据更小、更相关且更具逻辑性的划分来拆分 MapReduce 中的数据。这是一个有助于导出数据逻辑单元的过程,以便可以将快速的速度应用于数据处理。Apache Spark 在弹性分布数据集 (RDD) 中进行分区。

问:RDD的主要操作是什么?

答:RDD 有两个主要操作,包括:

  1. 转换
  2. 动作

问题:在 Spark 中定义转换?

答:转换是应用于 RDD 的函数,有助于创建另一个 RDD。直到行动发生,转变才会发生。转换的例子是 Map() 和 filer()。

问题:Map()的作用是什么?

答:Map() 的作用是重复RDD 中的每一行,然后将它们拆分为新的RDD。

问题:filer() 的作用是什么?

答:filer() 的作用是通过从现有的RDD 中选择各种元素来开发一个新的RDD,它传递函数参数。

问题:Spark 中有哪些 Action?

答:Spark 中的操作有助于将数据从 RDD 带回本地机器。它包括提供非 RDD 值的各种 RDD 操作。Sparks 中的操作包括reduce() 和take() 等函数。

问题:reduce() 和 take() 函数有什么区别?

答:Reduce() 函数是一个重复应用直到最后一个值剩下的动作,而 take() 函数是一个动作,它考虑了从 RDD 到本地节点的所有值。

问题:Map Reduce中coalesce()和repartition()有什么异同?

答:相似之处在于,Map Reduce 中的 Coalesce() 和 Repartition() 都用于修改一个 RDD 中的分区数。它们之间的区别在于,Coalesce() 是repartition() 的一部分,它使用Coalesce() 进行shuffle。这有助于 repartition() 在特定数量的分区中给出结果,整个数据由各种散列从业者的应用程序分发。

问题:在 Spark 中定义 YARN?

答:Spark 中的 YARN 充当中央资源管理平台,有助于在整个集群中提供可扩展的操作并执行分布式容器管理器的功能。

问题:在 Spark 中定义 PageRank?举个例子?

答:Spark 中的 PageRank 是 Graphix 中的一种算法,它测量图中的每个顶点。例如,如果一个人在 Facebook、Instagram 或任何其他社交媒体平台上拥有大量关注者,那么他/她的页面将排名更高。

问题:Spark 中的滑动窗口是什么?举个例子?

答:Spark 中的滑动窗口用于指定必须处理的每批 Spark 流。例如,你可以通过 Spark Streaming 专门设置批处理间隔和要处理的多个批处理。

问题:滑动窗口操作有什么好处?

答:滑动窗口操作有以下好处:

  • 它有助于控制不同计算机网络之间的数据包传输。
  • 它组合落入特定窗口的 RDD 并对其进行操作以创建窗口化 DStream 的新 RDD。
  • 它提供窗口计算来支持使用 Spark Streaming 库的 RDD 转换过程。

问题:定义 RDD 谱系?

答:RDD Lineage是一个重建丢失数据分区的过程,因为Spark无法支持其内存中的数据复制过程。它有助于回忆用于构建其他数据集的方法。

问题:什么是 Spark 驱动程序?

答:Spark Driver 是指运行在机器主节点上的程序,它帮助声明对数据 RDD 的转换和动作。它有助于创建与给定 Spark Master 连接的 SparkContext,并在只有集群管理器运行的情况下将 RDD 图传递给 Master。

问:Spark 支持哪些类型的文件系统?

答:Spark 支持三种文件系统,包括:

  • 亚马逊 S3
  • Hadoop 分布式文件系统 (HDFS)
  • 本地文件系统。

问题:定义 Spark Executor?

答:Spark Executor 支持 SparkContext 通过集群中的节点与集群管理器连接。它在工作节点上运行计算和数据存储过程。

问题:我们可以在 Apache Mesos 上运行 Apache Spark 吗?

答:是的,我们可以使用 Mesos 管理的硬件集群在 Apache Mesos 上运行 Apache Spark。

问题:我们可以在 Spark 中触发自动清理吗?

答:是的,我们可以在 Spark 中触发自动清理来处理累积的元数据。可以通过设置参数来完成,即“spark.cleaner.ttl”。 

问题:除了“Spark.cleaner.ttl”之外,还有什么方法可以触发 Spark 中的自动清理?

答:除了“Spark.clener.ttl”之外,另一种触发Spark自动清理的方法是将长时间运行的作业分成不同的批次,并将中间结果写入磁盘。

问:Akka 在 Spark 中的作用是什么?

答:Spark 中的 Akka 有助于调度过程。它帮助 worker 和 master 为 worker 发送和接收消息以进行任务和 master 请求注册。

问题:在 Apache Spark RDD 中定义 SchemaRDD?

答:Apache Spark面试题有哪些?SchemmaRDD 是一个 RDD,它携带各种行对象,例如围绕基本字符串或整数数组的包装器以及有关每列中数据类型的模式信息。它现在更名为 DataFrame API。

问题:为什么要设计 SchemaRDD?

答:SchemaRDD 旨在使开发人员更容易在 SparkSQL 核心模块上进行代码调试和单元测试。

问题:Spark SQL、HQL 和 SQL 的基本区别是什么?

Apache Spark面试题解析:Spark SQL 在不改变任何语法的情况下支持 SQL 和 Hiver 查询语言。我们可以使用 Spark SQL 连接 SQL 和 HQL 表。

Apache Spark面试问题和答案合集总结

这完成了 50 个顶级 Spark 面试问题的列表。通过这些问题,你可以检查自己的 Spark 知识,并帮助准备即将到来的 Apache Spark 面试。

你可能想查看这个最好的 udemy 课程,以便在 Apache Spark 面试中表现更好:Apache Hadoop 面试问题准备课程。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: