用于 Spark 集成测试的 Hive 配置
Hive configuration for Spark integration tests
我正在寻找一种为 Spark SQL 集成测试配置 Hive 的方法,以便将 table 写入临时目录或测试根目录下的某个位置。我的调查表明,这需要在创建 HiveContext
之前同时设置 fs.defaultFS
和 hive.metastore.warehouse.dir
。
仅设置后者,如本 中所述,不适用于 Spark 1.6.1。
val sqlc = new HiveContext(sparkContext)
sqlc.setConf("hive.metastore.warehouse.dir", hiveWarehouseDir)
table 元数据位于正确的位置,但写入的文件位于 /user/hive/warehouse。
如果保存数据帧时没有明确的路径,例如
df.write.saveAsTable("tbl")
写入文件的位置是通过调用 HiveMetastoreCatalog.hiveDefaultTableFilePath
确定的,它使用默认数据库的 location
,似乎在 HiveContext
构造期间缓存,因此在 HiveContext
构造之后设置 fs.defaultFS
没有效果。
顺便说一句,但这与集成测试非常相关,这也意味着 DROP TABLE tbl
仅删除 table 元数据但保留 table 文件,这对预期造成了严重破坏。这是一个已知问题——参见 here & here——解决方案可能是确保 hive.metastore.warehouse.dir
== fs.defaultFS
+ user/hive/warehouse
.
简而言之,fs.defaultFS
和 hive.metastore.warehouse.dir
等配置属性如何以编程方式设置 在 HiveContext
构造函数运行之前?
在 Spark 2.0 中,您可以在创建 SparkSession 之前在 SparkSession 的构建器上设置 "spark.sql.warehouse.dir"。它应该正确传播。
对于 Spark 1.6,我认为您最好的选择可能是以编程方式创建一个 hite-site.xml.
spark-testing-base
library has a TestHiveContext
configured as part of the setup for DataFrameSuiteBaseLike
。即使您出于某种原因无法直接使用 scala-testing-base
,您也可以查看它们如何使配置工作。
我正在寻找一种为 Spark SQL 集成测试配置 Hive 的方法,以便将 table 写入临时目录或测试根目录下的某个位置。我的调查表明,这需要在创建 HiveContext
之前同时设置 fs.defaultFS
和 hive.metastore.warehouse.dir
。
仅设置后者,如本
val sqlc = new HiveContext(sparkContext)
sqlc.setConf("hive.metastore.warehouse.dir", hiveWarehouseDir)
table 元数据位于正确的位置,但写入的文件位于 /user/hive/warehouse。
如果保存数据帧时没有明确的路径,例如
df.write.saveAsTable("tbl")
写入文件的位置是通过调用 HiveMetastoreCatalog.hiveDefaultTableFilePath
确定的,它使用默认数据库的 location
,似乎在 HiveContext
构造期间缓存,因此在 HiveContext
构造之后设置 fs.defaultFS
没有效果。
顺便说一句,但这与集成测试非常相关,这也意味着 DROP TABLE tbl
仅删除 table 元数据但保留 table 文件,这对预期造成了严重破坏。这是一个已知问题——参见 here & here——解决方案可能是确保 hive.metastore.warehouse.dir
== fs.defaultFS
+ user/hive/warehouse
.
简而言之,fs.defaultFS
和 hive.metastore.warehouse.dir
等配置属性如何以编程方式设置 在 HiveContext
构造函数运行之前?
在 Spark 2.0 中,您可以在创建 SparkSession 之前在 SparkSession 的构建器上设置 "spark.sql.warehouse.dir"。它应该正确传播。
对于 Spark 1.6,我认为您最好的选择可能是以编程方式创建一个 hite-site.xml.
spark-testing-base
library has a TestHiveContext
configured as part of the setup for DataFrameSuiteBaseLike
。即使您出于某种原因无法直接使用 scala-testing-base
,您也可以查看它们如何使配置工作。