Подтвердить что ты не робот

Hadoop, Mahout в режиме реального времени

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Twitter Сообщение в блоге: http://engineering.twitter.com/2011/08/storm-is-coming-more-details-and-plans.html
Github: https://github.com/nathanmarz/storm

Ответ 2

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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