2016-01-25 3 views
13

Вот шаги к текущему процессу:Как эффективно перемещать данные от Kafka до таблицы Impala?

  1. Flafka записывает журналы в «зоне посадки» на HDFS.
  2. Задание, запланированное Oozie, копирует полные файлы из зоны приземления в промежуточную зону.
  3. Данные этапа являются «схемами» таблицы Hive, которая использует промежуточную область в качестве ее местоположения.
  4. Записи из промежуточного стола добавляются в постоянную таблицу улей (например, insert into permanent_table select * from staging_table).
  5. Данные из таблицы «Улов» доступны в Импале, выполнив refresh permanent_table в Импале.

existing data flow

Я смотрю на этот процесс я построил и «пахнет» плохо: слишком много промежуточных шагов, которые нарушают поток данных.

Около 20 месяцев назад я увидел демоверсию, в которой данные транслировались из трубки Amazon Kinesis, и был доступен в непосредственной близости от Импалы в реальном времени. Я не думаю, что они сделали что-то довольно уродливое/запутанное. Есть ли более эффективный способ передачи данных от Kafka в Impala (возможно, потребитель Kafka, который может сериализоваться в Parquet)?

Я предполагаю, что «потоковая передача данных с низкой задержкой SQL» должна быть довольно распространенным вариантом использования, и поэтому мне интересно узнать, как другие люди решили эту проблему.

+0

[Здесь] (http://www.svds.com/flexible-data-architecture-with-spark-cassandra- and-impala /) - это альтернативная архитектура, которая, кажется, имеет меньше перелетов и может быть относительно быстрее – vmachan

+0

Помогает ли это? https://blog.cloudera.com/blog/2015/11/how-to-ingest-and-query-fast-data-with-impala-without-kudu/ –

ответ

0

Если вам нужно сбросить данные Kafka как есть в HDFS, лучшим вариантом будет использование разъема Kafka Connect и Confluent HDFS.

Вы можете либо сбросить данные в файл парковки на HDFS, который вы можете загрузить в Импале. Вам понадобится, я думаю, вы захотите использовать секвенсор TimeBasedPartitioner для создания паркетных файлов каждые X миллисекунд (настройка параметра конфигурации partition.duration.ms).

Addign что-то подобное в вашей конфигурации Кафка Connect может сделать трюк:

# Don't flush less than 1000 messages to HDFS 
flush.size = 1000 

# Dump to parquet files 

format.class=io.confluent.connect.hdfs.parquet.ParquetFormat 

partitioner.class = TimebasedPartitioner 

# One file every hour. If you change this, remember to change the filename format to reflect this change 
partition.duration.ms = 3600000 
# Filename format 
path.format='year'=YYYY/'month'=MM/'day'=dd/'hour'=HH/'minute'=mm 

 Смежные вопросы

  • Нет связанных вопросов^_^