Я пытаюсь написать нетривиальное задание Hive, используя интерфейсы Hive Thrift и JDBC, и у меня возникли проблемы с настройкой достойного теста JUnit. Нетривиальным я имею в виду, что работа приводит к по меньшей мере одному этапу MapReduce, а не только к метасторе.
Тест должен запускать сервер Hive, загружать некоторые данные в таблицу, запускать некоторый нетривиальный запрос в этой таблице и проверять результаты.
Я подключил контекст Spring в соответствии с Spring ссылка. Однако работа не выполняется на этапе MapReduce, жалуясь, что нет двоичного файла Hadoop:
java.io.IOException: не удается запустить программу "/usr/bin/hadoop" (в каталог "/Пользователи/yoni/opower/workspace/intellij_project_root" ): error = 2, Нет такого файла или каталога
Проблема в том, что сервер Hive работает в оперативной памяти, но использует локальную установку Hive для запуска. Чтобы мой проект был автономным, мне нужно, чтобы сервисы Hive были встроены, включая кластеры HDFS и MapReduce. Я попытался запустить сервер Hive, используя тот же метод Spring и указав его на MiniDFSCluster и MiniMRCluster, аналогично шаблону, используемому в Hive QTestUtil source и в HBaseTestUtility. Однако я не смог заставить это работать.
После трех дней попыток прервать тестирование интеграции Hive, я подумал, что попрошу сообщество:
- Как вы рекомендуете я интеграционные тесты Рабочие места в улье?
- Есть ли у вас рабочий пример JUnit для тестирования интеграции? Задачи улья с использованием экземпляров HDFS, MR и Hive в памяти?
Дополнительные ресурсы, на которые я смотрел:
Изменить: Я полностью отдаю себе отчет в том, что работа с кластером Hadoop - будь то локальная или удаленная - позволяет запускать тесты интеграции с экземпляром Hive с полным стеком. Проблема, как заявлено, заключается в том, что это не является жизнеспособным решением для эффективного тестирования рабочих процессов Hive.