hive配置

aij0ehis  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(348)

我正在寻找一种方法来为sparksql集成测试配置配置配置单元,这样就可以将表写入临时目录或测试根目录下的某个地方。我的调查表明,这需要同时设置 fs.defaultFS 以及 hive.metastore.warehouse.dir 之前 HiveContext 已创建。
如本文所述,仅仅设置后者并不适用于spark 1.6.1。

val sqlc = new HiveContext(sparkContext)
sqlc.setConf("hive.metastore.warehouse.dir", hiveWarehouseDir)

表元数据放在正确的位置,但写入的文件放在/user/hive/warehouse。
如果Dataframe保存时没有显式路径,例如。,

df.write.saveAsTable("tbl")

要将文件写入的位置是通过调用来确定的 HiveMetastoreCatalog.hiveDefaultTableFilePath ,它使用 location 默认数据库的 HiveContext 构造,从而设置 fs.defaultFS 之后 HiveContext 施工没有效果。
作为旁白,但与集成测试非常相关,这也意味着 DROP TABLE tbl 只删除表元数据,但留下表文件,这会破坏预期。这是一个已知的问题——请看这里和这里——解决方法可能是确保 hive.metastore.warehouse.dir == fs.defaultFS + user/hive/warehouse .
简言之,配置属性如 fs.defaultFS 以及 hive.metastore.warehouse.dirHiveContext 构造函数运行?

7cjasjjr

7cjasjjr1#

这个 spark-testing-base 图书馆有一个 TestHiveContext 配置为的设置的一部分 DataFrameSuiteBaseLike . 即使你不能使用 scala-testing-base 由于某种原因,您可以直接看到它们是如何使配置工作的。

p8h8hvxi

p8h8hvxi2#

在Spark2.0中,在创建sparksession之前,可以在sparksession的生成器上设置“spark.sql.warehouse.dir”。它应该正确传播。
对于spark 1.6,我认为最好的办法是通过编程方式创建一个hite-site.xml。

相关问题