如何在 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 scala 脚本?
如何在 spark-shell 中设置 aws 访问密钥和 aws 密钥
如何从 spark-shell/spark-submit 运行交互式 Spark 应用程序