Spark SQLインテグレーションテスト用にHiveを設定する方法を探しています。これは、テーブルがテンポラリディレクトリまたはテストルートの下のどこかに書き込まれるようにします。私の調査では、HiveContext
を作成する前に、fs.defaultFS
とhive.metastore.warehouse.dir
の両方を設定する必要があることが示唆されています。Sparkインテグレーションテストのハイブ設定
このanswerに記載されているとおり、後者を設定するだけで、Spark 1.6.1では機能しません。
val sqlc = new HiveContext(sparkContext)
sqlc.setConf("hive.metastore.warehouse.dir", hiveWarehouseDir)
表のメタデータは適切な場所に保存されますが、書かれたファイルは/ user/hive/warehouseに移動します。
データフレームは、例えば、
df.write.saveAsTable("tbl")
ファイルを書き込む場所があると思われるデフォルトのデータベースのlocation
を使用していますHiveMetastoreCatalog.hiveDefaultTableFilePath
への呼び出しを介して決定されるために、明示的なパスなしで保存されている場合HiveContext
の構築時にキャッシュされるため、fs.defaultFS
の設定後にHiveContext
の構成は無効です。
これは、統合テストに非常に関連しています。これは、DROP TABLE tbl
がテーブルメタデータを削除するだけですが、テーブルファイルを残してしまうことを意味します。これは既知の問題です。herehereを参照してください。解決策は、hive.metastore.warehouse.dir
== fs.defaultFS
+ user/hive/warehouse
です。要するに
、このようfs.defaultFS
やhive.metastore.warehouse.dir
などのプロパティをコンフィギュレーションすることができますどのようにプログラムで前HiveContext
コンストラクタの実行を設定しますか?
2番目の段落では、Spark 1.6.1で動作していないことを述べていますが、これは他のバージョンでも動作することを意味していますか? – hbogert
私はリンクしている@ steven-bakhtiariの答えのため、他のバージョンで作業していると思っていました。 – Sim