一个专注于大数据技术架构与应用分享的技术博客

使用Spark Structured Streaming写入Hudi

深度剖析Spark分布式执行原理

Apache Spark 是一个快速通用的大数据处理框架。它支持多种数据源,包括 Hadoop Distributed File System (HDFS)、Cassandra、HBase等。Spark 的一个主要特点就是其基于内存运算,相比于传统的 Hadoop MapReduce 框架,Spark 明显具有更高的执行效率。Spark 的分布式执行原理是其高效性的重要保证。

Spark 的分布式架构

Spark 的分布式架构是其高效处理的关键因素。在 Spark 的架构中,分布式执行器是一个重要的组成部分。当用户提交任务时,Spark 会将其分解为不同的任务单元并搭配数据形成不同的 stage。 然后,这些 stage 会被分配到集群中的执行器中去执行。Spark 任务的运行过程如下图所示。

Spark 的分布式执行架构示意图

上图展示了一个典型的 Spark 集群,由一个 Master 和多个 Worker 节点组成。Master 节点负责管理 Worker 节点,以及任务的调度和协调。Worker 节点则负责执行 Spark 应用程序的任务,并将中间结果保存在内存中。

Spark的分布式执行原理

在图中,我们可以看到 Spark 任务的执行包含以下多个步骤:

  1. 任务创建: Spark 任务通常是由 SparkContext 对象创建。
  2. 分割数据: 如果数据源很大,服务端先将其划分为多个Partition,在每个节点上只处理该节点所分配的Partition,避免无效的数据传输和网络带宽的浪费。
  3. 任务调度: 任务调度负责将Spark应用程序的任务分配到执行器节点上。任务调度采用了集中式的方式,Spark Context 将 Job 分配给其中一个任务 Scheduler(TaskScheduler)。Scheduler 将 Job 划分为多个不同的 Stages,每个 Stage 包含一组有着相同输入的 Task。
  4. 任务执行: 任务执行器接收到任务后,首先将数据存储在内存或磁盘中,然后在本地或其他节点上执行相关操作。在每个 Task 执行完毕后,执行器返回 Task 的结果到 Driver 程序。
  5. 任务结果获取: 当所有的 Task 完成后,SparkContext 将收集它们的结果,并根据需要将它们存储在磁盘中或返回给用户。

Spark 采用 DAG 执行引擎(DAG Execution Engine)来执行任务. 首先把用户的任务根据 DGP 转化为执行计划,然后再对任务进行调度,按照计划执行任务。而 Spark 中的 DAG 通常是由一个 Spark核心处理单元(RDD)构成的;RDD 虽然是一个分区数据集(partitioned datasets),但它内部所封装的是一个操作序列,该序列记录了 RDD 的产生方式和所有的转换操作方式(transformation),所以如果一个 RDD 由另一个 RDD 生成出来,那么 Spark 会自动在内部优化这个操作过程,形成任务执行优化策略。

在Spark中,RDD是一个基本执行单元,所有的操作都转化为对 RDD 的操作。RDD会将分布式数据集划分成多个 Partition,然后将这些 Partition 在不同的节点上进行计算。当一个节点上有 Partition 当前的 stage 执行完毕后,这个节点会将计算结果传输给本计算结果依赖的其他节点。这样就可以保证所有结果都被计算过了,然后 Spark 会

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《使用Spark Structured Streaming写入Hudi》
文章链接:https://macsishu.com/use-spark-structured-to-hudi-streaming
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。