Я ищу способ настройки тестирования интеграции Hive для Spark SQL, так что таблицы записываются либо во временный каталог, либо где-то под корнем тестирования. Мое расследование предполагает, что для этого требуется установить как fs.defaultFS
, так и hive.metastore.warehouse.dir
до HiveContext
.Конфигурация улья для тестов интеграции Spark
Просто установка последнего, как указано в этом документе answer не работает на Spark 1.6.1.
val sqlc = new HiveContext(sparkContext)
sqlc.setConf("hive.metastore.warehouse.dir", hiveWarehouseDir)
метаданные таблицы идет в нужном месте, но письменные файлы находятся в/пользователя/улей/склад.
Если dataframe сохраняется без явного пути, например,
df.write.saveAsTable("tbl")
место для записи файлов определяется через вызов HiveMetastoreCatalog.hiveDefaultTableFilePath
, который использует location
базы данных по умолчанию, который, кажется, в кэше во время строительства HiveContext
, установив таким образом fs.defaultFS
после HiveContext
. Конструкция не влияет.
В качестве стороннего, но очень актуального для тестирования интеграции это также означает, что DROP TABLE tbl
удаляет только метаданные таблицы, но оставляет файлы таблицы, что наносит ущерб ожиданиям. Это известная проблема - см. here & here - и решение может заключаться в обеспечении того, чтобы hive.metastore.warehouse.dir
== fs.defaultFS
+ user/hive/warehouse
.
Короче говоря, как можно конфигурационным свойства, такие как fs.defaultFS
и hive.metastore.warehouse.dir
быть установлены программно перед в HiveContext
пробегов конструктор?
Вы упомянули во втором абзаце, что не работает на Spark 1.6.1., Вы подразумеваете, что он работает с другими версиями? – hbogert
Я предположил, что он работает над какой-то другой версией из-за ответа @ steven-bakhtiari, на который я ссылаюсь, который утверждает это. – Sim