Hive on Spark是由Cloudera发起,由Intel、MapR等公司共同参与的开源项目,其目的是把Spark作为Hive的一个计算引擎,将Hive的查询作为Spark的任务提交到Spark集群上进行计算。通过该项目,可以提高Hive查询的性能,同时为已经部署了Hive或者Spark的用户提供了更加灵活的选择,从而进一步提高Hive和Spark的普及率。
Hive on spark大体与SparkSQL结构类似,只是SQL引擎不同,但是计算引擎都是spark!
Spark on Hive是Spark通过spark-sql客户端,编写SQL来操作Hive,底层运行的是Spark RDD。
官网对于Hive引擎的概述链接:https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties
属性名:hive.execution.engine
内容如下:
不同集群对两者的支持现状 大致对比大意如下:
Hive执行引擎默认是mr,但在2.0.0版本废弃了,只是由于历史原因,仍然保留mr引擎。
也就是说:
Hive1.X时:主流就是mr;可切换tez,不支持spark
Hive2.X时,不建议使用mr,可切换tez,spark
Hive3.X时,不支持mr。
| 引擎 | CDH(6.3.2) | HDP(3.1.1) |
|---|---|---|
| 2.1.1 | 3.1.0 | |
| mr | 支持 | 不支持(可以设置,但不能跑任务) |
| Tez | 不支持(可以设置,但不能跑任务) | 支持 |
| Spark | 支持 | 支持 |
HDP集群如下:Hive 版本为2.1.1
默认引擎:mr
支持切换spark。
不支持tez,虽引擎可设置为tez,但无法跑任务。
两者在工作中如何实现 Hive on SparkHive版本为3.1.0。
默认是tez,支持切换为Spark。
不支持mr引擎。
- 如上截图所示,直接切换底层引擎即可。
- 就是通过sparksql,加载hive的配置文件,获取到hive的元数据信息
- spark sql获取到hive的元数据信息之后就可以拿到hive的所有表的数据
- 接下来就可以通过spark sql来操作hive表中的数据
1.Hive on Spark是由Cloudera牵头,后期开发的,因此比Spark on Hive要晚出现。
2.Hive on Spark效率要低于Spark on Hive。
前者只有计算引擎是Spark,前期解析,转换,优化等步骤都是Hive完成。
后者只有元数据用了Hive,对SQL的解析,转换,优化等都是Spark完成。
e。
前者只有计算引擎是Spark,前期解析,转换,优化等步骤都是Hive完成。
后者只有元数据用了Hive,对SQL的解析,转换,优化等都是Spark完成。
3.至于选择Hive on Spark还是Spark on Hive,不能仅凭效率来决定,还要考虑公司技术储备和业务等多方面因素。



