9

依存する単体テストケースを作成しようとしてい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)

これは非常に厄介です。なぜまだ起こっているのでしょうか。また、どのように修正すればよいでしょうか。

4

4 に答える 4

3

http://spark.apache.org/docs/latest/sql-programming-guide.html#sqlによると

hive-site.xml の hive.metastore.warehouse.dir プロパティは、Spark 2.0.0 以降では推奨されていないことに注意してください。代わりに、spark.sql.warehouse.dir を使用して、倉庫内のデータベースのデフォルトの場所を指定します。

于 2016-10-10T05:16:45.090 に答える