Spark原理与实战 | 青训营笔记

155 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第5天

一、大数据处理引擎Spark介绍

Apache Spark 具有以下特点:

使用先进的 DAG 调度程序,查询优化器和物理执行引擎,以实现性能上的保证;

多语言支持,目前支持的有 Java,Scala,Python 和 R;

提供了 80 多个高级 API,可以轻松地构建应用程序;

支持批处理,流处理和复杂的业务分析;

丰富的类库支持:包括 SQL,MLlib,GraphX 和 Spark Streaming 等库,并且可以将它们无缝地进行组合;

丰富的部署模式:支持本地模式和自带的集群模式,也支持在 Hadoop,Mesos,Kubernetes 上运行;

多数据源支持:支持访问 HDFS,Alluxio,Cassandra,HBase,Hive 以及数百个其他数据源中的数据。

image.png

执行过程:

用户程序创建 SparkContext 后,它会连接到集群资源管理器,集群资源管理器会为用户程序分配计算资源,并启动 Executor; Driver 将计算程序划分为不同的执行阶段和多个 Task,之后将 Task 发送给 Executor; Executor 负责执行 Task,并将执行状态汇报给 Driver,同时也会将当前节点资源的使用情况汇报给集群资源管理器。

二、SparkCore原理解析

Spark基本的工作原理里

  1. 分布式的:Spark加载的数据都是以分区的形式存储在各个节点上的,各个节点的分区组合在一起就是一个RDD,所以它是分布式的。
  2. 基于内存的:Spark在进行数据的转换或者计算的时候都是在内存中完成的,如果内存资源不够的话 ,那么它就会在磁盘中进行计算。
  3. 迭代计算

image.png

三、SparkSQL原理解析

(一)SparkSQL简介

Spark SQL是Spark的一个模块,用于处理结构化的数据,它提供了一个数据抽象DataFrame(最核心的编程抽象就是DataFrame),并且SparkSQL作为分布式SQL查询引擎。
Spark SQL就是将SQL转换成一个任务,提交到集群上运行,类似于Hive的执行方式。

(二)SparkSQL运行原理

将Spark SQL转化为RDD,然后提交到集群执行。

(三)SparkSQL特点

(1)容易整合,Spark SQL已经集成在Spark中

(2)提供了统一的数据访问方式:JSON、CSV、JDBC、Parquet等都是使用统一的方式进行访问

(3)兼容 Hive

(4)标准的数据连接:JDBC、ODBC

(四)SparkSQL语句组成及对应的查询过程

1、解析和执行:

    逻辑解析时:project模块、DataSource模块、Filter模块

    执行时:Result模块、DataSource模块、Opertion模块

2、执行流程分为五步:

a.query:执行流程、编写Sql查询语句

b.Parse解析查询语句:解析SQL语句形成逻辑解析树。sql语法是否错误:缺少标准字段、表是否存在等。

c.Bind:将解析后的逻辑解析树与数据库字典进行绑定、形成执行计划树。表的位置、字段信息、执行逻辑存在数据库的字典中,因此需要绑定。

d.Optimize:根据查询引擎提供的多个执行树,筛选出来最优的执行计划。

e.Execute:执行过程operation->DataSource->Result

3、执行流程的实现原理

SparkSql会将sql进行解析(parse),然后形成一个Tree的操作,即:query->parse->bind->optimize->execute

实现原理:对Tree的操作采用Rule,通过模式匹配,对不同类型的节点采用不同的操作。在整个sql语句的处理过程当中,Tree和Rule相互配合,完成解析、绑定(在SparkSQL中称为Analysis)、优化、物理计划等过程,最终可以生成的可以执行的物理计划。