Как управлять небольшими файлами, созданными в результате вставки потоковых данных в Hive? - PullRequest
0 голосов
/ 03 июля 2018

Я читаю сообщения Кафки, используя простой потребитель Кафки.
Сохранение вывода в HDFS и некоторая фильтрация.

После фильтрации я записываю эти данные в Hive, что приводит к появлению небольших файлов орков в улье.

Может ли кто-нибудь посоветовать мне, как справиться с таким сценарием?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

После этого вы можете уменьшить количество существующих файлов ORC, запустив

ALTER TABLE tablename CONCATENATE;
or ALTER TABLE tablename PARTITION (field=value) CONCATENATE;

Чтобы не допустить, чтобы HIVE генерировал слишком много файлов ORC, попробуйте набрать

set hive.merge.mapredfiles=true;
0 голосов
/ 03 июля 2018

Существуют такие инструменты, как Camus и Apache Gobblin, в которых есть сценарии для непрерывного извлечения данных Kafka, а также процессы «очистки / сжатия», которые могут запускаться планировщиками, такими как Oozie, для создания больших временных разделов

Вы также можете взглянуть на Kafka Connect Framework с плагином HDFS от Confluent (вам не нужно запускать установку Confluent's Kafka для его использования). Он поддерживает пакетирование и большие файлы (с него я получил до 4 ГБ файлов на раздел Kafka), и он автоматически создаст для вас разделы Hive

Или Apache Nifi может использоваться между вашими потоками и хранилищем для сжатия данных перед посадкой на Hadoop

Единственная другая альтернатива, о которой я знаю, это инструменты на основе mapreduce на Github (filecrush - один) или написание собственного скрипта Hive / Pig / Spark, который читает местоположение, очень мало преобразует его (например, вычисляет раздел даты), затем записывает это где-то еще. Это приведет к тому, что меньшие блоки будут объединены в несколько, и в каждой инфраструктуре есть настройки hadoop для контроля того, сколько данных должно выводиться на файл

...