Вот шаги к текущему процессу:
- Flafka записывает журналы в "зону приземления" на HDFS.
- Задание, запланированное Oozie, копирует полные файлы из зоны приземления в промежуточную область.
- Данные промежуточного этапа являются "schema-ified" таблицей Hive, которая использует промежуточную область в качестве своего местоположения.
- Записи из промежуточной таблицы добавляются в постоянную таблицу Hive (например,
insert into permanent_table select * from staging_table
). - Данные из таблицы Hive доступны в Impala, выполнив
refresh permanent_table
в Impala.
Я смотрю на процесс, который я создал, и он "плохо пахнет": слишком много промежуточных шагов, которые ухудшают поток данных.
Около 20 месяцев назад я увидел демоверсию, в которой данные транслировались из трубки Amazon Kinesis, и была доступна в Impala в почти реальном времени. Я не думаю, что они сделали что-то довольно уродливое/запутанное. Есть ли более эффективный способ передачи данных от Kafka в Impala (возможно, потребитель Kafka, который может сериализоваться в Parquet)?
Я предполагаю, что "потоковая передача данных в SQL с низкой задержкой" должна быть довольно распространенным вариантом использования, и поэтому мне интересно узнать, как другие люди решили эту проблему.