SparkSQL系列-2、你知道SparkSQL的前世今生?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

传送门:大数据系列文章目录

官方网址http://spark.apache.org/http://spark.apache.org/sql/
在这里插入图片描述

SparkSQL的介绍

Spark SQL允许开发人员直接处理RDD,同时可以查询在Hive上存储的外部数据。 Spark SQL的一个重要特点就是能够统一处理关系表和RDD,使得开发人员可以轻松的使用SQL命令进行外部查询,同时进行更加复杂的数据分析。

前世今生

SparkSQL模块一直到Spark 2.0版本才算真正稳定,发挥其巨大功能,发展经历如下几个阶段。

在这里插入图片描述

Shark 框架

首先回顾SQL On Hadoop框架: Hive(可以说Hive是大数据生态系统中第一个SQL框架),架构如下所示:
在这里插入图片描述
可以发现Hive框架底层就是MapReduce,所以在Hive中执行SQL时,往往很慢很慢。
在这里插入图片描述
Spark出现以后, 将HiveSQL语句翻译成基于RDD操作,此时Shark框架诞生了。
在这里插入图片描述
Spark SQL的前身是Shark,它发布时Hive可以说是SQL on Hadoop的唯一选择(Hive负责将SQL编译成可扩展的MapReduce作业),鉴于Hive的性能以及与Spark的兼容, Shark由此而生。
Shark即Hive on Spark,本质上是通过Hive的HQL进行解析,把HQL翻译成Spark上对应的RDD操作,然后通过Hive的Metadata获取数据库里表的信息,实际为HDFS上的数据和文件,最后有Shark获取并放到Spark上计算。

但是Shark框架更多是对Hive的改造,替换了Hive的物理执行引擎,使之有一个较快的处理速度。然而不容忽视的是Shark继承了大量的Hive代码,因此给优化和维护带来大量的麻烦。 为了更好的发展, Databricks在2014年7月1日Spark Summit上宣布终止对Shark的开发,将重点放到SparkSQL模块上。

文档: https://databricks.com/blog/2014/07/01/shark-spark-sql-hive-on-spark-and-the-future-of-sql-on-spark.html

在这里插入图片描述
SparkSQL模块主要将以前依赖Hive框架代码实现的功能自己实现,称为Catalyst引擎。
在这里插入图片描述

SparkSQL 模块

从Spark框架1.0开始发布SparkSQL模块开发,直到1.3版本发布SparkSQL Release版本可以在生产环境使用,此时数据结构为: DataFrame = RDD + Schame。

1)、解决的问题

  • Spark SQL 执行计划和优化交给优化器 Catalyst;
  • 内建了一套简单的SQL解析器,可以不使用HQL;
  • 还引入和 DataFrame 这样的DSL API,完全可以不依赖任何 Hive 的组件;

2)、新的问题

  • 对于初期版本的SparkSQL,依然有挺多问题,例如只能支持SQL的使用,不能很好的兼容命令式,入口不够统一等;

SparkSQL 在 1.6 时代,增加了一个新的API叫做 Dataset, Dataset 统一和结合了 SQL 的访问和命令式 API 的使用,这是一个划时代的进步。在 Dataset 中可以轻易的做到使用 SQL 查询并且筛选数据,然后使用命令式 API 进行探索式分析。

Spark 2.x发布时,将Dataset和DataFrame统一为一套API,以Dataset数据结构为主(Dataset= RDD + Schema),其中DataFrame = Dataset[Row]

在这里插入图片描述

Hive 与 SparkSQL

从SparkSQL模块前世今生可以发现,从Hive框架衍生逐渐发展而来, Hive框架提供功能SparkSQL几乎全部都有,并且SparkSQL完全兼容Hive,从其加载数据进行处理。
在这里插入图片描述
Hive是将SQL转为MapReduce, SparkSQL可以理解成是将SQL解析成RDD + 优化再执行。

官方定义

SparkSQL模块官方定义:针对结构化数据处理Spark Module模块。
在这里插入图片描述
主要包含三层含义:
在这里插入图片描述
第一、针对结构化数据处理,属于Spark框架一个部分

  • 结构化数据:一般指数据有固定的 Schema(约束),例如在用户表中, name 字段是 String型,那么每一条数据的 name 字段值都可以当作 String 来使用;
    在这里插入图片描述
  • schema信息,包含字段的名称和字段的类型,比如: JSON、 XML、 CSV、 TSV、 MySQLTable、 ORC、 Parquet, ES、 MongoDB等都是结构化数据;

第二、抽象数据结构: DataFrame

  • 将要处理的结构化数据封装在DataFrame中,来源Python数据分析库Pandas和R语言dataframe;

  • DataFrame = RDD[Row] + Schema信息;

第三、分布式SQL引擎,类似Hive框架

  • 从Hive框架继承而来, Hive中提供bin/hive交互式SQL命令行及HiveServer2服务,SparkSQL都可以;

Spark SQL模块架构示意图如下:
在这里插入图片描述

SparkSQL 特性

Spark SQL是Spark用来处理结构化数据的一个模块,主要四个特性:
在这里插入图片描述
第一、易整合

可以使用Java、 Scala、 Python、 R等语言的API操作。在这里插入图片描述
第二、 统一的数据访问

连接到任何数据源的方式相同。
在这里插入图片描述
第三、 兼容Hive
支持Hive HQL的语法,兼容hive(元数据库、 SQL语法、 UDF、序列化、反序列化机制)。
在这里插入图片描述
第四、 标准的数据连接

可以使用行业标准的JDBC或ODBC连接。
在这里插入图片描述
SparkSQL模块官方文档: http://spark.apache.org/docs/2.4.5/sql-programming-guide.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

技术武器库

一句真诚的谢谢,胜过千言万语

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

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

打赏作者

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

抵扣说明:

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

余额充值