Запрос данных из хар-архивов - Apache Hive
Я использую Hadoop и сталкиваюсь со страшной проблемой большого количества маленьких файлов. Мне нужно иметь возможность создавать архивы архивов из существующих разделов улья и одновременно запрашивать их. Однако Hive, очевидно, поддерживает архивирование разделов только в управляемых таблицах, а не во внешних таблицах, что довольно печально. Я пытаюсь найти обходной путь для этого, вручную архивируя файлы в каталоге раздела, используя инструмент архивации hadoop. Теперь мне нужно настроить куст, чтобы иметь возможность запрашивать данные, хранящиеся в этих архивах, а также неархивированные данные, хранящиеся в других каталогах разделов. Обратите внимание, что у нас используются только внешние таблицы.
Пространство имен для доступа к файлам в созданном partition-har соответствует пути hdfs раздела dir. Например, например, файл в формате hdfs:
hdfs:///user/user1/data/db1/tab1/ds=2016_01_01/f1.txt
после архивирования можно получить доступ как:
har:///user/user1/data/db1/tab1/ds=2016_01_01.har/f1.txt
Возможно ли для улья запросить архивы архивов из внешней таблицы? Пожалуйста, предложите способ, если да.
С уважением
1 ответ
На практике грань между "управляемыми" и "внешними" таблицами очень тонкая.
Мое предложение:
- создать "управляемую" таблицу
- добавьте явно разделы на несколько дней в будущем, но со специальными расположениями - то есть каталогами, которые ожидает использовать ваш внешний процесс
- пусть внешний процесс создает дамп своего файла непосредственно на уровне HDFS - они автоматически отображаются в запросах Hive, "управляемые" или нет
(Metastore не отслеживает отдельные файлы и блоки, они обнаруживаются при каждом запросе; в качестве примечания вы можете запускать операции резервного копирования и восстановления на уровне HDFS, если хотите, если вы не вмешиваетесь в структуру каталогов) - когда раздел "холодный" и вы уверены, что в него никогда не будет выгружен другой файл, вы можете запустить команду Hive для архивирования раздела, т.е. переместить небольшие файлы в одном HAR +, пометить раздел как "заархивированный" в Metastore
Бонус: легко разархивировать ваш раздел в Hive (тогда как hadoop unarchive
команда AFAIK).
Предостережение: это "управляемая" таблица, поэтому не забывайте ничего НЕ УДАЛЯТЬ, если только вы не благополучно удалили свои данные из каталогов, управляемых Hive.