网站首页 > 技术文章 正文
Hive架构
在讲解SparkSQL之前,让我们先来看看基于MR的Hive的架构:
SparkSQL的演变
- Shark
SparkSQL是从Shark发展而来。Shark为了实现与Hive的兼容,在HQL方面用了Hive中的HQL解析、逻辑执行计划、执行计划优化,不同的是将物理计划从原有的MR作业替换成了Spark作业, 通过Hive的HQL解析,把HQL转换成Spark底层的RDD操作。先来看看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的架构:
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的计算。
猜你喜欢
- 2024-10-12 大佬用10小时就把Spark讲完了,附6大技术文档
- 2024-10-12 浅析图数据库 Nebula Graph 数据导入工具——Spark Writer
- 2024-10-12 Spark Streaming 和 Flink 谁是数据开发者的最爱?
- 2024-10-12 分享几点 Spark Streaming 调优实践经验
- 2024-10-12 大数据学习之计算天下——SPARK的那些事
- 2024-10-12 第二篇|Spark core编程指南 spark编程软件
- 2024-10-12 Spark计算引擎 spark是基于什么计算引擎
- 2024-10-12 Spark Shuffle机制 sparkshuffle原理
- 2024-10-12 一文带你了解SparkStreaming窗口函数
- 2024-10-12 深度预警:Spark运行原理 简述spark的运行架构和原理
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)