13 ноября 2014

Big Data в Microsoft Azure. Анонсы

Big Data в Microsoft Azure. Анонсы

Microsoft love Big Data

Около полугода назад я публиковал ретроспективу того, что интересного для исследователей происходит в облаке Microsoft Azure.

Продолжу эту тему, немного сместив акцент в области, которые для меня последние пару лет неизменно остаются наиболее интересными в ИТ: Big Data, машинное обучение и их симбиозом с облачными технологиями.

Ниже обсудим преимущественно октябрьские анонсы сервисов Microsoft Azure, предоставляющих возможность пакетной и real-time обработки больших массивов данных, высокопроизводительный кластер по требованию, широкую поддержку алгоритмов машинного обучения.

Real time

Apache Storm в HDInsight

На конференции Strata + Hadoop World, проходившей в октябре этого (2014) года, анонсирована поддержка Apache Storm в HDInsight (PaaS-сервис, предоставляющий Hadoop по требованию).

Apache Storm – это высокопроизводительный, масштабируемый, отказоустойчивый фреймворк распределенного выполнения приложений как в режиме близком к реальному времени, так и в пакетном режиме.

В качестве источников данных в HDInsight Storm могут служить облачные сервисы ServiceBus Queues или Event Hubs.

На конференции TechEd Europe 2014, проходившей в конце октября, было объявлено о доступности в Azure Cloudera Enterprise и Hortonworks Data Platform в виде предконфигурированных Azure VM (IaaS-услуга).

Azure Event Hubs

В коммерческую эксплуатацию запущен Event Hubs – высокомасштабируемый сервис, способный обрабатывать миллионы запросов в секунду в near real-time режиме.

Основные фичи сервиса (кроме тех, что уже перечислил в определении):

  • объем входящих запросов: >1 Гб в секунду;
  • количество event producers: >1 миллиона;
  • поддержка протоколов HTTP(S), AMQP;
  • эластическое масштабирование вверх/вниз без простоев;
  • time-based буферизация событий с поддержкой упорядоченности;
  • лимиты в зависимости от плана.

Azure Stream Analytics

Stream Analytics – event-processing движок (engine), позволяющий обрабатывать большое количество событий в режиме реального времени. Как и положено приличному облачному сервису Stream Analytics справляется с нагрузкой более 1M запросов в секунду, эластично масштабируется, поддерживает несколько источников данных – Azure Blob Storage и Event Hubs. Правила трансформации в Stream Analytics пишутся на SQL-подобном языке (сколько можно! - еще один SQL-like query language).

Для работы с сервисом необходимо сделать действия аналогичные тому, что делалось в Azure Data Factory (о нем чуть позже) – создать собственно саму службу, определить через web-интерфейс источники входных данных и выходные потоки, написать query запрос для трансформации данных.

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

SELECT DateAdd(second,-1,System.TimeStamp) as OpenTime,
system.TimeStamp as CloseTime,
Security,
Max(Price) as High,
Min(Price) as Low,
Count(Volume) as TotalVolume
FROM trades
GROUP BY TumblingWindow(second, 1), Security

Концепцией и запросом Stream Analytics мне напомним продукт Stream Insight. Документации по сервису не много, но «Get started…» уже написан.

HPC

Azure Batch

Azure Batch – сервис, предоставляющий кластер по требованию. Сервис позволяет написать высокомасштабируемое приложение, использующие высокопроизводительные узлы для запуска множества одинаковых задач.

Кейсы применения сервиса для Azure Batch традиционны для мира Big Data – задачи могут работать с большим количеством данных (бо'льшим, чем может влезть в RAM одного узла). Области применения: генная инженерия, банковский сектор, финансовые биржи, ритейл, телеком, здравоохранение, правительственные учреждения и коммерческие веб-сервисы, аккумулирующие в своей работе большие массивы данных.

Кроме того, Azure Batch подойдет для задач, требующих больши'х процессорных мощностей (на CPUs одного узла вычисления заняли бы бо'льшее количество времени). К таким задача относятся задачи рендеринга и обработки изображений, (де)кодирования видео.

Ниже пример каркаса, который необходимо реализовать для запуска приложения в Azure Batch (указываю классы с пространством имен, для того, чтобы происхождение классов было очевидным).

Код для серверной части будет выглядеть приблизительно так:

    public class ApplicationDefinition
{
/// <summary>
/// Регистрируем приложение
/// </summary>
public static readonly Microsoft.Azure.Batch.Apps.Cloud.CloudApplication Application = new Microsoft.Azure.Batch.Apps.Cloud.ParallelCloudApplication
{
ApplicationName = "StockTradingAnalyzer",
JobType = "StockTradingAnalyzer",
JobSplitterType = typeof(MyApp.TradesJobSplitter),
TaskProcessorType = typeof(MyApp.TradesTaskProcessor)
};
}

public class TradesJobSplitter : Microsoft.Azure.Batch.Apps.Cloud.JobSplitter
{
/// <summary>
/// Делим Job на задачи для параллельной обработки
/// </summary>
/// <returns>Последовательность задач, запускаемых на вычислительных узлах</returns>
protected override IEnumerable<TaskSpecifier> Split(IJob job, JobSplitSettings settings)
{
/* split job here */
}
}

public class TradesTaskProcessor: Microsoft.Azure.Batch.Apps.Cloud.ParallelTaskProcessor
{
/// <summary>
/// Исполняем процесс для внешней задачи
/// </summary>
/// <param name="task">Выполняемая задача</param>
/// <param name="settings">Информация о выполнении запроса</param>
/// <returns>Результат выполнения задачи</returns>
protected override TaskProcessResult RunExternalTaskProcess(ITask task, TaskExecutionSettings settings)
{
/* some magic */
}

/// <summary>
/// Объединяем результаты выполнения гранулярных задач (tasks) в результат выполнения Job
/// </summary>
/// <param name="mergeTask">Задача объединения результатов</param>
/// <param name="settings">Информация о выполнении запроса</param>
/// <returns>Результат выполнения Job</returns>
protected override JobResult RunExternalMergeProcess(ITask mergeTask, TaskExecutionSettings settings)
{
/* yet another magic */
}
}

Вызываем на клиенте:

Microsoft.WindowsAzure.TokenCloudCredentials token = GetAuthenticationToken();
string endpoint = ConfigurationManager.AppSettings["BatchAppsServiceUrl"];

// создаем клиента
using (var client = new Microsoft.Azure.Batch.Apps.BatchAppsClient(endpoint, token))
{
// утверждаем Job
var jobSubmission = new Microsoft.Azure.Batch.Apps.JobSubmission()
{
Name = "StockTradingAnalyzer",
Type = "StockTradingAnalyzer",
Parameters = parameters,
RequiredFiles = userInputFilePaths,
InstanceCount = userInputFilePaths.Count
};
Microsoft.Azure.Batch.Apps.IJob job = await client.Jobs.SubmitAsync(jobSubmission);
// мониторинг Job
await MonitorJob(job, outputDirectory); // тут много кода с отслеживанием статуса Job, обработкой ошибок, который для краткости опущен
}

Субъективно, хотелось бы, конечно, какой-то более высокой уровни абстракции и экзотики типа ациклических графов исполнения и что-то типа Distributed LINQ, т.е. так, как это сделано в проектах Naiad и Dryad (в этом блоге) от Microsoft Research.

На azure.microsoft.com уже доступен небольшой обзор сервиса. Для тех, кто хочет посчитать слова могут заглянуть в следующий tutorial.

Примеры с работающим кодом (а не теми «абстракциями», которые я написал выше) уже доступны на code.msdn.com (C#) и GitHub (Python).

D-серии Azure VM

Касаясь тем HPC, отмечу недавний анонс D-серии Azure VM. Как всегда, это бывает в таких анонсах добавилось плюс nn% к тому, что уже было. Но если возвращаться к железным фактам, то стали доступны вычислительные узлы с 16x CPU, 112 Gb RAM и 800 Gb SSD за ~$2,5 в час (цена актуальна на конец октября 2014).

И еще… (не придумал категорию)

Azure Data Factory

Azure Data Factory – сервис, предоставляющий инструменты оркестровки и трансформации потоков данных, мониторинга источников данных, таких как MS SQL Server, Azure SQL Database, Azure Blobs, Tables.

Идея интуитивно простая (что засчитывается в плюс): создаем сервис; привязываем входные и выходные источники данных; создаем pipeline (одна или несколько активностей, принимающая входные данные, манипулирующая ими и записывающая в выходной поток) и смотрим. Результат будет выглядеть вот так. Упрощает работу с сервисов, что все шаги, кроме создания pipeline, можно сделать через web-интерфейс.

Примеры работы с сервисом уже лежат на GitHub, а «Step by step walkthrough» написан.

Machine Learning

То, что я напишу в этом разделе уже совсем не «горячие» новости, но повторить все равно приятно.

Самое главное: первый шаг сделан – в Azure доступен public preview сервиса Azure ML. Заявлена поддержка R и более 400 (может и не 400, но точно много) прединсталлированных пакетов для R. На текущий момент также имеется поддержка модулей Vowpal Wabbit.

Кроме того, для исследовательских проектов открылась программа «Azure for Research Award Program», главной целью которой является сделать и мир лучше, а побочной – популяризовать среди академического сообщества платформы Azure, в общем, и сервис Azure ML, в частности. Обе цели мне вполне нравится (в тем более, что никто не запрещает «облачным» конкурентам Microsoft делать то же самое).

Также по теме машинного обучения Microsoft проводила ряд интересных мероприятий.

Events

Поезд ушел (мероприятия прошли, но возможно записи остались)

В сентябре месяце проходил Microsoft Machine Learning Hackathon 2014.

В середине октября прошла конференция TechEd Europe 2014.

В конце октября проходил Microsoft Azure Machine Learning Jump Start.

Поезд идет (и в него еще можно запрыгнуть!)

15-16 ноября в Москве пройдет Big Data хакатон.

Цените данные. Исследуйте. Открывайте!

Автор статьи

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