大数据,机器学习,人工智能Spark@IT·大数据

8.Spark Sql

2019-06-12  本文已影响0人  山间浓雾有路灯

定义

SparkSql是Apache Spark大数据框架的一部分,主要用于处理结构化数据和对Spark数据执行类sql的查询,Spark为其提供了一个称为DataFrame的编程抽象,充当分布式sql查询引擎

功能

框架

把数据接入到Spark Sql中,Spark Sql进行数据处理或算法实现,然后再把处理后的数据输出到相应的输出源


images

input(接入数据):

超集定义:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集,反过来,S2是S1的子集。 S1是S2的超集,若S1中一定有S2中没有的元素,则S1是S2的真超集,反过来S2是S1的真子集。

DataFrame

DataFrame是一个以命名列方式组织的分布式数据集,按照命名列的形式组织数据,等同于关系型数据库中的一个表
通过调用DataFrame的内容作为行RDD(RDD of Rows)返回的Rdd方法,可以将DataFrame转换成RDD
创建DataFrame方式

RDD以record为单位,Spark优化时无法洞悉record内部的细节,无法深度优化,限制了SparkSql性能的提升
DataFrame包含了每个record的metadata元数据信息,DataFrame的优化可以对列内部优化


images
细节

Catalyst(优化引擎)

基于规则

基于规则体现在经验式、启发式的优化思路,更多的依靠前辈总结出来的优化规则,简单易行且能够覆盖到大部分优化逻辑
例如join算子(两张表做join)

基于代价

工作流程

parser

analyzer

optimizer

physical planning

用物理操作算子产生一个或者多个物理计划,然后用cost模型选择一个物理计划。目前基于cost-based的优化仅仅用于选择join算子,对已知的很小的relations。sparkSql会选择使用spark的提高的点对点的广播功能实现broadcast join。
示例
此时就需要将逻辑执行计划转换为物理执行计划,将逻辑上可行的执行计划变为Spark可以真正执行的计划。比如join算子,Spark根据不同场景为该算子制定了不同的算法策略,有BroadcastHashJoin、ShuffleHashJoin以及SortMergeJoin等(可以将join理解为一个接口,BroadcastHashJoin是其中一个具体实现),物理执行计划实际上就是在这些具体实现中挑选一个耗时最小的算法实现


images

执行计划

使用queryExecution方法查看逻辑执行计划,使用explain方法查看物理执行计划


images
上一篇下一篇

猜你喜欢

热点阅读