Spark SQL概述及特点详解

简介: 笔记

一、Spark SQL概念


它主要用于结构化数据处理和对Spark数据执行类SQL的查询。通过Spark SQL,可以针对不同格式的数据执行ETL操作(如JSON,Parquet,数据库)然后完成特定的查询操作。一般来说,Spark每支持一种新的应用开发,都会引入一个新的Context及相应的RDD,对于SQL这一特性来说,引入的就是SQLContext和SchemaRDD。注意:在Spark1.3之后,SchemaRDD已经更名为DataFrame,但它本质就类似一个RDD,因为可以将DataFrame无缝的转换成一个RDD。


二、Spark SQL的特点


提供标准化的SQL支持和子查询支持

支持多种数据源: Hive、 RDD、Parquet、 JSON、 JDBC等。

多种性能优化技术: in memory columnar storage、byte code generation、cost model动态评估等。

组件扩展性:对于SQL的语法解析器、分析器以及优化器,用户都可以自已重新开发,并且动态扩展。


1、内存列存储(in-memory columnar storage)

内存列存储意味着,Spark SQL的数据,不是使用Java对象的方式来进行存储,而是使用面向列的内存存储的方式来进行存储。也就是说,每一列,作为一个数据存储的单位。从而大大优化了内存使用的效率。采用了内存列存储之后,减少了对内存的消耗,也就避免了gc大量数据的性能开销。


2、字节码生成技术(byte code generation)

Spartk SQL在其catalyst模块的expressions中增加了codegen模块,对于SQL语句中的计算表达式,比如select num +num from t这种的sql,就可以使用动态字节码生成技术来优化其性能。


3、Scala代码编写的优化

对于Scala代码编写中,可能会造成较大性能开销的地方,自己重写,使用更加复杂的方式,来获取更好的性能。比如Option样例类、for循 环、map/filter/foreach等高 阶函数,以及不可变对象,都改成了用null、while循 环等来实现,并且重用可变的对象。

25.png


三、Spark SQL 与 Hive 的区别


前面介绍了spark sql的基本概念,下面介绍一下Spark SQL 与 Hive 的区别。

什么是Spark SQL


Spark SQL是Spark中专门用来处理结构化数据(每一行数据都遵循Schema信息建表时表的字段及其类型)的一个模块

提供了 DataFrame/Dataset 的对分布式数据处理的基本抽象

其实之上是一个分布式的 SQL 引擎

什么是 Hive


数据仓库,能使用 SQL 读取、写入和管理存在于分布式存储架构上的大数据集

结构可以映射到已经存储的数据上

用户连接 Hive 可以使用命令行工具和 JDBC 驱动

两者的区别


都支持ThriftServer服务,为JDBC提供解决方案,区别如下:

Spark SQL


是Spark的一个库文件

Spark SQL 元数据可有可无

Spark SQL 中 schema 是自动推断的

支持标准 SQL 语句,也支持 HQL 语句等

从开发角度来讲,即支持SQL方式开发,也支持HQL开发,还支持函数式编程(DSL)实现SQL语句

Hive


是一个框架

Hive中必须有元数据,一般由 MySql 管理,必须开启 metastore 服务

Hive 中在建表时必须明确使用 DDL 声明 schema

只支持 HQL 语句

Hive:处理海量数据,比如一个月、一个季度、一年的数据量,依然可以处理,虽然很慢;

Spark SQL:这种情况下 Spark SQL 不支持,无法处理;



相关文章
|
7天前
|
SQL JSON 分布式计算
【赵渝强老师】Spark SQL的数据模型:DataFrame
本文介绍了在Spark SQL中创建DataFrame的三种方法。首先,通过定义case class来创建表结构,然后将CSV文件读入RDD并关联Schema生成DataFrame。其次,使用StructType定义表结构,同样将CSV文件读入RDD并转换为Row对象后创建DataFrame。最后,直接加载带有格式的数据文件(如JSON),通过读取文件内容直接创建DataFrame。每种方法都包含详细的代码示例和解释。
|
1月前
|
存储 分布式计算 算法
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
47 0
|
1月前
|
消息中间件 分布式计算 Kafka
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
39 0
|
1月前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
42 0
|
1月前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
78 0
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
34 0
|
分布式计算 Spark Shell
spark概述与编程模型
spark快的原因1.内存计算 2.DAG spark shell已经初始化好了SparkContext,直接用sc调用即可 lineage 血统 RDD wide and narrow dependencies 窄依赖每个 RDD partition最多被一个子RDD partirion依赖 /sbin(system binary)放的都是涉及系统管理的命令。有些系统里面
1132 0
|
Web App开发 分布式计算 算法
Spark入门到精通视频学习资料--第二章:Spark生态系统介绍,Spark整体概述与Spark编程模型(2讲)
概述 什么是Spark ◆ Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
1489 0
|
16天前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
50 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
1月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
60 0