如何在 spark-shell (spark 2.1.1) 中启用对 spark 的 Hive 支持

Posted

技术标签:

【中文标题】如何在 spark-shell (spark 2.1.1) 中启用对 spark 的 Hive 支持【英文标题】:How to Enable Hive Support for spark in spark-shell (spark 2.1.1) 【发布时间】:2017-10-25 01:04:41 【问题描述】:

我正在尝试在 spark-shell 中启用对 spark 对象的 Hive 支持,但它不起作用。我正在使用 Hortonworks HDP。以下是我尝试启用 Hive 支持时得到的结果:

scala> val spark3 = SparkSession.builder.enableHiveSupport.getOrCreate
17/10/24 21:30:28 WARN SparkSession$Builder: Using an existing SparkSession; some configuration may not take effect.
spark3: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@22f8be7c

scala> spark3.catalog
res3: org.apache.spark.sql.catalog.Catalog = org.apache.spark.sql.internal.CatalogImpl@49c13ecd

【问题讨论】:

嗯...它的工作。你试过spark.sql()吗? 抱歉代码,但 spark3.catalog 显示的内容与 spark.catalog 相同。 问题是 spark.cataglog 显示的目录类型是 org.apache.spark.sql.internal.CatalogImpl。如果 enableHiveSupport() 有效,那么它应该显示 org.apache.spark.sql.hive.HiveSessionCatalog。 你有什么参考可以打印HiveSessionCatalog?该类在该包中不存在,如果有的话。 spark.apache.org/docs/2.1.1/api/java/org/apache/spark/sql/hive/… 【参考方案1】:

在 HDP 中,spark-shell 已经创建了具有 Hive 支持的有效 SparkSession。

您收到警告说getOrCreate 使用了现有会话

你可以试试

spark.sql("show tables").show()

另外,您使用的是spark 而不是spark3,所以不清楚spark.catalog 除了该对象的toString 信息之外会显示什么

【讨论】:

我认为 spark.sql() 有效,因为 SparkSession 内部实现了 Hive 的一个版本;所以,我认为这就是 spark.sql()、spark.catalog 和类似的东西起作用的原因。 “SparkSession 内部实现了 Hive 的一个版本”……不完全是。 Spark Thrift 服务器与 Hive 兼容。 Spark 使用的默认元存储是嵌入式 Derby 数据库。在 HDP 中,hive-site.xml 被放置并从$SPARK_HOME/conf 读取,这是在调用enableHiveSupport 时读取的,但是在 spark-shell 中已经完成了,上次我检查了

以上是关于如何在 spark-shell (spark 2.1.1) 中启用对 spark 的 Hive 支持的主要内容,如果未能解决你的问题,请参考以下文章

Spark-shell引入第三方包

如何将命令行参数传递给 spark-shell scala 脚本?

如何在 spark-shell 中设置 aws 访问密钥和 aws 密钥

如何从 spark-shell/spark-submit 运行交互式 Spark 应用程序

如何在没有 Spark-Shell 的情况下从 AWS 控制台运行 Spark jar 文件

如何使用 spark-avro 包从 spark-shell 读取 avro 文件?