Storm. Система распределенной обработки данных в реальном времени.
LVEE Winter 2013
Распределенные вычисления – сегодняшняя объективная реальность. Технические и бизнес-задачи требоуют все больших вычислительных ресурсов. Как минимум последнее десятилетие большое распространение получили одноранговые гетерогенные системы на базе относительно простых вычислительных систем. Это всевозможные кластеры, облака и т.п.
Лидером прикладных систем распределенных вычислений, машинного обучения, статистического анализа, сбора данных и т.п. считается 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
Назад