我正在运行spark 2.4.0 的本地实例
我想执行SQL查询与Hive
之前,在Spark 1.x.x中,我使用了HiveContext:
import org.apache.spark.sql.hive.HiveContext
val hc = new org.apache.spark.sql.hive.HiveContext(sc)
val hivequery = hc.sql(“show databases”)
但现在我看到HiveContext已被弃用:https://spark.apache.org/docs/2.4.0/api/java/org/apache/spark/sql/hive/HiveContext.html.在HiveContext.sql((代码中,我看到它现在只是SparkSession.sql(的包装器。建议在SparkSession构建器中使用enableHiveSupport,但由于这个问题澄清了这只是关于元存储和表列表的,这不会改变执行引擎。
所以问题是:
- 如何理解我的查询是在Hive引擎上运行还是在Spark引擎上运行
- 我该如何控制
据我所知,没有Hive引擎可以运行您的查询。你向Hive提交了一个查询,Hive会在一个引擎上执行它:
- 火花
- Tez(基于MapReduce(
- MapReduce(仅限Hadoop(
如果您使用Spark,您的查询将由Spark使用SparkSQL执行(如果我记得正确的话,从Spark v1.5.x开始(
配置单元引擎的配置取决于配置,我记得在Cloudera发行版上看到过Spark上的配置单元。因此,Hive会使用Spark来执行与您查询的作业匹配(而不是MapReduce或Tez(,但Hive会对其进行解析和分析
使用本地Spark实例,您将只使用Spark引擎(SparkSQL/Catalysis(,但您可以在配置单元支持下使用它。这意味着,你将能够阅读现有的蜂巢元存储并与之交互。
它需要一个带有Hive支持的Spark安装:Hive依赖项和类路径中的Hive-site.xml