Azure Data Factory Preview

Кілька місяців тому у вигляді preview з'явився сервіс Microsoft 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 Serviceimage
Вибираючи тип Storage для LS, вибираємо тип Azure Table storageimage
Wizard для Storage Accountimage
Wizard для бази данихimage

Наступним кроком буде створення Pipeline.
Особливість на поточний момент в тому, що ми не можемо зробити це через інтерфейс. Доведеться використовувати Powershell команди cmdlet.
Входить таблиця
В 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 можна вивантажити логи stderrimage

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

Посилання


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

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

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.