Вопрос

Я хотел бы проанализировать непрерывный поток данных (доступ через HTTP), используя подход MapReduce, поэтому я изучил Apache Hadoop. К сожалению, похоже, что Hadoop ожидает начать работу с входного файла фиксированного размера, а не передавать новые данные потребителям по мере их поступления. Это на самом деле так, или я что-то упустил? Существует ли другой инструмент MapReduce, который работает с данными, считываемыми из открытого сокета? Масштабируемость является проблемой здесь, поэтому я бы предпочел, чтобы MapReducer обрабатывал беспорядочную параллелизацию.

Я поигрался с Каскадированием и смог выполнить задание на статический файл доступен через HTTP, но это не решает мою проблему. Я мог бы использовать curl в качестве промежуточного шага для выгрузки данных где-нибудь в файловой системе Hadoop и написать сторожевой таймер для запуска нового задания каждый раз, когда новый кусок данных готов, но это грязный хак; должен быть более элегантный способ сделать это. Есть идеи?

Это было полезно?

Решение

Взлом, который вы описываете, является более или менее стандартным способом выполнения действий - Hadoop по сути является системой, ориентированной на пакетную обработку (с одной стороны, если нет конца данным, редукторы не могут запуститься, поскольку они должен начаться после завершения фазы карты).

Вращайте свои журналы; по мере их поворота сбрасывайте их в HDFS. Имейте сторожевой процесс (возможно, распределенный, координируемый с помощью ZooKeeper), отслеживайте места сброса и запускайте новые задания обработки. Вы должны убедиться, что задания выполняются на входах, достаточно больших, чтобы оправдать накладные расходы.

Hbase - это клон BigTable в экосистеме hadoop, который может быть вам интересен, поскольку он обеспечивает непрерывный поток вставок; однако вам все равно придется выполнять аналитические запросы в пакетном режиме.

Другие советы

А как насчет http://s4.io/ . Это сделано для обработки потоковых данных.

Update

Выход нового продукта: Storm - распределенные и отказоустойчивые вычисления в реальном времени: потоковая обработка, непрерывная вычисления, распределенный RPC и многое другое

Я думаю, вам стоит взглянуть на Esper CEP ( http://esper.codehaus.org/).

Yahoo S4 http://s4.io/

Он обеспечивает потоковые вычисления в режиме реального времени, например, уменьшение карты

Storm в Твиттере - это то, что вам нужно, вы можете попробовать!

Несколько вариантов здесь. Я предлагаю комбинацию Kafka и Storm + (Hadoop или NoSql) в качестве решения. Мы уже строим нашу платформу больших данных, используя эти инструменты с открытым исходным кодом, и она работает очень хорошо.

Ваш сценарий использования похож на проблему написания веб-сканера с использованием Hadoop - потоки данных возвращаются (медленно) из открытых сокетов для извлечения удаленных страниц через HTTP.

Если это так, см. Почему выборка веб-страниц плохо сопоставляется с сокращением карты . И вы можете проверить Класс FetcherBuffer в Bixo, который реализует многопоточный подход в редукторе (посредством каскадирования) для решения этого типа проблемы.

Как вы знаете, основные проблемы с Hadoop для использования в потоковом майнинге заключаются в том, что сначала он использует HFDS, то есть диск, а операции с диском приводят к задержке, что приводит к потере данных в потоке. во-вторых, это то, что трубопровод не параллелен. Map-Reduce обычно работает с пакетами данных, а не с экземплярами, как с потоковыми данными.

Недавно я прочитал статью о M3, которая касается первой проблемы, по-видимому, в обход HDFS и выполнения вычислений в памяти в базе данных объектов. И для второй проблемы, они используют дополнительных учеников, которые больше не выполняются в пакетном режиме. Стоит посмотреть M3 : Обработка потока на Карта памяти основной памяти . Я нигде не мог найти исходный код или API этого M3, если кто-то нашел его, поделитесь ссылкой здесь.

Кроме того, Hadoop Online - это еще один прототип, который пытается решить те же проблемы, что и M3: Hadoop Online

Однако Apache Storm является ключевым решением проблемы, однако этого недостаточно. Вам нужен некоторый эквивалент карты-справа, вот почему вам нужна библиотека под названием SAMOA , которая на самом деле имеет отличные алгоритмы для онлайн-обучения, которого не хватает.

На рынке доступно несколько зрелых платформ и продуктов для потоковой обработки. Фреймворки с открытым исходным кодом, например, Apache Storm или Apache Spark (которые могут работать поверх Hadoop). Вы также можете использовать такие продукты, как IBM InfoSphere Streams или TIBCO StreamBase.

Ознакомьтесь с этой статьей InfoQ, в которой подробно объясняется обработка потоков и все эти платформы и продукты: Обработка потока в реальном времени / Потоковая аналитика в сочетании с Hadoop . Кроме того, в статье также объясняется, как это дополняет Hadoop.

Кстати, многие поставщики программного обеспечения, такие как Oracle или TIBCO, называют этот подход к потоковой обработке / потоковой аналитике «быстрыми данными». вместо «больших данных» как вы должны действовать в режиме реального времени вместо пакетной обработки.

Вы должны попробовать Apache Spark Streaming. Это должно хорошо работать для ваших целей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top