sparksql 操作hive_二十八、SparkSQL入门

550fdd0491d60697179ad41a33637897.png

SparkSQL

Hive架构

在讲解SparkSQL之前,让我们先来看看基于MR的Hive的架构:

d2acdeda7c60565c3c0022ab21405edb.png

Hive架构

SparkSQL的演变

  • Shark

SparkSQL是从Shark发展而来。Shark为了实现与Hive的兼容,在HQL方面用了Hive中的HQL解析、逻辑执行计划、执行计划优化,不同的是将物理计划从原有的MR作业替换成了Spark作业, 通过Hive的HQL解析,把HQL转换成Spark底层的RDD操作。先来看看Shark架构:

c954af4ee3a369d017f48cb17766a7d3.png

Shark架构

使用Shark的方式主要存在以下问题:

    • 使用HQL解析,逻辑执行计划与物理执行计划的解析完全依赖于Hive, 不方便添加优化策略;
    • Spark非Shuffle类算子的计算主要是基于内存处理,多个Task可以在线程层面并行执行。而传统的MR作业是进程级别并行,因此,Spark在兼容Hive的实现上不得不定制以解决线程安全问题;
    • 这种方式完全依赖于Hive的HQL解析引擎,Hive的版本更新会对Spark造成影响,给Spark的优化和维护增加大量的成本。
  • SparkSQL

从Spark1.3开始,Spark专门开发了SparkSQL模块,对原有的Shark进行了大量的优化,并在Shark的原有架构上重写了逻辑执行计划的优化部分,SparkSQL在Hive兼容层面令依赖HQL的SQL解析、Hive元数据管理以及Hive存储,也就是说,从HQL被解析成抽象语法树(AST)起,就由SparkSQL接管, SparkSQL执行计划生成和执行计划的优化都由Catalyst负责。来看看SparkSQL的架构:

9e84159e133d603661a6a99b58f8d2ab.png

SparkSQL架构

SparkSQL抛弃原有Shark的代码,汲取了Shark的一些优点,如内存列存储(In-Memory Columnar Storage)、Hive兼容性等,重新开发了SparkSQL代码。

由于摆脱了对hive的依赖性,SparkSQL无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便。

Spark SQL增加了SchemaRDD(即带有Schema信息的RDD),使用户可以在Spark SQL中执行SQL语句,数据既可以来自RDD,也可以来自Hive、HDFS、Cassandra等外部数据源,还可以是JSON格式的数据。

SparkSQL特点

SparkSQL是Spark的一个独立模块,主要用于进行结构化数据的处理。它提供了最核心的编程抽象DataFrame,它可以根据多种数据源进行构建,其执行原理是将SparkSQL转换为底层的RDD的依赖的有向无环图提交到Spark集群运行。SparkSQL主要有以下特点:

  • 基于DataFrame编程API提供两种方式处理数据:SQL方式和DataFrame的DSL语法;
  • SparkSQL完全兼容Hive的元数据、SQL语法、UDF、序列化与反序列化机制;
  • SparkSQL提供统一的数据源访问API, 可以从多种数据源读取多种类型的数据;
  • SparkSQL提供了标准的JDBC和ODBC连接,对处理好的数据可以对接BI, 数据库等外部系统或存储。
  • 引入了新的RDD类型SchemaRDD,可以像传统数据库定义表一样来定义SchemaRDD
  • 内嵌了查询优化框架,在把SQL解析成逻辑执行计划之后,最后变成RDD的计算。
d902e700f7b839367fd37189b10dbb19.png

下节将介绍SparkSQL之核心抽象DataFrame

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值