Запрос данных из хар-архивов - 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.

Другие вопросы по тегам