Architecture d’un projet Azure Data Factory v2

Je viens d’écrire une série d’article sur Azure Data Factory v2 que je ne voulais pas publier ici parce qu’elle est rédigée en anglais. Ceci n’étant pas une raison pour abandonner mes premières amours, voici la traduction du premier article de la série, centré sur l’architecture du projet.

Je ne pense pas traduire les autres: ils sont plus proches du code donc facile à comprendre même en traduction automatique. Désolé pour les fautes de frappes, je fais ce que je peux avec mon clavier qwerty 😉

Remarque: je suis employé de Microsoft au moment où je rédige cet article

Scenario

Périmètre

L’objectif de cet article est de partager les réflexions faites lors du design et de l’implémentation d’une pipeline d’ingestion de données, partie d’un projet plus large d’IoT basé sur des technologies Cloud.

Dans notre scenario, nous sommes un fournisseur de service gérant une plateforme Big Data centralisée. Les données que nous traitons viennent d’une multitude d’appareils similaires mais déployés chez plusieurs de nos clients (Company A, Company B…).

La chaîne de traitement va ingérer des fichiers publiés toutes les heures sur un serveur sFTP centralisé (un répertoire top niveau par client, cette étape est déjà implémentée). Elle va ensuite les décoder, les convertir (CSV a Parquet) et les déplacer dans le répertoire de staging de la plateforme Big Data.

Illustration de la chaine de traitement discute ci-dessus

Besoins techniques

  • Des fichiers encodés (raw) sont publiés toutes les heures sur un serveur sFTP déployé dans un Virtual Network
  • Le décodeur (decoder) est une application Windows qui convertit les fichiers en CSV
  • La plateforme Big Data attend des fichiers Parquet en entrée

En plus de cela, les fichiers doivent être réorganisés d’une structure de répertoires hiérarchisées (Company\Year\Month\Device ID\xyz.csv), vers une structure à plat (Staging\year_month_company_device_xyz.csv). Ceci afin de faciliter l’ingestion par la plateforme Big Data.

Illustration du changement de structure de repertoire

Approche générale

Nous allons traiter les fichiers dans un batch qui tournera toutes les heures, en s’alignant sur leur rythme de génération.

Cela étant dit, par nature (IoT) nous manipulons ici des évènements. L’approche naturelle pour traiter des évènements est le temps réel (streaming). Pour moi la vraie solution, pérenne à long terme, serait de régénérer un flux d’évènements (stream) à partir des fichiers et d’utiliser des technologies d’ingestion en temps réel (Event Hub, Functions, Stream Analytics…) pour la suite des traitements. L’ingestion et la consommation de ces données en batch n’étant que la conséquence d’un détail d’implémentation existant.

Nous sommes missionné pour délivrer une solution en production dans un temps raisonnable, sans risque technique… nous avons donc décidé d’attendre que le besoin d’analyse en temps réel se manifeste pour passer sur du temps réel 😉

Nous aurons besoin d’un ETL avec des capacités Cloud pour orchestrer et exécuter le job, de moteurs de traitement (compute) pour déplacer et convertir les fichiers, et de solutions de stockage.

Éléments de la solution

Nous commencerons par choisir l’ETL puisque c’est la pièce centrale du puzzle. De cet ETL découlera la liste de moteurs de traitement disponibles, qui à leur tour indiqueront les solutions de stockage que nous pourrons employer.

ETL dans le Cloud

Nous utiliserons Azure Data Factory v2 (ADFv2) pour nos besoins d’ETL. Ce service nous permettra d’accéder à un large choix de solution de processing, que l’on pourra intégrer dans un unique flux d’orchestration (Control Flow).

ADFv2 offre:

  • un connecteur natif sFTP
  • une méthode pour accéder à des ressources résidant dans un Virtual Network (via self-hosted integration runtime, discuté ci-dessous)
  • une conversion native de CSV à Parquet avec la Copy Activity
    • A noter que c’est une approche temporaire, les Data Flows étant à préférer pour ce cas, mais toujours en preview à l’écriture de cet article

Une autre bonne raison de choisir ADFv2 est simplement que nous voulions tester le produit, alors qu’il se positionne comme la solution d’intégration en batch par défaut sur Azure.

Processing

ADFv2 peut utiliser deux types de moteurs de traitement:

Toutes les activités natives d’ADFv2 sont exécutées par un IR. Ce qui est bien c’est que chaque Factory vient avec un IR par défaut, managé par Microsoft (autoResolve IR). Ce qui est moins bien c’est que cet IR ne peut pas être configuré, y compris autour du networking. Il n’est donc pas utilisable dans le contexte d’un Virtual Network, dans notre cas il ne pourra pas toucher le serveur sFTP qui met à disposition nos fichiers. Afin de résoudre ce problème, nous allons déployer nous-même un « self-hosted » IR, sur une VM Windows que nous provisionnerons dans le Virtual Network, et l’enregistrer dans notre Factory.

Dans notre Factory, nous déclarerons nos services de stockage et les ferons utiliser l’IR qui correspond (via la propriété connectVia):

  • soit self-hosted (pour accéder au Virtual Network)
  • soit autoResolve (car c’est la seule capable de faire la conversion csv-parquet)

Enfin, à l’écriture de cet article, il n’existe pas d’activité native dans ADFv2 pour effacer des fichiers. Pour ce faire nous avons décidé d’utiliser une Logic App, en suivant cette stratégie, appliquée sur un File Store (voir Stockage ci-dessous). En alternative, nous avons essayé d’appeler directement la Delete REST API du File Store via une Web Activity, mais sommes rester bloqués sur l’authentification (pas de MSI disponible, contrairement aux Blobs). Nous avons également essayé la même approche avec une Function, mais là non plus sans succès (pas de support via le SDK, l’authentification via REST n’est pas évidente).

Stockage

Le décodeur est une application Windows qui écoute un répertoire d’entrée A, attrape les fichiers qui y apparaissent, les décode et les déplace vers un répertoire de sortie B.

Le transfert sFTP étant opéré par ADFv2, par un self hosted IR déployé localement, la manière la plus simple de positionner le décodeur est de l’installer sur une VM située dans le même Virtual Network. Nous monterons deux File Stores sur cette VM: pour l’entrée (A) et la sortie (B) des fichiers. Ces espaces de stockage seront à la fois accessibles par les outils Cloud, et vus comme des répertoires locaux par le décodeur.

Les fichiers seront mis à disposition de la plateforme Big Data dans un Blob Store, beaucoup plus pratique à utiliser dans ce contexte.

Solution

Architecture

Illustration du flux de traitement complet

Vis à vis de la planification:

  • L’étape 1 (copie du serveur sFTP vers A) doit être déclenchée par un trigger externe (0), planifié pour s’exécuter toutes les heures
  • L’étape 2 (de A vers B) est rendu par le décodeur, déclenché automatiquement sur écoute du répertoire A (quand un nouveau fichier apparaît)
  • Ce qui veut dire qu’idéalement les étapes 3 et 4 (3: copie et conversion des fichiers de B vers le Blob, 4: Logic App qui efface les fichiers) devraient elles aussi être déclenchées sur écoute, mais du répertoire B. Malheureusement ce n’est pas une fonctionnalité existante des File Stores (via ADFv2, Logic App ou Function). Une solution de contournement satisfaisante dans notre cas sera de déclencher 3 et 4 via un trigger planifié pour s’exécuter toutes les 15 minutes

Pour le stockage:

Recapitulatif des operations sur les fichiers

Coûts

A partir du volume de donnée attendu et de la liste des services employés, nous pouvons utiliser la calculatrice des prix d’Azure et obtenir une première estimation de la consommation mensuelle pour notre solution (en USD):

  • Data Factory : 250$
  • Logic Apps : 70$
  • Storage : 140$
  • VMs : 600$
  • VNet : 2$
  • Total : 1062$ (USD, par mois, 24/7 toutes les 15 minutes)

Il est important de voir ce chiffre comme une hypothèse qui doit être testée et validée. Entre les métriques obscures de la calculatrice et les larges possibilités d’optimisation de coût, il faut savoir investir du temps pour maîtriser sa consommation à long terme.

Alternatives

Il existe un nombre d’alternatives valables, de la solution poids lourd (HDInsight, Databricks…) au serverless (Function, Logic Apps…).

La suite

En anglais:

 

 

 

SQLRally Nordic : Construire une plateforme BI moderne en PaaS avec Azure

Si vous vous demandiez ce qui a expliqué ce long silence hivernal, voici l’une des principales raisons!

En effet j’ai été invité début mars à présenter une session au SQLRally Nordic 2015 à Copenhague. Pour ceux qui ne la connaissent pas, c’est une belle petite conférence sur 2 jours (4 tracks), payante, et si vous allez voir la liste des speakers vous verrez que le niveau est assez sympathique.

Tant qu’à me mettre en risque j’ai joué le tout pour le tout, en choisissant un sujet novateur et un peu provocateur. Parce que oui, faire de la BI en PaaS dans le Cloud, c’est provocateur!

Gif animé de Loki, personnage Marvel

Faîtes moi confiance, ça passe dans le Cloud, sans aucun problème!

Bon je ne m’attendais pas non plus à déclencher une bagarre générale dans la salle, mais j’ai quand même eu un peu d’appréhension que cela dégénère en un débat sur la théorie fondamentale du datawarehousing, dans la langue de Shakespeare. Rien de tout ça, la session s’est bien déroulée, la preuve en vidéo (oui je dois travailler sur mon accent… et ma démo!) :

Les idées que j’expose dans ce talk me parlent beaucoup en ce moment (architectures lamba/kappa, software containers, micro-services), si vous avez un peu de temps je pense que ça vaut le coup d’oeil. Par ailleurs j’ai proposé cette même session au PASS Summit 2015 (oui je suis un malade, mais ça n’est pas non plus un grand risque vu le peu de chance d’être sélectionné), et je vais globalement travailler dessus pour l’améliorer et pourquoi pas la présenter en France avant la fin de l’année.

Dans l’attente, les slides et les références que je conseille très vivement, avec une mention spéciale à Martin Kleppmann et son talk « Turning the database inside out« , juste exceptionnel:

Y’a un truc qui m’intrigue à Redmond…

Lors de la keynote du PASS Summit 2014, le mois dernier à Seattle, nous avions eu droit à la présentation de la nouvelle organisation de l’équipe Data Platform de Microsoft, par son leadership flambant neuf:

Des visages sur des noms

Trois patrons pour trois lignes de produit, alignées comme indiqué sur ce schéma (désolé pour la qualité patate):

L'organisation MS 2014 pour la Data en image

Si on repart du fond de la stack:

  1. Capture + Manage : T.K. « Ranga » Rengarajan, patron de Data Platform, Cloud & Entreprise. A comprendre : SQL Server, Azure SQL Database, Azure HDInsight, Azure DocumentDB, Azure Search and Analytics Platform System
  2. Transform + Analyze : Joseph Sirosh, patron de l’Information Management & Machine Learning. A comprendre : Tous les services Azure Data
  3. Visualize + Decide : James Phillips, patron de Power BI, tout du moins la partie sur O365 (dashboards, Q&A, Mobile…)

Là dessus je me fais les remarques suivantes:

  • Ranga ancien SAP, Joseph ancien Amazon, James co-fondateur de Couchbase, les 3 ont moins de 2 ans d’ancienneté chez MS, ça sent l’air frais, c’est plutôt bon signe
  • Ranga et Joseph sont CVP (haut gradés), James n’est « que » General Manager, bizarre cette différence de traitement…
  • Vis à vis des périmètres de chacun:
    • Pour Ranga on a une ligne claire de produits, énoncée dans sa fiche speaker, pas de doute possible
    • Pour Joseph, il fallait être là en scéance mais ont été nommés : Azure Data Factory, Azure Stream Analytics et Azure Machine Learning. On en reparle plus bas.
    • Pour James c’est moins clair. Power BI ça veut tout et rien dire, et si on s’en réfère au slide ci-dessus on note l’absence de la partie add-ins intégrée à Excel (soit à mon sens la plus importante), qui on le sait est retombée dans l’équipe Office. Bon il en parle quand même pendant la session, mais manifestement ça n’est pas dans son scope. Notons qu’il nous a parlé également de 2/3 autres trucs mignons qui arrivent et sont eux dans son scope : les Dashboards Power BI et l’amélioration du refresh on-premise/Power BI (genre SSAS et scheduling)

On en revient à Joseph, en reprennant le slide et en essayant de matcher les produits qu’on connaît en face:

  1. Orchestration -> Azure Data Factory
  2. Information Management -> ?
  3. Complex Event Processing -> Azure Stream Analytics
  4. Modeling -> ?
  5. Machine Learning -> Azure Machine Learning

Hum… Y’a des trous! Et si on observe le pattern, ça sent les services Azure managés, pour de l’Information Management et du Modeling! Wait, what?

Je ne sais pas vous, mais moi ça m’intrigue définitivement 😉

J'ai hâte!!

SQLSaturday à Paris – Session « Saisie de données pour la BI »

(Mise à jour 17/09/2013 : La session a eu lieu et les slides sont par là!)

Je vais suivre le bon exemple de Charly, et moi aussi faire un peu de pub pour ma session au prochain SQL Saturday, joyeusement co-animée avec Monsieur David Joubert !

SQLSAT251_web_thumb1

Alors voici pourquoi il faut venir nous voir, David et moi, pour la session « Saisie de données pour la BI » :

1 – Si on construit des systèmes décisionnels, c’est pour lutter contre l’obscurantisme et promouvoir la pensée rationnelle. Nos combats on les mène contre la simple ignorance mais aussi contre les biais cognitifs, ces petits bugs de la psychologie humaine qui nous font croire n’importe quoi, contre la mauvaise foi ou encore pour démasquer les conflits d’intérêts. Nous sommes les champions du bon sens et nous avons la donnée pour le prouver !

2 – On construit ces systèmes malgré les limites de nos outils, pour offrir les fonctionnalités à nos utilisateurs qui leur permettront de nous rejoindre dans cette juste mission. A nous de les équiper du meilleur pour gagner la lutte.

3 – Une des limites de nos outils, c’est qu’il est bien difficile de permettre à nos utilisateurs de saisir des données. Que ce soit pour saisir des objectifs afin de valider qu’une stratégie mise en place fonctionne bien, ou pour piloter le lancement d’un ETL d’un simple toucher du doigt, ou encore pour apporter des corrections sur un référentiel afin de rétablir la vérité, la fonctionnalité est requise mais pas aussi que ça évidente à mettre en œuvre. Lors de cette session nous verrons comment rendre tout cela possible.

Z’avez vu comment je l’ai joué « Start with Why » ? Pendant 2 minutes j’ai eu l’impression d’être dans Braveheart.

Braveheart fait de la BI

Alors afin quand même de vous éviter une fausse joie, si on parlera rapidement des scénarios MDM et BPM (particulièrement l’élaboration budgétaire), ce sera juste pour dire qu’ils sont hors sujets. Nous on se concentrera sur les petits scénarios aux bornes des grands cas d’usage, qui ne révolutionnent rien au niveau global mais qui changent tout pour l’utilisateur.

Et puis on a le dernier créneau de la journée, 16h-17h, donc le ton sera léger. Et vous nous connaissez, David et moi, vous savez qu’on n’est pas du genre à faire dans l’indigeste.

Alors on se voit le Samedi 14 Septembre ? Pensez juste à vous inscrire, c’est gratuit !

Me voilà MVP SQL Server – Merci à vous ;)

Comme vous le savez peut être déjà, la semaine dernière Microsoft m’a nommé pour rejoindre son programme MVP, « Microsoft Most Valuable Professional » (clin d’œil aux MVPs en sport).

Logo MVP

Pour ceux qui ne connaissent pas, c’est une reconnaissance que l’éditeur fait aux acteurs « influents » des communautés centrées sur ses produits, dans mon cas évidemment SQL Server et particulièrement les briques BI.

Je rejoins donc le petit groupe des MVPs SQL Server, autour de 300 dans le monde – et ouais, c’est pas de la gnognotte hein 🙂 – avec en France :

Et je n’oublie pas Isabelle, qui elle est en Belgique.

Cette année Microsoft double donc le nombre de MVP SQL Server BI en France, c’est bon signe pour le décisionnel 😉

Vous vous demandez peut-être ce que ce titre apporte, en dehors du logo qui claque ? Et bien au-delà des récompenses bassement matérielles (abonnement MSDN, trophée, grosses réductions sur les conférences payantes…) cela confère principalement l’accès à la communauté des MVP, qui est techniquement bien violente. Il y a principalement une mailing list à laquelle participe tous les gens dont on lit les livres. Il y a des événements réguliers pour découvrir les nouveautés que MS nous prépare en avance de phase (sous NDA bien sûr). Et il y aura un summit l’année prochaine pour rencontrer tout ce beau monde. Ce sont de vrais accélérateurs de connaissance qu’il faudra que je mette à profit cette année.

Vous vous demandez peut-être également en quoi ça vous intéresse ? Déjà je vous trouve bien curieux ! Et pour vous répondre, je dirais que c’est une récompense de groupe. Parce que pour être le représentant d’une communauté, il faut qu’il y ait une communauté. Et si Microsoft nous reconnaît c’est qu’on doit commencer à être bien visible. La scène décisionnelle française était bien maigre il y a de ça 3 ans, aujourd’hui elle vit, elle est diverse, et elle contribue à l’amélioration continue de tout l’écosystème. C’est top !

Et puis je trouve ça chouette que Microsoft ait choisi un candidat qui fait un focus non pas sur la technique comme une fin en soi, mais plus globalement sur la place des outils dans l’entreprise, sur quand et comment les employer, et sur les résultats qu’ils peuvent permettre d’atteindre. Même si la récompense est temporaire (on est MVP pour un an), pour moi ça fait partie des petits trucs qui rassure sur l’avenir de Microsoft, comme lorsqu’ils mettent du Linux dans Azure ou qu’ils s’impliquent dans l’Open Source.

Pour conclure, je vous remercie vous, lecteurs de ce blog, ainsi que tous les camarades BI que j’ai croisé et que je croise encore, avec qui on apprend tous les jours à se servir de nos outils pour réaliser des solutions qui en sont vraiment. Et je remercie aussi ma team MVP, JP et François qui m’ont filé un coup de main pour entrer et Martine qui nous prend par la main pour bien commencer cette nouvelle aventure 😉

Le changement c’est maintenant!

Rien à voir avec les élections, sauf que pour moi aussi c’est le changement !
Je reviens de vacances, et je reprends la BI ça vous gagne en main, en vous annonçant que j’ai changé de société de conseil pour rejoindre BIOS Consulting. En effet les directeurs associés de BIOS m’ont fait une belle offre pour monter un pôle Tableau Software, j’avais besoin d’air frais, donc j’ai accepté !

BIOS ça peut vous rappeler quelque chose, en effet c’est l’ancienne société d’Aurélien Koppel avant qu’il ne se fasse débaucher par Microsoft. Aujourd’hui c’est Thomas Morisson qui a pris sa place, et moi « j’abandonne » la BI Microsoft pour faire du Tableau. Je mets des guillemets parce que ce n’est juste pas possible, j’aime trop ça pour tout lâcher et  je suis sûr que Thomas saura me débaucher de temps en temps pour lui filer un coup de main 🙂

En attendant me voilà « Chef de pôle – Tableau Software », et je trouve que ça claque bien 😉

On peut se demander pourquoi changer de technologie, surtout alors que SQL Server 2012 déboule avec tous ses nouveaux jouets.

En fait cela vient d’un constat simple : l’offre décisionnelle Microsoft manque vraiment d’un réel outil de visualisation/exploration des données. On en reparlera en détail plus tard – je ferai surement toute une série d’articles sur tous ces produits et Tableau – mais PowerPivot est tout sauf visuel, et Power View est… comment dire ça sans fâcher personne… jeune ?
Donc on a beau faire le plus beau datawarehouse du monde, si le client voit une interface moche, ou ne peut accéder à ses données qu’à travers Excel, c’est difficile de l’en convaincre. Et ça gâche un peu la réussite de la mission. Tout ça Stephen Few en parle bien mieux que moi (et ça dès 2010…), à voir par là.

Et Tableau c’est aussi un produit qui est simple, efficace et puissant, facile à apprendre, et qui permet donc de se consacrer à la problématique du client plutôt qu’à la technique désobéissante. Parfaitement alignée avec ma philosophie tout ça !
Bon bin y’a du boulot, que ce soit sur la montée en compétence ou sur la construction de l’offre. Je vous tiendrai évidemment au courant au fur et à mesure. Souhaitez-moi bonne chance 😉