【问题标题】:Apache Spark: how can I understand and control if my query is executed on Hive engine or on Spark engine?Apache Spark:我如何理解和控制我的查询是在 Hive 引擎还是 Spark 引擎上执行的?
【发布时间】:2021-03-18 06:55:14
【问题描述】:

我正在运行 spark 2.4.0 的本地实例

我想对 Hive 执行 SQL 查询

在使用 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,但正如this 问题所澄清的那样,这只是关于元存储和表列表,这不会改变执行引擎。

所以问题是:

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

【问题讨论】:

    标签: apache-spark hive


    【解决方案1】:

    据我了解,没有 Hive 引擎可以运行您的查询。您向 Hive 提交查询,Hive 将在引擎上执行它:

    • 火花
    • Tez(基于 MapReduce)
    • MapReduce(通常是 Hadoop)

    如果您使用 Spark,您的查询将由 Spark 使用 SparkSQL 执行(从 Spark v1.5.x 开始,如果我没记错的话)

    Hive 引擎的配置方式取决于配置,我记得在 Cloudera 发行版上看到过 Hive on Spark 配置。 因此 Hive 会使用 Spark 来执行匹配您查询的作业(而不是 MapReduce 或 Tez),但 Hive 会解析、分析它。

    使用本地 Spark 实例,您将只使用 Spark 引擎(SparkSQL / Catalyst),但您可以将其与 Hive 支持一起使用。这意味着,您将能够读取现有的 Hive 元存储并与之交互。

    它需要带有 Hive 支持的 Spark 安装:Hive 依赖项和类路径中的 hive-site.xml

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2017-01-22
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多