无法使用 Spark 访问 Hive 仓库目录
Posted
技术标签:
【中文标题】无法使用 Spark 访问 Hive 仓库目录【英文标题】:Unable to access to Hive warehouse directory with Spark 【发布时间】:2018-11-20 14:01:07 【问题描述】:我正在尝试使用位于以下路径的 IntelliJ 上的 Spark 连接到 Hive 仓库目录:
hdfs://localhost:9000/user/hive/warehouse
为了做到这一点,我使用了以下代码:
import org.apache.spark.sql.SparkSession
// warehouseLocation points to the default location for managed databases and tables
val warehouseLocation = "hdfs://localhost:9000/user/hive/warehouse"
val spark = SparkSession
.builder()
.appName("Spark Hive Local Connector")
.config("spark.sql.warehouse.dir", warehouseLocation)
.config("spark.master", "local")
.enableHiveSupport()
.getOrCreate()
spark.catalog.listDatabases().show(false)
spark.catalog.listTables().show(false)
spark.conf.getAll.mkString("\n")
import spark.implicits._
import spark.sql
sql("USE test")
sql("SELECT * FROM test.employee").show()
正如所见,我创建了一个数据库“test”并使用 hive 控制台在该数据库中创建了一个表“employee”。我想得到最新请求的结果。
'spark.catalog.'和'spark.conf。用于打印仓库路径和数据库设置的属性。
spark.catalog.listDatabases().show(false)
给我:
spark.catalog.listTables.show(false)
给了我一个空的结果。所以这一步出了点问题。
在作业执行结束时,我得到以下错误:
> Exception in thread "main" org.apache.spark.sql.catalyst.analysis.NoSuchDatabaseException: Database 'test' not found;
我还为 Hive 仓库位置配置了 hive-site.xml 文件:
<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://localhost:9000/user/hive/warehouse</value>
</property>
我已经使用 Hive 控制台创建了数据库“测试”。
下面是我的组件的版本:
火花:2.2.0 蜂巢:1.1.0 Hadoop:2.7.3有什么想法吗?
【问题讨论】:
我认为您不需要路径中的端口。使用这个val warehouseLocation = "hdfs:///user/hive/warehouse"
我已经尝试过了,我得到了同样的错误。
你有test
数据库
是的,我将“显示数据库”命令的结果发送给您:默认测试所用时间:0.542 秒,获取 2 行`
【参考方案1】:
在 IntelliJ 项目中的 src 下创建资源目录,复制该文件夹下的 conf 文件。构建项目 .. 确保正确定义 hive.metastore.warehouse.uris 路径参考 hive-site.xml 。如果您正在获取 INFO metastore: Connected to metastore 那么您可以在日志中找到。例子。
请注意,与打包 jar 并在您的 hadoop 集群上运行相比,与 intellij 建立连接并运行作业会很慢。
【讨论】:
以上是关于无法使用 Spark 访问 Hive 仓库目录的主要内容,如果未能解决你的问题,请参考以下文章
无法从 impala/hive/spark sql 访问“spark 注册表”