Spark SQL之延伸Hive On Spark

一:Spark SQL 与 Hive On Spark的区别


Spark SQL是Spark是Spark的一个项目。
研发出来的针对各种数据源,包括Hive、JSON、Parquet、JDBC、RDD等都可以执行查询的,一套基于Spark计算引擎的查询引擎

Hive On Spark是Hive的一个项目
不通过MapReduce作为唯一的查询引擎,而是将Spark作为底层的查询引擎


二:Hive的基本工作原理


Hive QL语句 => 
语法分析 => AST => 
生成逻辑执行计划 => Operator Tree => 
优化逻辑执行计划 => Optimized Operator Tree => 
生成物理执行计划 => Task Tree => 
优化物理执行计划 => Optimized Task Tree => 
执行优化后的Optimized Task Tree

三:Hive On Spark的计算原理


1、将Hive表作为Spark RDD来进行操作

2、使用Hive原语
对于一些针对RDD的操作,比如groupByKey、sortByKey等。不使用Spark的transformation操作和原语

3、新的物理执行计划生成机制
使用SparkCompiler将逻辑执行计划,即Operator Tree,转换为Task Tree。提交Spark Task给Spark进行执行。

4、SparkContext生命周期
Hive On Spark会为每个用户的会话: 执行一次SQL语句,创建一个SparkContext

5、本地和远程运行模式
本地:将Spark Master设置为local,比如set spark.master=local
SparkContext与客户端运行在一个JVM中

远程:将Spark Master设置为Master的地址,那么就是远程模式
SparkContext会在远程的JVM中启动

通过RPC与远程JVM中的SparkContext进行通信

四:Hive On Spark的优化点


1、Map Join
Spark SQL默认对join是支持使用broadcast机制将小表广播到各个节点上,以进行join的

目前采取的是,类似乎MapReduce的Distributed Cache机制,即提高HDFS replica factor的复制因子,以让数据在每个计算节点上都有一个备份,从而可以在本地进行数据读取

2、Cache Table
对于某些需要对一张表执行多次操作的场景,Hive On Spark内部做了优化,即将要多次操作的表cache到内存中,以便于提升性能

五:RPC了解


RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议

步骤:
运行时,一次客户机对服务器的RPC调用,大致有如下十步:
1.调用客户端句柄;执行传送参数
2.调用本地系统内核发送网络消息
3.消息传送到远程主机
4.服务器句柄得到消息并取得参数
5.执行远程过程

6.执行的过程将结果返回服务器句柄
7.服务器句柄返回结果,调用远程系统内核
8.消息传回本地主机
9.客户句柄由内核接收消息
10.客户接收句柄返回的数据


六:剩余疑问


Hive是什么?
其底层默认是基于MapReduce实现的?
陆续出来了新的SQL查询引擎。包括Spark SQL,Hive On Tez,Hive On Spark等。
Hive 和 HBase 的区别:
SQL查询引擎指什么?
引擎是什么?
一条SQL语句执行的细致原理?? 
环境搭建!!! 
Hive 的架构模式儿???—— 与传统的关系型数据库的区别


 

猜你喜欢

转载自blog.csdn.net/weixin_39966065/article/details/93538139