Hive on Spark VS Spark on Hive
两者概述
Hive on Spark
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 | 支持 | 支持 |
CDH集群如下:
Hive 版本为2.1.1
默认引擎:mr
支持切换spark。
不支持tez,虽引擎可设置为tez,但无法跑任务。
HDP集群如下:
Hive版本为3.1.0。
默认是tez,支持切换为Spark。
不支持mr引擎。
两者在工作中如何实现
Hive on Spark
- 如上截图所示,直接切换底层引擎即可。
Spark on Hive
- 就是通过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,不能仅凭效率来决定,还要考虑公司技术储备和业务等多方面因素。