谈一谈Spark的那些事

面向面试的博客,以问答式Q/A方式呈现。


Question1:简要介绍一下 Spark 架构?

Answer1:

Spark 提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。

Spark 核心架构,如下图所示:
在这里插入图片描述
对于上图中重要概念解释:

Spark Core(即上图中第二层Apache Spark)
Spark Core 中包含 Spark 的基本功能,尤其是定义 RDD 的 API、操作以及这两者上的动作,其他 Spark 的库都是构建在 RDD 和 Spark Core 之上的。

注意:RDD,Resilient Distributed DataSet,即弹性分布式数据集。

Spark SQL
提供 HiveQL(一种 Apache Hive 的 SQL 变体 Hive 查询语言)与 Spark 进行交互的 API。每个数据库表被当做一个 RDD,Spark SQL 查询被转换为 Spark 操作。

Spark Streaming
对实时数据流进行处理和控制。Spark Streaming 允许程序能够像普通 RDD 一样处理实时数据。

Mllib(Machine Learning)
一个常用机器学习算法库,算法被实现为对 RDD 的 Spark 操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。

GraphX
控制图、并行图操作和计算的一组算法和工具的集合。GraphX 扩展了 RDD API,包含控制图、创建子图、访问路径上所有顶点的操作。


Question2:简要介绍一下 Spark核心组件 ?

Answer2:

Spark 组件交互,如下图所示:

在这里插入图片描述
对于上图中重要概念解释:

Cluster Manager
在 standalone 模式中即为 Master 主节点,控制整个集群,监控 worker。
在 YARN 模式中为集群管理器。

Worker Node
作为从节点,负责控制计算节点,启动 Executor 或者 Driver。

Driver
运行 Application 的 main() 函数。

Executor
执行器,是为某个 Application 运行在 worker node 上的一个进程。


Question3:简要介绍一下 Spark编程模型 ?

Answer3:

Spark编程模型,如下图所示:
在这里插入图片描述

Spark 应用程序从编写到提交、执行、输出的整个过程如图所示,图中描述的步骤如下:

  1. 用户使用SparkContext提供的API(常用的有textFile、sequenceFile、runJob、stop等)编写 Driver application 程序。此外 SQLContext、HiveContext 及 StreamingContext 对SparkContext 进行封装,并提供了 SQL、Hive 及流式计算相关的 API。
  2. 使用SparkContext提交的用户应用程序,首先会使用BlockManager和BroadcastManager 将任务的 Hadoop 配置进行广播。然后由 DAGScheduler 将任务转换为 RDD 并组织成 DAG,DAG 还将被划分为不同的 Stage。最后由 TaskScheduler 借助 ActorSystem 将任务提交给集群管理器(Cluster Manager)。
  3. 集群管理器(ClusterManager)给任务分配资源,即将具体任务分配到Worker上,Worker创建 Executor 来处理任务的运行,运行结果保存到Store存储中。Standalone、YARN、Mesos、EC2 等都可以作为 Spark的集群管理器;HDFS、Amzon、S3、Tachyon等都可以作为Store存储。

Question4:介绍一下 Spark计算模型 ?

Answer4:

Spark计算模型运作图,如下所示:
在这里插入图片描述

上图中,RDD 英文全称 Resiliennt Distributed Datasets,译为 弹性分布式数据集 ,可以看做是对各种数据计算模型的统一抽象,Spark 的计算过程主要是 RDD 的迭代计算过程。RDD 的迭代计算过程非常类似于管道,即上图中每一个分区(从分区1到分区N)可以看做是一个管道。分区数量取决于 partition 数量的设定,每个分区的数据只会在一个 Task 中计算。所有分区可以在多个机器节点的 Executor 上并行执行。


Question5:谈一谈 Spark运行流程 ?

Answer5:

Spark运行流程图,如下图所示:
在这里插入图片描述
对于上图的解释:

  1. 构建 Spark Application 的运行环境,启动 SparkContext。
  2. SparkContext 向资源管理器(可以是 Standalone、Mesos 、Yarn )申请运行Executor 资源,并启动 StandaloneExecutorbackend 。
  3. Executor 向 SparkContext 申请 Task 。
  4. SparkContext 将应用程序分发给 Executor。
  5. SparkContext 构建成 DAG 图,将 DAG 图分解成 Stage 、将 Taskset 发送给 Task Scheduler ,最后由 Task Scheduler 将 Task 发送给 Executor 运行。
  6. Task 在 Executor 上运行,运行完释放所有资源。

Question6:介绍一下 Spark RDD流程 ?

Answer6:

Spark RDD流程图,如下所示:
在这里插入图片描述
对于上图的解释:

  1. 创建 RDD 对象。
  2. DAGScheduler 模块介入运算,计算 RDD 之间的依赖关系,RDD 之间的依赖关系就形成了DAG。
  3. 每一个 Job 被分为多个 Stage。划分 Stage 的一个主要依据是当前计算因子的输入是否是确定的,如果是则将其分在同一个 Stage,避免多个 Stage 之间的消息传递开销。

Question7:介绍一下 Spark RDD ?

Answer7:

(1 )RDD 的创建方式

1)从Hadoop文件系统(或与Hadoop兼容的其他持久化存储系统,如Hive、Cassandra、HBase)输入(例如 HDFS)创建。
2)从父 RDD 转换得到新 RDD。
3)通过 parallelize 或 makeRDD 将单机数据创建为分布式 RDD。

(2 )RDD 的两种操作算子 ( 转换(Transformation)与行动(Action) )

对于 RDD 可以有两种操作算子:转换(Transformation)与行动(Action)。

1) 转换(Transformation):Transformation操作是延迟计算的,也就是说从一个RDD转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真正触发运算。
在这里插入图片描述

2)行动(Action):Action 算子会触发 Spark 提交作业(Job),并将数据输出 Spark 系统。
在这里插入图片描述

发布了207 篇原创文章 · 获赞 80 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_36963950/article/details/105336060