SparkSQL概念介绍

简介: Spark SQL:将sql转换成spark任务

Spark SQL:将sql转换成spark任务


1、Spark SQL:主要处理结构化的数据

通常工业界,需要将非结构化数据转成结构化数据,然后再进一步计算和处理

2、Hive存储数据有几个层次:

table/partition/buckets/hdfs

spark sql可以和hive相结合使用

3、spark streaming中模板称为Dstream

spark sql新的概念:DataFrame,当做一个table-关系表,DataFrame(表)= Schema(表结构) + Data(表数据)

DataFrame:相比RDD多了数据的结构信息,即schema。DataFrame(表)是Spark SQL对结构化数据的抽象。可以将DataFrame看做RDD。

RDD是分布式的 Java对象的集合。DataFrame是分布式的Row对象的集合。

DataFrame优点:除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化

5、DataFrame数据来源:数据源多样

(1)外部数据源(SQLContext):HDFS、网络接口、Mysql。。。

(2)Hive数据源(HiveContext):Hive

两者关系:HiveContext继承于SQLContext,SQLContext支持语法更多,但不支持HQL,HiveContext仅支持HQL

6、DataFrame是分布式table,并不是spark独创,也不装真正的数据,而是转换关系和描述,更像传统数据库中的二维表

7、RDD与DataFrame区别:

RDD是以行为单位(record)读数据

DataFrame包含了每个record的metadata元数据信息,DataFrame可以对其内部进行列优化

image.png


8、RDD与DataFrame相同点:懒惰机制


处理数据步骤:

(1)读入:SQLContext、HiveContext

(2)处理:DataFrame

(3)输出:SQLContext、HiveContext


9、DataSet--spark1.6之后推出的新的API,也是一个分布式数据集(在scala中,DataFrame其实是DataSet[Row],这个Row里面包含了多个列信息)

Dataset是数据的分布式集合。Dataset是在Spark 1.6中添加的一个新接口,是DataFrame之上更高一级的抽象。

提供了RDD的优点(强类型化)以及Spark SQL优化后的执行引擎的优点。

一个Dataset 可以从JVM对象构造,然后使用函数转换(map, flatMap,filter等)去操作。

Dataset API 支持Scala和Java。 Python不支持Dataset API。

10、spark sql处理核心:Catalyst工作流程(用tree结构来存储sql、DataFrame)

优化点:

(1)基于规则:经验式、启发式优化思路

对于两张表join的方法选择(broadcastHashJoin、sortMergeJoin)

(2)基于代价(join大小表,外排和内排):代价模型,调整join的顺序

11、数据处理工作流程:

(1)Parser

(2)Analyzer

(3)Optimizer

(4)Physical Planning

12、内存管理:Tungsten Off-heap内存管理

突破JVM内存管理限制,分配堆外内存,使得spark实现了自己独立内存管理,避免JVM资源回收引发的性能问题

13、优化

基于规则优化

基于代价优化(join)


目录
相关文章
|
存储 SQL JSON
Spark - 一文搞懂 parquet
parquet 文件常见于 Spark、Hive、Streamin、MapReduce 等大数据场景,通过列式存储和元数据存储的方式实现了高效的数据存储与检索,下面主要讲parquet 文件在 spark 场景下的存储,读取与使用中可能遇到的坑。......
2226 0
Spark - 一文搞懂 parquet
|
4月前
|
SQL 机器学习/深度学习 分布式计算
|
7月前
|
SQL 机器学习/深度学习 分布式计算
Spark的主要概念
Spark的主要概念
112 0
|
SQL 存储 分布式计算
剖析下 HiveOnSpark与 SparkOnHive 的异同
剖析下 HiveOnSpark与 SparkOnHive 的异同
|
安全 Java 程序员
如何理解并使用 park 与 unpark
park和unpark是Java中的两个线程同步工具,用于线程的阻塞和唤醒操作。
408 0
如何理解并使用 park 与 unpark
|
SQL 分布式计算
SparkSQL实践
SparkSQL实战:统计用户及商品数据指标,包含以下三张表
177 0
SparkSQL实践
|
存储 分布式计算 Scala
Spark - 一文搞懂 Partitioner
spark 处理 RDD 时提供了 foreachPartition 和 mapPartition 的方法对 partition 进行处理,一个 partition 内可能包含一个文件或者多个文件的内容,Partitioner 可以基于 pairRDD 的 key 实现自定义partition 的内容。
326 0
Spark - 一文搞懂 Partitioner
|
SQL JSON 分布式计算
SparkSQL 是什么_适用场景 | 学习笔记
快速学习 SparkSQL 是什么_适用场景
327 0
|
分布式计算 Spark
Spark的几个概念
Spark的几个概念
192 0
|
SQL 存储 分布式计算
sparkSQL实战详解
sparkSQL实战详解 如果要想真正的掌握sparkSQL编程,首先要对sparkSQL的整体框架以及sparkSQL到底能帮助我们解决什么问题有一个整体的认识,然后就是对各个层级关系有一个清晰的认识后,才能真正的掌握它 本篇博客主要是对sparkSQL实战进行讲解和总结,而不是对sparkSQL源码的讲解,如果想看源码的请绕道。
1548 0