使用 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 上下文