Azure Data Factory Preview

в 5:20, , рубрики: .net, azure, big data, Microsoft Azure

Несколько месяцев назад в виде preview появился сервис Azure Data Factory, и наконец-то у меня дошли руки с ним разобраться.

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

Такой своеобразный аналог SQL Server Integration Service. Построил pipeline (конвейер обработки) и на выходе получил результат. При этом в качестве источника данных можно использовать SQL Azure, SQL Server (в том числе и не в Azure), а также Blob, Table, Queue из Storage Account.
Конечно с SSIS на порядок более мощный инструмент, но это самое близкое сравнение приходящее на ум.

Термины

Чтобы понять что такое ADF надо разобраться с его терминологий.

  • Linked Service – фактически, это указатель-запись-строка на ресурс, который затем будет использован при работе. Он бывает 2 типов: хранение данных и обработка.
    • Storage — SQL Azure, Azure Storage Account, SQL Server.
    • Compute сейчас поддерживается только Hadoop. На мой взгляд, Hadoop может быть излишне мощным инструментом, и для задач обработки будет достаточно менее мощных ресурсов. Надеюсь, в будущем добавят и worker role, и виртуальные машины, и batch. Но на данный момент в стадии preview.
  • Data Set — именованный набор данных. В теории, может быть как просто набором байт, так и структурированной таблицей со схемой. В реальности на данный момент поддерживается только один тип.
    • Table — это набор плоских данных со схемой.
  • Activity – это непосредственные обработчики данных. Они бывают 3 типов: написанные на C#, написанные на Hive/Pig для Hadoop и copy-активности, для копирования данных с локальных серверов в облако.
  • Pipeline — это процесс, который объединяет linked service-источники данных, linked service-обработчики и activity и на выходе создает Data Set.
  • Data Hub — логическая группировка Linked Service. Pipeline стартует в рамках одного Data Hub. (Судя по всему сейчас переименовали в Resource Group т.к. я только в одной статье видел этот термин, а на портале и в остальных статьях resource group. По этому даже pull request сделал, с правкой стать.)
  • Slice — это часть Dataset, полученная в рамках одного запуска. Каждый последующий запуск процесса порождает новый slice.
  • Data Management Gateway — это ПО, которое позволяет соединить локальный sql server ADF. Мы должны его установить в своей сети, зарегистрировать через Azure Portal.

Создаем Azure Data factory

Как это выглядит пошагово:

Открываем Management Portal Preview.

image

Нажимаем создать

image

Добавляем Linked Service

image

Выбирав тип Storage для LS, выбираем тип Azure Table storage

image

Wizard для Storage Account

image

Wizard для базы данных

image
Следующим шагом будет создание Pipeline.

Особенность на текущий момент в том, что мы не можем сделать это через интерфейс. Придется использовать Powershell командлеты.

Входящая таблица

В Json описываем структуру нашего источника данных.

image

Надеюсь, в будущем команда сделает экспорт какой-нибудь или графический wizard, но пока так.

После чего создаем таблицу через powershell команду:

image

Точно таким же образом создается выходная таблица. Т.к. если есть вход, значит должен быть и выход.

Создаем сам Pipeline

Мы это делаем в json-формате.

image

Самое важное я выделил — это имена входящих и исходящих таблиц, их типы указаны в трансформации.

Затем исполняем скрипт создания pipeline через powershell.

image

После чего через интерфейс портала мы можем посмотреть на созданную активность, статистику ее вызовов и т.п.

imageimage

Это достаточно простой пример.
Ничто нам не мешает выход одной активности передавать на вход другой или сделать несколько источников данных для активности. Все упирается в ваши потребности.

Вот пример более сложной схемы:

image
Источники и приемники для Copy Activity

Команда разработчиков предоставила нам табличку, показывающую, что и куда можно переливать.
image
Понятно, что внутри Azure все и везде. А вот если мы подключаем либо свой локальный SQL Server, либо созданный на виртуальной машине (что по сути одно и тоже, с точностью до Data Management Gateway), то мы уже ограничены в направлениях. Хотя если мы переливаем данные с одного локального SQL Server на другой, то не очень понятно, зачем тут Data Factory вообще: берем SQL Integration Service и поехали!
В этой же статье и набор свойств для каждого источника/приемника данных перечислен.

.Net code activity
Но это были всего лишь Copy Activity. Если мы хотим написать что-то более разумное, чем переливку данных из одного источника в другой, нам придется написать на C# code activity и подключать его в процесс обработки. Хостится .Net activity внутри Hadoop кластера.

Чтобы созданный нами класс был вызван, мы должны всего-то на всего имплементировать интерфейс.

image

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

После того, как мы написали код, мы должны его опубликовать в blob в виде zip-архива.

Затем мы можем сослаться на него при создании pipeline,как это показано ниже.

image
.net SDK — Создание всех настроек из C#

В принципе, мы можем создавать и linked resource и pipeline из C#, а не только из powershell через json. Все объекты в JSON один в один мапятся в C# классы. Кому интересно можно прочесть в статье

С ADF можно и нужно работать через PowerShell-коммандлеты, полное их описание можно прочитать тут.

Использования Hive на Hadoop

Мы можем написать скрипт на hive или pig и встроить его в pipeline обработки. Более подробно можно прочитать в этой и этой статье.
По большому счету ничего особенно отличающегося от остальных вариантов. Просто в качестве актвности указывается hive скрипт, грузится в blob и затем на него ссылается в декларации pipeline.
Я правда везде вижу Hive/Pig, но про Pig почему-то только заявления, что можно, ни статьи нет на эту тему.

Мониторинг, запуски, данные.

В интерфейсе портала можно посмотреть информацию по всем источникам данных, запускам, их состоянию, по slice-ам, образовавшимся в результате работы.

Тут все вроде очевидно.

image
image
image
image
On Premise data source

Как заявляют авторы, мы можем использовать стоящий в нашем datacenter sql server.
Для этого нам надо поставить Data Management Gateway (это ПО, которое ставится на ваш сервер и обеспечивает связь azure с ним), а затем так же, как и раньше, зарегистрировать наш sql как linked service.
Более подробно рекомендую прочитать статью. Ни каких рокетных технологий тут нет.

Разбирательства с ошибками и проблемами

Более подробно
Как и любой проект по переливке данных (SQL Integration Service и т.п.) с логированием все могло бы быть лучше.

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

image
image
image
image

На мой субъективный взгляд, было бы полезно встроиться в шаг процесса и понять что там происходит и залогировать это, а то что есть сейчас немного не достаточно. Хотя это еще preview, а не релиз.

У pig/hive можно выгрузить логи stderr

image
Цены:

Есть 2 возможности запуска, т.к. есть 2 тарификации: в облаке и локально.
Под локально понимается не возможность развернуть ADF под столом, а использование локального sql.
image
Тут как всегда: запуск активности — это одни деньги. Если используете HD Insight(Hadoop), то за него отдельно, трафик, исходящий из azure — тоже отдельно. Мне лично непонятно, зависит ли время работы активности и стоимость ее запуска, т.к. в информации этого не нашел.

Ссылки

Мое личное мнение, что проекто родился из внутренней разработки внутри одной из команд azure и был представлен публике… Он решал свою специфичную задачу, а потом был выкачен в public. Как по мне так не хватает библиотеки активностей, чтобы не все писать руками (в SSIS есть ведь такая), не будет хватать возможности написать свой провайдер к источнику данных и т.п. В целом над SQL Server Integration Service есть 1 преимущество- можно испольовать не SQL источники и приемники данных, в остальном-же сервис сильно проще, если не сказать примитивнее.

P.S. статья доступна на github

Автор: SychevIgor

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js