Потоковые данные и Hadoop? (не Hadoop Streaming)
Вопрос
Я хотел бы проанализировать непрерывный поток данных (доступ через 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. Это должно хорошо работать для ваших целей.