Spark之核心架构

Posted 柳小葱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark之核心架构相关的知识,希望对你有一定的参考价值。

😻前面我们介绍了一些pyspark的基础指令集,但是对spark的核心架构了解还不够透彻,今天我们就来介绍一些spark的核心架构,以及一些基本概念,对以前内容感兴趣的小伙伴可以查看👇:

今天我们来介绍一下spark的一些运行原理、架构、组成部分。

1.spark运行架构

spark框架的核心是一个计算引擎,整体来说,它采用了标准的master——slave的结构。如图所示,它展示了一个 Spark 执行时的基本结构。图形中的 Driver 表示 master,负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave,负责实际执行任务。

1.1 Driver

Driver是spark的驱动节点,用于执行spark任务中的main方法,负责实际代码的执行工作。主要负责以下任务:

  • 将用户程序转化为作业(job)
  • 在Executor之间调度任务
  • 跟踪Executor的执行情况
  • 通过 UI 展示查询运行情况

通俗理解Driver就是驱使整个应用运行起来的程序,也称之为
Driver 类

1.2 Executor

Spark Executor 是集群中工作节点(Worker)中的一个 JVM 进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行。

  • 负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程
  • 它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD 提供内存式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

2.RDD

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型

  • 存储的弹性:内存与磁盘的自动切换;
  • 容错的弹性:数据丢失可以自动恢复;
  • 计算的弹性:计算出错重试机制;
  • 分片的弹性:可根据需要重新分片。
  • 分布式:数据存储在大数据集群不同节点上
  • 数据集:RDD 封装了计算逻辑,并不保存数据
  • 数据抽象:RDD 是一个抽象类,需要子类具体实现
  • 不可变:RDD 封装了计算逻辑,是不可以改变的,想要改变,只能产生新的 RDD,在新的 RDD 里面封装计算逻辑
  • 可分区、并行计算

我们应该如何去理解这个RDD,如何理解是是最基本的数据处理单元,解释RDD之前先说一下java的IO操作,这里之所以要说java的IO是因为RDD的处理方式和java的IO操作很像。

2.1 IO操作的字符流

在字符流中,我们并不是将A、B、C字符读一个然后输出一个,而是将字符读到缓冲区中,等缓冲区的数据占满了之后,一并输出。

2.2 IO操作的字节流

在字节流中,我们并没有重新定义字节流的IO模式,只是在字符流的基础上增加了一些逻辑过程,我们在字符流的基础上增加了utf-8方式转关换流,将字符转化为字节,然后再存入缓冲区,等到缓冲区占满后,再输出结果。这种利用字符流的基础来构建字节流的方式叫做装饰者设计模式。

2.3 RDD

我们需要处理个文件,将文件按行读入hadoopRDD,然后mappartitionRDD将数据进行分区,然后再用mappartitionRDD转化为key-value形式,然后再用shuffleRDD进行聚合,输出最后的结果。
大家看到RDD的处理方式和IO很像,让我们来总结一下:

  • RDD处理方式类似于IO,也是装饰者设计模式
  • 这里一层一层的RDD只是定义了数据的处理逻辑,并不会真正执行,只有当触发collect方法时才会触发真正的执行过程。
  • IO中有缓冲区;RDD是没有缓冲区的,不保存数据。

参考资料

《尚硅谷spark3.0》
《Spark权威指南》

以上是关于Spark之核心架构的主要内容,如果未能解决你的问题,请参考以下文章

Spark系列之Spark体系架构

《深入理解Spark-核心思想与源码分析》第二章Spark设计理念和基本架构

Spark设计理念与基本架构

Spark 学习总结

spark核心概念以及运行架构

大数据之Spark:Spark 底层执行原理