sql on spark知识点

为什么使用Spark SQL

Spark的全栈解决方案为用户提供了多样的数据分析框架,机器学习、图计算、流计算如火如荼的发展和流行吸引了大批的学习者,为什么人们今天还是要重视在大数据环境下使用SQL 呢?主要有以下几点原因:
(1)易用性与用户惯性。在过去的很多年中,有大批的程序员的工作是围绕着数据库和应用的架构来做的,因为的易用性提升了应用的开发效率。程序员已经习惯了业务逻辑代码调用SQL的模式去写程序,惯性的力量是强大的,如果还能用原有方式解决现有的大数据问题,何乐而不为呢?提供SQL和JDBC的支持会让传统用户像以前一样地书写程序,大大减少迁移成本。
(2)生态系统的力量。很多系统软件性能好,但是未取得成功和没落,很大程度上因为生态系统问题。传统的SQL 在JDBC、ODBC、SQL的各种标准下形成了一整套成熟的生态系统,有很多应用、组件和工具可以使用,像一些可视化的工具、数据分析工具等,原有企业的IT工具可以无缝过渡。
(3)数据解耦。Spark SQL正在扩展支持多种持久化层,用户可以使用原有的持久化层存储数据,但是也可以体验和迁移到Spark SQL提供的数据分析环境下进行BigData的分析。

Spark SQL 能做什么

Spark SQL提供了用来操作结构化和半结构化数据的接口。结构化数据是指任何有结构信息的数据。所谓结构信息,就是每条记录共用的已知的字段集合。当数据符合这样的条件时,Spark SQL就会使得针对这些数据的读取和查询变得更加简单高效。具体来说,Spark SQL提供了以下三大功能:
(1)Spark SQL可以从各种结构化数据源(例如JSON、Hive、Parquet等)中读取数据;
(2)Spark SQL不仅支持在Spark程序内使用SQL语句进行数据查询,也支持从类似商业智能软件Tableau这样的外部工具中通过标准数据库连接器(JDBC/ODBC)连接Spark SQL进行查询;
(3)当在Spark程序内使用Spark SQL时,Spark SQL支持SQL与常规的Python/Java/Scala代码高度整合,包括连接RDD与SQL表、公开的自定义SQL函数接口等。这样一来,许多工作都更容易实现了。

Spark SQL的架构

Spark SQL与传统DBMS的查询优化器+执行器的架构较为类似。Spark SQL的执行器是在分布式环境中实现,并采用的Spark 作为执行引擎。Spark SQL的查询优化器则是基于Scala语言开发的Catalyst。它可以灵活利用Scala 原生的语言特性,很方便进行功能扩展,奠定了Spark SQL的广阔发展空间。Catalyst 将SQL 语言翻译成最终的执行计划,并在这个过程中进行查询优化。这里和传统不太一样的地方就在于,SQL 经过查询优化器最终转换为可执行的查询计划是一个查询树,传统DB就可以执行这个查询计划了。而Spark SQL最后执行还是会在Spark内将这棵执行计划树转换为Spark的有向无环图DAG 再执行。Catalyst的执行流程如下图所示:
在这里插入图片描述
SqlParser将SQL语句转换为逻辑查询计划;
Analyzer对逻辑查词计划进行属性和关系关联检验;
Optimize通过逻辑查询优化,将逻辑查询计划转换为优化的逻辑查询计划;
QueryPlanner将优化的逻辑查询计划转换为物理查询计划;
prepareForExecution调整数据分布;
最后将物理查询计划转换为执行计划进入Spark 执行任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Heartworm

你的鼓励就是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值