2015-04-10 2 views
1

Для простого подсчета слов программы в storm-starter, логика довольно прямо вперед:
1) разделить предложение на слова
2) испускают каждое слово
3) совокупный счетчик (хранить счетчик в карте)Количество слов с помощью шторма или Trident

Однако есть две проблемы:
1) программа использует 12 отдельных потоков для выполнения агрегирования части, что означает, что количество не GLOBAL, мы должны добавить еще один слой получить глобальный счет?
2) в болте карты используются для хранения счета, что означает, что он имеет состояние, а что, если текущий рабочий не работает, все счета, хранящиеся в болте, исчезли? поскольку шторм является апатридом
3) следует ли использовать Trident для этого?

ответ

1

Каждый болт содержит 1/12 слов для глобального состояния. Группировка полей посылает конкретные слова на один и тот же болт каждый раз, чтобы подсчеты были точными во всем мире.

https://storm.apache.org/documentation/Concepts.html

Поля группировки: Поток разбивается на полях, указанных в группировки. Например, если поток сгруппирован по полю «user-id» , кортежи с тем же «идентификатором пользователя» всегда будут обращаться к одной и той же задаче , но кортежи с разными «идентификаторами пользователя» могут перейти к разные задачи.

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

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

+0

Привет, Джошуа, спасибо за ответ. Я понимаю первый вопрос, что одно и то же слово перейдет в тот же раздел, чтобы достичь глобального подсчета. Во втором вопросе ** «Если карта поддержки в примере была HBase, она была бы устойчивой к сбоям при сбоях, но вы либо потеряли бы данные при перезапуске болта (лучшая обработка усилий), либо над счетными словами, если фраза предложений был воспроизведен (по крайней мере, один раз для обработки) ». ** Вы имеете в виду, что у нас все еще есть потеря данных/превышение количества, даже использование Trident и резервное копирование с помощью HBase? –

+0

Я выяснил, что это зависит от того, какую карту вы используете: транзакционную, не транзакционную и непрозрачную, в основном компромисс между недостатками отказоустойчивости и расходами на хранение. –

+0

Я говорил о регулярном буре в этом случае относительно того, как под/overcounting могло случиться. Непрозрачные и транзакционные состояния Trident обеспечивают ровно один раз подсчет с помощью HBase (или другого постоянного хранилища). То, что вы должны использовать, зависит от того, может ли ваш носик воспроизвести точно такой же набор сообщений, как и раньше, когда происходит сбой. –