《Spark与Hadoop大数据分析》——3.3 Spark 程序的生命周期

简介: 本节书摘来自华章计算机《Spark与Hadoop大数据分析》一书中的第3章,第3.3节,作者 [美]文卡特·安卡姆(Venkat Ankam),译 吴今朝,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 Spark 程序的生命周期

以下步骤讲解了配备 Standalone 资源管理器的 Spark 应用程序的生命周期,图3-8 显示了Spark程序的调度过程:

(1)用户使用 spark-submit 命令提交一个 Spark 应用程序。
(2)spark-submit 在同一节点(客户端模式)或集群(集群模式)上启动驱动进程,并调用由用户指定的 main 方法。
(3)驱动进程联系集群管理器,根据提供的配置参数来请求启动执行进程 JVM 所需的资源。
(4)集群管理器在工作机节点上启动执行进程 JVM。
(5)驱动进程扫描用户应用程序。根据程序中的 RDD 动作和变换,Spark 会创建一个运算图。
(6)当调用一个动作(如 collect)时,图会被提交到一个有向无环图(DAG)调度程序。DAG 调度程序将运算图划分成一些阶段。
(7)一个阶段由基于输入数据分区的任务组成。DAG 调度程序会通过流水线把运算符连一起,从而优化运算图。例如,很多映射(map)运算符可以调度到一个阶段中。这种优化对 Spark 的性能是很关键的。DAG 调度程序的最终结果是一组阶段。
(8)这些阶段会被传递到任务调度程序。任务调度程序通过集群管理器(Spark Standalone / Yarn / Mesos)启动任务。任务调度器并不知道阶段之间的依赖性。
(9)任务在执行进程上运行,从而计算和保存结果。
(10)如果驱动进程的 main 方法退出,或者它调用了 SparkContext.stop(),它就会终止执行进程并从集群管理器释放资源。

图3-8描述了 Spark 程序的调度过程:

image

从内部来看,每个任务会执行相同的步骤:

image

让我们来了解在 Spark 中使用的术语,然后再进一步深入探讨 Spark 程序的生命周期:

image

3.3.1 流水线

在某些情况下,各阶段的物理集合不一定会完全和逻辑 RDD 图做到 1:1 对应。当无需移动数据就能根据其父节点计算出 RDD 时,就可以产生流水线。例如,当用户顺序地调用 map 和 filter 时,那些调用就可以被折叠成单个变换,它先映射再过滤每个元素。但是,复杂的 RDD 图会由 DAG 调度器划分为多个阶段。

利用 1.4 及更高版本的 Spark 管理界面,Spark 的事件时间轴和 DAG 可视化变得容易了。让我们执行以下代码来查看一个作业及其各阶段的 DAG 可视化:

image

图3-9 显示了上面的单词计数代码作业及其各阶段的可视化 DAG。它显示作业被分为两个阶段,因为在这种情况下发生了数据的混排。

image

图3-10 显示了阶段 0 的事件时间轴,它指明了每个任务所用的时间。

image

3.3.2 Spark 执行的摘要

在此简要说明 Spark 执行摘要:

image

相关文章
|
2天前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
24 6
|
2天前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
14 2
|
19天前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
26 5
|
1天前
|
分布式计算 监控 大数据
大数据-114 Flink DataStreamAPI 程序输入源 自定义输入源 Rich并行源 RichParallelSourceFunction
大数据-114 Flink DataStreamAPI 程序输入源 自定义输入源 Rich并行源 RichParallelSourceFunction
11 0
|
1天前
|
消息中间件 分布式计算 大数据
大数据-113 Flink DataStreamAPI 程序输入源 自定义输入源 非并行源与并行源
大数据-113 Flink DataStreamAPI 程序输入源 自定义输入源 非并行源与并行源
11 0
|
1天前
|
消息中间件 资源调度 大数据
大数据-112 Flink DataStreamAPI 程序输入源 DataSource 基于文件、集合、Kafka连接器
大数据-112 Flink DataStreamAPI 程序输入源 DataSource 基于文件、集合、Kafka连接器
10 0
|
2天前
|
SQL 分布式计算 大数据
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
8 0
|
2月前
|
存储 分布式计算 大数据
MaxCompute 数据分区与生命周期管理
【8月更文第31天】随着大数据分析需求的增长,如何高效地管理和组织数据变得至关重要。阿里云的 MaxCompute(原名 ODPS)是一个专为海量数据设计的计算服务,它提供了丰富的功能来帮助用户管理和优化数据。本文将重点讨论 MaxCompute 中的数据分区策略和生命周期管理方法,并通过具体的代码示例来展示如何实施这些策略。
129 1
|
2月前
|
存储 分布式计算 资源调度
Hadoop生态系统概览:从HDFS到Spark
【8月更文第28天】Hadoop是一个开源软件框架,用于分布式存储和处理大规模数据集。它由多个组件构成,旨在提供高可靠性、高可扩展性和成本效益的数据处理解决方案。本文将介绍Hadoop的核心组件,包括HDFS、MapReduce、YARN,并探讨它们如何与现代大数据处理工具如Spark集成。
80 0
|
2月前
|
分布式计算 Hadoop 大数据
大数据处理框架在零售业的应用:Apache Hadoop与Apache Spark
【8月更文挑战第20天】Apache Hadoop和Apache Spark为处理海量零售户数据提供了强大的支持
51 0

热门文章

最新文章