Apache Spark:我如何理解和控制我的查询是在Hive引擎上执行还是在Spark引擎上执行



我正在运行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,但由于这个问题澄清了这只是关于元存储和表列表的,这不会改变执行引擎。

所以问题是:

  1. 如何理解我的查询是在Hive引擎上运行还是在Spark引擎上运行
  2. 我该如何控制

据我所知,没有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

最新更新