使用 Spark SQL 创建带有连接的 Hive 表时使用的引擎

Posted

技术标签:

【中文标题】使用 Spark SQL 创建带有连接的 Hive 表时使用的引擎【英文标题】:engine used when creating Hive table with joins using Spark SQL 【发布时间】:2018-07-13 09:52:53 【问题描述】:

从文档中我不确定在使用 Spark 中的 HiveContext 创建 Hive 表时,它会使用 Spark 引擎还是标准 Hive mapreduce 作业来执行任务?

val sc = new SparkContext()
val hc = new HiveContext(sc)

hc.sql("""
    CREATE TABLE db.new_table
    STORED AS PARQUET
    AS SELECT
        field1,
        field2,
        field3
    FROM db.src1 
        JOIN db.src2
        ON (x = y)
"""
)

【问题讨论】:

【参考方案1】:
Spark 1.6

Spark SQL 支持使用 HiveContext 的 Apache Hive。它使用Spark SQL execution engine 处理存储在 Hive 中的数据。

above Spark 2.x

val spark = SparkSession .builder() .appName( "SparkSessionExample" ) .config( "spark.sql.warehouse.dir" ,warehouseLocation) .enableHiveSupport() .getOrCreate()

【讨论】:

回答不够清楚。例如。 Spark 2 不需要 Hivecontext。Spark 有自己的 API,或者 Hive 可以使用 SPARK 作为引擎。写入与读取? @thebluephantom 是的,我知道我可以在 Hive 中将 spark 设置为引擎,但我明确要求在 Spark 应用程序中编写代码。无论如何感谢您的指出。 但我的回答涵盖了一切。我认为【参考方案2】:

现在执行此操作时,SPARK 将使用 SPARK API 而不是 MR。 Hivecontext 不需要像已弃用那样显式引用,即使在 spark-submit/program 模式下也是如此。

【讨论】:

不确定你的意思。从 Hive 表中读取数据需要 HiveContext,SQLContext 不起作用,至少在我使用的 Spark 1.6.0 中。 事情在发展,所以你需要清楚。 Spark 2.x 是你应该去的地方

以上是关于使用 Spark SQL 创建带有连接的 Hive 表时使用的引擎的主要内容,如果未能解决你的问题,请参考以下文章

Spark 本地连接远程服务器上带有kerberos认证的Hive

Spark Sql 从 Hive orc 分区表中读取,给出数组越界异常

无法在 spark 中使用 hive 支持创建 sql 上下文

Spark-SQL连接Hive

使用 API 而不是 SQL 从 Spark 创建 Hive 表?

使用Spark创建HIVE-SQL练习环境原创首发