Международная конференция разработчиков
и пользователей свободного программного обеспечения

Storm. Система распределенной обработки данных в реальном времени.

Andrei Piatrushenia, Minsk, Belarus

LVEE Winter 2013

Storm is a free and open source distributed realtime computation system. Storm makes it easy to reliably process unbounded streams of data, doing for realtime processing. The report covers the most sufficient details of the Storm project, such as realtime stream processing, horizontal scalability, processing guarantee and fault-tolerance, installation, application deployment and some typical how-to's. Programming examples use Java.

Распределенные вычисления – сегодняшняя объективная реальность. Технические и бизнес-задачи требоуют все больших вычислительных ресурсов. Как минимум последнее десятилетие большое распространение получили одноранговые гетерогенные системы на базе относительно простых вычислительных систем. Это всевозможные кластеры, облака и т.п.

Лидером прикладных систем распределенных вычислений, машинного обучения, статистического анализа, сбора данных и т.п. считается Apache Hadoop, впитавший в себя идеи BigData. Система успешно переросла детский возраст, имеет огромную сферу практического применения, накоплен опыт использования, реализации типовых задач.

Storm появился в рамках проекта BackType (приобретенного Twitter летом 2011), где был призван решить задачу, для которой Hadoop не подходил по главному критерию – сбор данных и их обработка должны были производиться в реальном времени, тогда как Hadoop предполагает их пакетную обработку. Конечно, такая задача могла быть решена и с помощью пакетной обработки, вызываемой по накоплении набора данных или через временные интервалы, но запросам главного инвестора такие «костыли» не отвечали.

В результате появился Storm, в основе которого лежит поточная обработка данных.
В основе обработки данных лежат узлы распределенной сети (здесь и далее в контексте Storm – топологии) двух типов:
• Источники данных (Spout)
• Обработчики данных (Bolt)

Первые – являются источниками данных. Они могут принимать их извне или генерировать. С точки зрения топологии источники данных входных данных не имеют.

Вторые служат для обработки, преобразования данных, сохранения, вывода и т.п.

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

Сам Storm отвечает за организацию вычислительных узлов, передачу данных между ними, контроль доставки, уведомлений об обработке данных или отказе в ней, делая большую часть такой работы абсолютно прозрачной для программиста, реализующего каждый отдельный узел как «черный ящик» для остальных, декларируя при необходимости входные и выходные данные.

Построение вычислительного кластера Storm относительно простая задача, для каждого вычислительного узла необходимый минимум составляет:
JRE, storm реализован на closure и исполняется на виртуальной машине Java
• Apache Zookeeper , для глобальной синхронизации между узлами
• ZeroMQ – для синхронизации между процессами
• Python – кусочек storm реализован на Python
• Несколько минут на узел, если выполнять все действия вручную

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

Основной сложностью для начинающего знакомиться со Storm является довольно минималистическая документация, скромное описание API (по сути – лишь декларирование), почти полное отсутствие off-line источников, первая книга по Storm покинула стены издательства осенью минувшего года.

Целью предстоящего доклада является раскрытие основных идей проекта Storm, демонстрация основ организации топологий и вычислительных узлов на простых примерах, акцентирования принципиальных отличий Storm от других систем распределенной обработки данных.

Список литературы:
1. Сайт проекта http://storm-project.net/
2. Wiki https://github.com/nathanmarz/storm/wiki

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Назад