2016-05-05 2 views
1

Я ищу способ настройки тестирования интеграции 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 пробегов конструктор?

+0

Вы упомянули во втором абзаце, что не работает на Spark 1.6.1., Вы подразумеваете, что он работает с другими версиями? – hbogert

+0

Я предположил, что он работает над какой-то другой версией из-за ответа @ steven-bakhtiari, на который я ссылаюсь, который утверждает это. – Sim

ответ

2

В Spark 2.0 вы можете установить «spark.sql.warehouse.dir» на строитель SparkSession, прежде чем создавать SparkSession. Он должен распространяться правильно.

Для Spark 1.6, я считаю, что лучше всего будет программно создать hite-site.xml.

1

Библиотека spark-testing-base имеет TestHiveContext, настроенную как часть настройки для DataFrameSuiteBaseLike. Даже если вы по какой-то причине не можете использовать scala-testing-base, вы можете увидеть, как они работают с конфигурацией.

Смежные вопросы