云湖湖导读:
之前我们揭秘了华为云DLI背后的核心技术引擎Spark,了解了Spark的核心概念与架构。那么,究竟是什么让Spark既提供了通用优雅的接口,同时又具备强大的计算能力呢?要回答这个问题,就需要了解Spark SQL及其运行流程。今天,我们主要通过以下两点来解析:
1、Spark SQL是什么
2、Spark SQL核心——Catalyst查询编译器
更多优质内容请关注微信公众号“智能数据湖”
作者:王振华
责编:云湖湖
Spark SQL是什么
Spark SQL是Spark系统的核心组件,为来自不同数据源、不同格式的数据提供了结构化的视角,让用户可以使用 SQL 轻松的从数据中获取有价值的信息。
图 Spark生态
在Spark中,Spark SQL并不仅仅是狭隘的SQL,而是作为Spark程序优化、执行的核心组件。流计算、机器学习、图计算、深度学习等应用都可以转化为DataFrame/Dataset的API。这些API和通常的SQL一样,共享优化层、执行层,共享访问多种数据源的能力。可以说,Spark SQL是让Spark应用程序拥有高效性、高可容错性和丰富生态的“幕后英雄”。
图 Spark SQL的角色
Spark SQL核心——Catalyst查询编译器
Spark SQL的核心是一个叫做Catalyst的查询编译器,它将用户程序中的SQL/Dataset/DataFrame经过一系列操作,最终转化为Spark系统中执行的RDD。
Catalyst中的框架如下图所示,它有以下几个重要组成部分:
兼容ANSI SQL 2003标准和HiveQL。将SQL/Dataset/DataFrame转化成一棵未经解析(Unresolved)的树,在Spark中称为逻辑计划(Logical Plan),它是用户程序的一种抽象。
Analyzer
利用目录(Catalog)中的信息,对Parser中生成的树进行解析。Analyzer有一系列规则(Rule)组成,每个规则负责某项检查或者转换操作,如解析SQL中的表名、列名,同时判断它们是否存在。通过Analyzer,我们可以得到解析后的逻辑计划。
Optimizer
对解析完的逻辑计划进行树结构的优化,以获得更高的执行效率。优化过程也是通过一系列的规则来完成,常用的规则如谓词下推(Predicate Pushdown)、列裁剪(Column Pruning)、连接重排序(Join Reordering)等。此外,Spark SQL中还有一个基于成本的优化器(Cost-based Optmizer),是由DLI内部开发并贡献给开源社区的重要组件。该优化器可以基于数据分布情况,自动生成最优的计划。
Planner
将优化后的逻辑计划转化成物理执行计划(Physical Plan)。由一系列的策略(Strategy)组成,每个策略将某个逻辑算子转化成对应的物理执行算子,并最终变成RDD的具体操作。注意在转化过程中,一个逻辑算子可能对应多个物理算子的实现,如join可以实现成SortMergeJoin或者BroadcastHashJoin,这时候需要基于成本模型(Cost Model)来选择较优的算子。上面提到的基于成本的优化器在这个选择过程中也能起到关键的作用。
经过上述的一整个流程,就完成了从用户编写的SQL语句(或DataFrame/Dataset),到Spark内部RDD的具体操作逻辑的转化。
整个Catalyst框架拥有良好的可扩展性,开发者可以根据不同的需求,灵活地添加自己的语法、解析规则、优化规则和转换策略。
总结
经过上面的介绍,我们可以看到, SparkSQL 是 Spark 强大的计算和处理能力的使能者。 DLI 服务在全面兼容 Spark 能力的同时,还提供了丰富的数据源对接能力。通过 DLI 服务,用户可以通过 SQL 轻松访问 OBS 、 DWS 、 CloudTable 、 Elasticsearch 等多个服务中的数据,在降低使用门槛的同时,避免了数据搬迁,从而实现在一个数据湖中的高效信息探索。
▼ 每周二18点,不见不散 ▼
延伸阅读
喜欢这篇文章吗?点一下「好看」再走:point_down:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- MapReduce运行流程分析
- Goland使用初探以及运行流程浅析
- Struts2 运行流程分析之doFilter
- Apache Hadoop YARN 的架构与运行流程
- 从Zygote说到View(一)Zygote的启动流程及运行机制
- 宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java常用算法手册
2012-5 / 59.00元
《Java常用算法手册》分三篇,共13章,分别介绍了算法基础、算法应用和算法面试题。首先介绍了算法概述,然后重点分析了数据结构和基本算法思想;接着,详细讲解了算法在排序、查找、数学计算、数论、历史趣题、游戏、密码学等领域中的应用;最后,列举了算法的一些常见面试题。书中知识点覆盖全面,结构安排紧凑,讲解详细,实例丰富。全书对每一个知识点都给出了相应的算法及应用实例,虽然这些例子都是以Java语言来编......一起来看看 《Java常用算法手册》 这本书的介绍吧!