cdh hive on spark_Spark-SQL、Hive on Spark、Spark on Hive

最近实践过程中引发了很多思考,其中Spark-SQL、Hive on Spark、Spark on Hive这三者的关系是其中非常有意思且容易混淆的的概念。相信很多刚接触spark的童鞋还没理解spark怎么回事的时候就看到这三个概念更是以一头雾水。特地单独拎出来以梳理清楚记录下来。

其实其中关系非常简单,先来认识几个概念:

1,Spark RDD计算引擎

2,Spark SQL的SQL语法解析

3,Hive MR计算引擎

4,Hive SQL的SQL语法解析

什么是Spark RDD计算引擎?

Spark整个生态群中,底层计算引擎是基于RDD的。这个也是为什么Spark计算性能比较快的原因。

通常我们狭隘上理解的SparkRDD计算引擎,是指RDD底层生成DAG执行计划,基于DAG生成详细的excutor和更细粒度的多线程池模型来减少task启动开销。有如下特点:

  • 使用内存计算引擎,提供Cache缓存机制支持迭代计算或多次数据共享,减少数据读取的IO开销
  • DAG引擎,减少多次计算之间中间结果写到HDFS的开销
  • 使用多线程池模型来减少task启动开销,shuffle过程中避免不必要的
  • sort操作以及减少磁盘IO操作

8d58c45d349ce03fc5c6ac1a3137508a.png

什么是Spark SQL的SQL语法解析?

和大多数的SQL数据库一样,SQL非常通用代码,可以通过简单的语法规则,统计出多样性的结果集。Spark SQL在SQL是Spark生态圈中一个重要分支。

SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,hive应运而生,它是当时唯一运行在Hadoop上的SQL-on-hadoop工具。但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低的运行效率,为了提高SQL-on-Hadoop的效率,Shark应运而生,但又因为Shark对于Hive的太多依赖(如采用Hive的语法解析器、查询优化器等等),2014年spark团队停止对Shark的开发,将所有资源放SparkSQL项目上。

289356ba3521906e5bc1bdefd126211d.png

直观通俗理解是:能写SQL然后调用SparkRDD计算引擎进行分布式计算任务,从而达到使得更快地编写和运行Spark程序编写更少的代码,读取更少的数据,让优化器自动优化程序,释放程序员的工作的目的。所以即SQL+SparkRDD计算引擎。

其实Spark过程分为

1,SQL语法解析

2,逻辑计划

3,物理计划

什么是Hive MR计算引擎?

Hadoop的两个重要的部分:HDFS(分布式文件存储系统);MapReduce(MR计算引擎)

Hive的MR计算引擎就是整个Hadoop中的MapReduce部分。

一图解释了什么是Hive 在MR中执行:

218f1a62ae06f7ae3e144ed4a09650a2.png
图 1.1 Hive On MR 流程图

那么又何为MapReduce呢?

MapReduce是面向大数据并行处理的计算模型、框架和平台[1]

狭隘上的MapReduce就是指Map和Reduce函数

广义上的MapReduce是一种计算框架和平台,不仅仅是两个函数。

什么是Hive SQL的SQL语法解析?

Hive SQL首先是一种SQL,其次是SQL转换了MR计算引擎。一条HQL和一条普通SQL一样语法规则没什么太大差别,除了一些函数处理之外。但是SQL最终转换解析是完全两个架构,这点很容易就联想到Spark SQL,有解析,然后每个步骤最红到SparkRDD计算引擎。那么HQL语法解析经历了哪些阶段呢?

大体是可以分为六个阶段的:

  • Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree
  • 遍历AST Tree,抽象出查询的基本组成单元QueryBlock
  • 遍历QueryBlock,翻译为执行操作树OperatorTree
  • 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量
  • 遍历OperatorTree,翻译为MapReduce任务
  • 物理层优化器进行MapReduce任务的变换,生成最终的执行计划

解析步骤,和sparkSQL大同小异。(大数据领域中的presto,impala这种支持SQL查询架构,大同小异,非常好理解)


那么我们先拆分下四个概念:Spark SQL引擎,SparkRDD引擎,Hive SQL引擎,Hive MR引擎。

来看这三个概念:Spark-SQL、Hive on Spark、Spark on Hive

Spark-SQL:Spark SQL引擎 + SparkRDD引擎

Hive on Spark:Hive SQL引擎+ SparkRDD引擎

Spark on Hive: Hive SQL引擎+ SparkRDD引擎

Hive on Spark和Spark on Hive之间从SQL和计算引擎是一模一样的,如果区分?

Hive on Spark 是在Hive中配置Spark,运行方式入口是通过Hive,底层是有第三方的hive on spark中间包自动转换MR引擎,变为SparkRDD引擎。

Spark on Hive 是在Spark中配置Hive,运行方式入口是通过Spark,底层通过配置Hive的hive-site.xml,hdfs-site.xml等配置文件来直接操作hive SQL,其实是Hive的语法规则,但是计算还是本身的SparkRDD引擎。

Spark-SQL、Hive on Spark、Spark on Hive使用场景

从计算引擎上来看,三者都是SparkRDD计算引擎。从计算性能上来看,其实不会差非常多,都是取决于SparkRDD计算引擎。

Spark-SQL更多是开发Code中进行计算任务比较多,同时Saprk-SQL可以持久化到库表中方便第二次使用。

Hive on Spark,常规的数仓查询任务的,对外接口服务之类的。因为Hadoop生态群中的WEBUI界面非常丰富,所以直接通过HiveSQL查询将会非常方便。

Spark on Hive,使用Spark作为开发架构的,Hive作为数仓存储的场景中使用。

参考

  1. ^百度百科 https://baike.baidu.com/item/MapReduce/133425?fr=aladdin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值