Каков наиболее эффективный способ записи из кафки в hdfs с разбиением файлов на даты

Я работаю над проектом, который должен писать через kafka в hdfs. Предположим, есть онлайн-сервер, который записывает сообщения в кафку. Каждое сообщение содержит метку времени. Я хочу создать задание, которое будет выводить файл / файлы в соответствии с отметкой времени в сообщениях. Например, если данные в кафке

 {"ts":"01-07-2013 15:25:35.994", "data": ...}
 ...    
 {"ts":"01-07-2013 16:25:35.994", "data": ...}
 ... 
 {"ts":"01-07-2013 17:25:35.994", "data": ...}

Я хотел бы получить 3 файла в качестве вывода

  kafka_file_2013-07-01_15.json
  kafka_file_2013-07-01_16.json
  kafka_file_2013-07-01_17.json 

И, конечно, если я снова выполняю это задание, и в очереди есть новые сообщения, например

 {"ts":"01-07-2013 17:25:35.994", "data": ...}

Он должен создать файл

  kafka_file_2013-07-01_17_2.json // second  chunk of hour 17

Я видел несколько открытых источников, но большинство из них читает из kafka в какую-то папку hdfs. Какое лучшее решение / дизайн / открытый исходный код для этой проблемы


person Julias    schedule 02.07.2013    source источник


Ответы (5)


Вам обязательно стоит проверить Camus API реализацию от connectedIn. Камю - это конвейер LinkedIn Kafka- ›HDFS. Это задание mapreduce, которое выполняет распределенную загрузку данных из Kafka. Посмотрите этот пост у меня написан для простого примера, который извлекается из потока твиттера и записывается в HDFS на основе временных меток твита.

Проект доступен на github по адресу - https://github.com/linkedin/camus.

Камю нужны два основных компонента для чтения и декодирования данных из Kafka и записи данных в HDFS:

Расшифровка сообщений, прочитанных из Кафки

У Камю есть набор декодеров, которые помогают в декодировании сообщений, поступающих от Kafka. Декодеры в основном расширяют com.linkedin.camus.coders.MessageDecoder, который реализует логику для разделения данных на основе метки времени. В этом каталоге присутствует набор предопределенных декодеров, и вы можете написать свои собственные на их основе. camus/camus-kafka-coders/src/main/java/com/linkedin/camus/etl/kafka/coders/

Запись сообщений в HDFS

Камю нужен набор классов RecordWriterProvider, которые расширяют com.linkedin.camus.etl.RecordWriterProvider, которые сообщают Камю, какие полезные данные должны быть записаны в HDFS. В этом каталоге присутствует набор предопределенных RecordWriterProvider, и вы можете написать свой собственный на их основе.

camus-etl-kafka/src/main/java/com/linkedin/camus/etl/kafka/common
person saurzcode    schedule 19.02.2015
comment
Камю ушел на пенсию через linkedin с gobblin. для получения подробной информации. - person Vezir; 08.05.2016
comment
Документы гоблинов: gobblin.readthedocs.io/en/latest Источник гоблинов: github.com/linkedin/gobblin - person Night Owl; 02.02.2017
comment
Вот пример с Гобблином. cwiki.apache.org/confluence/display/GOBBLIN/ - person tolgabuyuktanir; 11.06.2018

Если вы ищете подход, работающий в режиме реального времени, вам следует попробовать StreamSets Data Collector. Это также лицензированный Apache инструмент с открытым исходным кодом для приема.

Назначение HDFS можно настроить для записи в каталоги на основе времени на основе указанного вами шаблона. И он уже включает способ указать поле во входящих сообщениях, которое будет использоваться для определения времени, когда сообщение должно быть написано. Конфигурация называется «Time Basis», и вы можете указать что-то вроде ${record:value("/ts")}.

* полное раскрытие информации Я инженер, работающий над этим инструментом.

person ramblingpolak    schedule 11.11.2015

если вы используете Apache Kafka 0.9 или выше, вы можете использовать Kafka Connect API.

посетите https://github.com/confluentinc/kafka-connect-hdfs

Это коннектор Kafka для копирования данных между Kafka и HDFS.

person swamoch    schedule 09.02.2017
comment
Ссылки на внешние ресурсы приветствуются, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы другие пользователи имели некоторое представление о том, что это такое и почему. Всегда указывайте наиболее релевантную часть важной ссылки на случай, если целевой сайт недоступен или постоянно отключен от сети. - person Bugs; 09.02.2017
comment
Этот модуль записи подключений HDFS еще не поддерживает запись файлов json. - person Martin Andersson; 10.11.2017

Проверьте это для непрерывной передачи данных из Kafka в HDFS. Поскольку он зависит от Apache Apex, он имеет гарантии, предоставляемые Apex.

https://www.datatorrent.com/apphub/kafka-to-hdfs-sync/

person ashwin111    schedule 15.11.2016

Оформить заказ Камю: https://github.com/linkedin/camus

Это будет записывать данные в формате Avro, хотя ... другие RecordWriters подключаются.

person ggupta1612    schedule 10.07.2013