Spark SQL 简介

是什么?

image

Spark 1.0 推出 Spark SQL,是 Spark 生态系统中最活跃的组件之一。能够利用 Spark 进行结构化的存储和操作。结构化数据可以来自外部源:Hive/Json/parquet,1.2开始支持 JDBC等,也可以对已有 RDD 增加 Schema 的方式获得。

当前 Spark SQL 使用 Catalyst 优化器对 SQL 语句进行优化,从而得到更好的执行方案。

生态中的一环

更重要的是,Spark SQL 基于 DataFrame 可以和 SparkStreaming ,MLIb 等进行无缝集成,这样可以使用一种技术栈对数据进行批处理,流式处理和交互式查询等。

Spark SQL允许使用SQL或熟悉的DataFrame API在Spark程序中查询结构化数据。可用于Java、Scala、Python和R。

Hive vs Shark vs Spark SQL

Hive 是 Shark 的前身,Shark 是 Spark SQL 的前身。

根据伯克利实验室提供的测试数据,Shark 基于内存的计算性能是 hive 的100倍左右,即使是磁盘计算,它的性能也是 hive 的 10 倍左右。而 Spark SQL 比 Shark 又有较大的提升。

Hive 是建立在 Hadoop 之上的数据仓库基础框架,也是最早运行在 Hadoop 上的 SQL on Hadoop 工具之一,但是 hive 是基于 MapReduce 的,计算过程有大量的中间磁盘落地过程,消耗了大量的 IO,这大大降低了运行效率。基于此,大量优化的 SQL Hadoop 的工具出现,变现最为突出的就是 Shark。

Shark 直接建立在 Apache Hive 上,扩展了 Hive 并修改了 Hive 架构中的内存管理、物理计划和执行三个模块,使之可以运行在 Spark引擎上面。所以它几乎支持 hive 的所有特点,数据格式、UDF,并采用 hive 的解析器,查询优化器等。(如下图所示)

Spark SQL 简介_第1张图片
image

2014年,Databricks 公司宣布 Shark 全面转向 Spark SQL。

Spark SQL 在 hive 兼容层面仅依赖于 HQL Parser/Hive Metastore/Hive SerDes,也就是从 HQL 被解析成语法树(AST)q起,就全部由 Spark SQL 接管了,执行计划和优化都是由 Catalyst 负责。

除了支持现有的 Hive 脚本,Spark SQL 还内建了一个精简的 SQL 解析以及一套 Scala DSL,如果使用 Spark SQL 内建方言或 Scala DSL 对原生 RDD 对象进行操作,我们可以完全不依赖 hive 那套东西。Spark SQL 吸取了 Shark 的优点,比如内存列存储。

DataFrames和SQL提供了访问各种数据源的通用方法,包括Hive、Avro、Parquet、ORC、JSON和JDBC。甚至可以跨这些源连接数据。

Spark SQL 简介_第2张图片
image

参考

https://spark.apache.org/sql/

(完)

原文地址:https://mp.weixin.qq.com/s?__biz=MzU3NDUzMjA0MQ==&mid=2247483732&idx=1&sn=f93d6bbe55fca2d9bb89b3698bf5ac33&chksm=fd31b1f2ca4638e4ce4d328d543b17b10129db1c726118627ade60242ef41dbcfd49e33e2967&token=1882532060&lang=zh_CN#rd

你可能感兴趣的:(Spark SQL 简介)