【发布时间】:2015-08-11 15:27:51
【问题描述】:
我正在尝试编写一个依赖于DataFrame.saveAsTable() 的单元测试用例(因为它由文件系统支持)。我将 hive 仓库参数指向本地磁盘位置:
sql.sql(s"SET hive.metastore.warehouse.dir=file:///home/myusername/hive/warehouse")
默认情况下,Metastore 的嵌入式模式应该是启用的,因此不需要外部数据库。
但是 HiveContext 似乎忽略了这个配置:因为我在调用 saveAsTable() 时仍然得到这个错误:
MetaException(message:file:/user/hive/warehouse/users is not a directory or unable to create one)
org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:file:/user/hive/warehouse/users is not a directory or unable to create one)
at org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:619)
at org.apache.spark.sql.hive.HiveMetastoreCatalog.createDataSourceTable(HiveMetastoreCatalog.scala:172)
at org.apache.spark.sql.hive.execution.CreateMetastoreDataSourceAsSelect.run(commands.scala:224)
at org.apache.spark.sql.execution.ExecutedCommand.sideEffectResult$lzycompute(commands.scala:54)
at org.apache.spark.sql.execution.ExecutedCommand.sideEffectResult(commands.scala:54)
at org.apache.spark.sql.execution.ExecutedCommand.execute(commands.scala:64)
at org.apache.spark.sql.SQLContext$QueryExecution.toRdd$lzycompute(SQLContext.scala:1099)
at org.apache.spark.sql.SQLContext$QueryExecution.toRdd(SQLContext.scala:1099)
at org.apache.spark.sql.DataFrame.saveAsTable(DataFrame.scala:1121)
at org.apache.spark.sql.DataFrame.saveAsTable(DataFrame.scala:1071)
at org.apache.spark.sql.DataFrame.saveAsTable(DataFrame.scala:1037)
这很烦人,为什么仍然会发生以及如何解决?
【问题讨论】:
-
javax.jdo.option.ConnectionURL也无济于事。似乎已经实例化了上下文为时已晚。 -
想知道你是否曾经解决过这个问题 - 我也遇到了同样的问题
-
这里有同样的问题(spark 1.6.1)。尝试使用 hive-site.xml 进行设置,但它似乎忽略了它(但请解析文件,因为如果存在 xml 语法错误,它将无法启动)
标签: apache-spark apache-spark-sql spark-hive