2009-08-02 3 views
11

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

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

ответ

10

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

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

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

2

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

+0

Я не очень хорошо знаком с этим полем, но на первый взгляд также понравился ActiveInsight (лицензия CPAL - требуется атрибуция). –

0

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

Если это так, см. Why fetching web pages doesn't map well to map-reduce. И вы можете проверить класс FetcherBuffer в Bixo, который реализует поточный подход в редукторе (через Cascading) для решения этой проблемы.

6

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

Update

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

+1

Я думаю, что это правильный URL-адрес для S4: http://incubator.apache.org/s4/ – Bklyn

1

Yahoo S

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

0

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

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

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

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

1

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

0

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

Взгляните на эту статью InfoQ, в которой подробно описывается обработка потока и все эти структуры и продукты: Real Time Stream Processing/Streaming Analytics in Combination with Hadoop. Кроме того, в статье также объясняется, как это дополняет Hadoop.

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

+0

Просто добавьте дополнительную информацию: см. Мое сообщение в блоге для подробного сравнения [когда использовать поточную обработку framweork vs. продукт] [1]. Таким образом, вы можете использовать эти инструменты для обработки данных во время движения **. Тем не менее, вы можете (или должны) хранить их где-нибудь. Поэтому эти структуры и продукты также могут быть объединены с Apache Hadoop (только для хранения или для обработки, запустив одну из фреймворков на Hadoop). Слайды также обсуждают это более подробно. [1]: http://www.kai-waehner.de/blog/2015/10/25/comparison-of-stream-processing-frameworks-and-products/ –

0

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

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

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