18 мая 2014

Real-time для Big Data

Real-time для Big Data. Обзор фреймворков

Ценность данных падает во времени. В некоторых системах ценность данных во времени падает драматически. К кейсам с такими характеристиками традиционно относят:

  • Системы мониторинга и анализа (в том числе веб-аналитики);
  • Задачи обнаружение подозрительных/мошеннических действий (fraud detection);
  • Задачи предсказанию пользовательской активности/пользовательских предпочтений в ecommerce, рекламных сетях, online-играх;
  • Задачи оптимизации работы отдельных устройств и/или сетей, объединяющих эти устройства;
  • Высокочастотных трейдинг на финансовых рынках.

Для всех этих задач latency является одним из ключевых требований к работе разрабатываемого ПО.

В этой статье обсудим фреймворки/платформы, предоставляющие разработчикам инструменты работы с Большими Данными в real-time- или near-real-time-режиме.

Потоковая обработка данных

Twitter Storm – фреймворк распределенной обработки потоковых данных в режиме реального времени. Одной из центральных идей фреймворка – введение цепи преобразований потока. Цепь преобразования может содержать в себе следующие элементы:

  • Tuple – элемент представления данных,
  • Stream – «поток», абстракция передачи данных, последовательность из Tuple,
  • Spout – «воронка», поставщик данных,
  • Bolt – «сито», обработчик данных,
  • Topology – совокупность элементов с описанием их взаимосвязи.

S4 – распределенная система общего назначения для обработки потоковых, потенциально бесконечных данных. Базируется на концепции Processing Elements (PE) – вычислительных юнитов, принимающих на вход события и на выходе либо порождающих новые события, либо публикующих результат.

Samza – фреймворк распределенной потоковой обработки данных. Использует Apache Kafka для обмена сообщениями и Apache Hadoop YARN для управления ресурсами, обеспечения отказоустойчивости и изоляции процессов.

StreamInsight – CEP-платформа работы с потоковыми данными от Microsoft. Как у S4 и Storm, у StreamInsight одной из центральной концепцией системы является цепочка преобразования потока данных. Цепь в StreamInsight содержит Input Adapters (принимают входные данные), Standing Queues (обрабатывают данные и передают другому Queues или на выход), Output Adapters (возвращают результат получателям).

Google Photon – масштабируемая, отказоустойчивая и географически распределенная система обработки потоковых данных в режиме реального времени. Система является проприетарным продуктом Google и используется в Google Advertising System.

Amazon Kinesis – сервис обработки потоковых данных в режиме реального времени на облачной платформе AWS.

Другие

Naiad – open-source платформа исполнения распределенных параллельных по данным приложений от Microsoft Research. Naiad представляет собой совокупность языкового расширения (на основе LINQ) и среду исполнения. Naiad предоставляет высокую пропускную способность при обработке данных в пакетном режиме, низкую задержку при обработке потоковых данных, возможность выполнять итеративные и инкрементальные вычисления. Одной из центральных концепций Naiad является вычислительная модель Timely Dataflow.

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

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

Колоночные БД

Google Dremel – масштабируемая система обработки запросов в режиме близком к режиму реального времени (near-real-time), предназначенная для анализа связанных read-only данных.

Центральная концепция – модель данных «nested columnar storage», по которой данные, чья схема явно определена, хранятся в хранилище, ориентированном на столбцы (column-striped storage), вместе со связанными с ними данными.

Google BigQuery – сервис облачной платформы Google Cloud Platform. «Под капотом» сервиса Google BigQuery лежит Dremel.

Apache Drill – open-source фреймворк, основанный на research paper, в котором инженеры Google описали основные концепции и архитектуру, заложенную в Google Dremel. Как и в Dremel, в Apache Drill концепция связанных данных является центральной.

И последняя платформа из этой категории: ParStream - коммерческим продукт, представляющий собой колоночную БД, в которой связанные данные хранятся вместе.

Пакетная обработка данных. In-memory mode

Apache Spark - аналитическая платформа, поддерживающая наборы данных в оперативной памяти и отказоустойчивость. Центральным объектом в Spark является RDD (Resilient Distributed Data sets) – read-only набор данных в оперативной памяти вычислительного узла.

SAP Hana – аппаратно-программный комплекс от SAP, основной идей которого является перенос слоя хранения с жестких дисков в оперативную память.

Пакетная обработка данных. Оптимизации

Cloudera Impala, Hortonworks Stringer, Facebook Presto – все эти системы занимаются пакетной обработкой данных. Прирост скорости (порой значительный) достигается за счет различного типа оптимизаций: введения планировщика запроса, оптимизатора запроса, in-memory кэша и других приемов, знакомых нам из мира РСУБД.

Заключение

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

Платформы потоковой обработки данных, как и интерес к ним, субъективно находится на том этапе, на котором Hadoop находился в 2010-2011 годах – этап бурного роста (как инновационной составляющей, так и роста интереса со стороны community). В open source мире среди таких платформ я бы выделил Storm, как наиболее зрелый продукт.

Платформы пакетной обработки больших объемов данных – уже не в новь в ИТ. В последние 2 года разработчики таких фреймворков уделяют серьезное внимание уменьшению latency выполнения пакетных задач. Для того чтобы работать с субсекундной задержкой, разработчики пошли на «хитрости» и «оптимизации». Основные оптимизации платформ пакетной обработки данных связаны со слоем хранения и оптимизацией доступа к нему: перемещение данных в RAM, хранение связанных данных вместе, сжатие данных.

Автор статьи

,
Machine Learning Preacher, Microsoft AI MVP && Coffee Addicted