这是我参与「第四届青训营 」笔记创作活动的的第5天
一、大数据处理引擎Spark介绍
Apache Spark 具有以下特点:
使用先进的 DAG 调度程序,查询优化器和物理执行引擎,以实现性能上的保证;
多语言支持,目前支持的有 Java,Scala,Python 和 R;
提供了 80 多个高级 API,可以轻松地构建应用程序;
支持批处理,流处理和复杂的业务分析;
丰富的类库支持:包括 SQL,MLlib,GraphX 和 Spark Streaming 等库,并且可以将它们无缝地进行组合;
丰富的部署模式:支持本地模式和自带的集群模式,也支持在 Hadoop,Mesos,Kubernetes 上运行;
多数据源支持:支持访问 HDFS,Alluxio,Cassandra,HBase,Hive 以及数百个其他数据源中的数据。
执行过程:
用户程序创建 SparkContext 后,它会连接到集群资源管理器,集群资源管理器会为用户程序分配计算资源,并启动 Executor; Driver 将计算程序划分为不同的执行阶段和多个 Task,之后将 Task 发送给 Executor; Executor 负责执行 Task,并将执行状态汇报给 Driver,同时也会将当前节点资源的使用情况汇报给集群资源管理器。
二、SparkCore原理解析
Spark基本的工作原理里
- 分布式的:Spark加载的数据都是以分区的形式存储在各个节点上的,各个节点的分区组合在一起就是一个RDD,所以它是分布式的。
- 基于内存的:Spark在进行数据的转换或者计算的时候都是在内存中完成的,如果内存资源不够的话 ,那么它就会在磁盘中进行计算。
- 迭代计算
三、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)、优化、物理计划等过程,最终可以生成的可以执行的物理计划。