Hadoop, Mahout альтернатива обработки в реальном времени - PullRequest
18 голосов
/ 01 октября 2011

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

Какие библиотеки / технологии я могу использовать для этих целей?

Ответы [ 4 ]

10 голосов
/ 01 октября 2011

Вы правы, Hadoop предназначен для пакетной обработки.

Читая вопрос, я подумал о фреймворке Storm, недавно открытом в Twitter, который можно рассматривать как "Hadoop для обработки в реальном времени".

Storm позволяет легко писать и масштабировать сложные вычисления в реальном времени на кластере компьютеров, делая для обработки в реальном времени то же, что Hadoop делал для пакетной обработки. Storm гарантирует, что каждое сообщение будет обработано. И это быстро - вы можете обрабатывать миллионы сообщений в секунду с помощью небольшого кластера. Лучше всего, вы можете писать топологии Storm, используя любой язык программирования.

(от: Сообщение InfoQ )

Тем не менее, я еще не работал с этим, так что я действительно не могу много сказать об этом на практике.

Твиттер Инженерный блог: http://engineering.twitter.com/2011/08/storm-is-coming-more-details-and-plans.html
Github: https://github.com/nathanmarz/storm

4 голосов
/ 02 октября 2011

Учитывая тот факт, что вы хотите получить ответ в режиме реального времени в области «секунд», я рекомендую что-то вроде этого:

  1. Установите пакетную модель обработки для максимально возможного предварительного вычисления. По сути стараюсь делать все, что не зависит от «последней секунды» данных. Здесь вы можете использовать обычную настройку Hadoop / Mahout и запускать эти партии ежедневно или (при необходимости) каждый час или даже 15 минут.

  2. Используйте систему в реальном времени, чтобы выполнить несколько последних операций, которые невозможно вычислить заранее. Для этого вам следует использовать либо упомянутый s4, либо недавно анонсированный twitter storm .

Иногда бывает очень просто пойти и сохранить предварительно вычисленные значения в памяти и просто выполнить последние шаги агрегации / фильтрации / сортировки / ... в памяти. Если вы можете сделать это, вы действительно можете масштабировать, потому что каждый узел может работать полностью независимо от всех других.

Возможно, полезно использовать NoSQL-бэкенд для компонента реального времени. Есть много доступных: mongodb, redis, riak, cassandra, hbase, couchdb, ...

Все зависит от вашего реального приложения.

2 голосов
/ 01 октября 2011

Также попробуйте S4 , первоначально выпущенный Yahoo! и теперь это проект Apache Incubator. Это было давно, и я нашел, что это хорошо для некоторых базовых вещей, когда я сделал доказательство концепции. Хотя он не использовался широко.

0 голосов
/ 03 октября 2011

То, что вы пытаетесь сделать, будет более подходящим для HPCC, так как оно имеет как внутренний процессор обработки данных (эквивалент Hadoop), так и внешний процессор доставки данных в реальном времени, что устраняет необходимость увеличения сложность через сторонние компоненты. И хорошая вещь HPCC в том, что оба компонента программируются с использованием одного и того же языка и парадигм программирования. Проверьте их по адресу: http://hpccsystems.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...