Microsoft Azure Databricks
Lors de l'évènement Datavore 2018 à Montréal, j'ai participé à l'animation d'un atelier sur Azure Databricks. Cet article reprend les différentes étapes de l'atelier que j'ai délivré.
Présentation d'Azure Databricks
Azure Databricks est une plateforme collaborative de données massives et d'apprentissage automatique, qui s'adapte automatiquement à vos besoins. Ce nouveau service Azure consiste en une plateforme d'analyse basée sur Apache Spark et optimisée pour la plateforme de services infonuagiques Azure. Azure Databricks comprend l'ensemble des technologies et des fonctionnalités libres de mise en grappe d'Apache Spark. En outre, grâce à notre nouvelle solution, vous serez en mesure de gérer facilement et en toute sécurité des charges de travail telles que l'intelligence artificielle, l'analyse prédictive ou l'analyse en temps réel.
Atelier
Cet atelier est constitué de 2 grandes parties
Partie 1 : configuration de l'environnement Azure
Partie 2 : utilisation de Databricks
- Atelier : Data Engineering avec Databricks
Partie 1 : configuration de l'environnement Azure
Création d'un groupe de ressources
Un groupe de ressources est un groupement logique de vos ressources Azure afin d'en faciliter la gestion. Toutes les ressources Azure doivent appartenir à un groupe de ressources.
Portail Azure : https://portal.azure.com
Depuis le portail Azure, cliquez sur « Resource groups » puis sur le bouton « Add »
Renseignez les informations de votre groupe de ressources.
Pour ce laboratoire, choisissez la région « East US 2 ». Cliquez sur le bouton « Create »
Une fois le groupe de ressources créé, une notification apparait en haut à droite de l'écran. Cliquez sur « Go to resource group ».
Votre groupe de ressources est créé et prêt à être utilisé.
Création d'un compte de stockage
Un compte de stockage Azure est un service cloud qui fournit un stockage hautement disponible, sécurisé, durable, évolutif et redondant. Le stockage Azure se compose du stockage d'objets blob, du stockage de fichiers et du stockage de files d'attente. Pour notre laboratoire, nous allons utiliser le stockage d'objets blob. Pour plus d'informations sur le stockage Azure, vous pouvez consulter cet article : /fr-fr/azure/storage/
Pour comprendre un peu le concept, un compte de stockage peut contenir un ou plusieurs containeurs qui eux-mêmes vont contenir les blobs (dossiers et fichiers)
Le compte de stockage peut être crée de la même manière que le groupe de ressources, via le portail. Mais il est possible aussi d'utiliser le « Cloud shell » intégré au portail. C'est ce que nous allons faire ci-dessous.
En haut du portail Azure, cliquez sur l'icône « Cloud shell ».
Le « Cloud shell » va s'ouvrir en bas de l'écran. Cliquez sur « Bash (Linux) »
Si c'est la première fois que vous exécutez le « Cloud shell », la fenêtre suivante va apparaître. Choisissez votre abonnement Azure, puis cliquez sur « Create storage ».
Une fois paramétré, le « Cloud shell » est prêt à être utilisé.
La création d'un compte de stockage peut se faire avec la commande suivante :
az storage account create --name <yourStorageAccount> --resource-group <yourResourceGroup> --location eastus2 --sku Standard_LRS
Dans le cas de cet exemple, voici la ligne de commande correspondante :
az storage account create --name datavorestorage --resource-group datavore --location eastus2 --sku Standard_LRS
Au bout de quelques secondes le compte de stockage est créé. Cliquez sur le bouton « refresh »de votre groupe de ressources. Votre compte de stockage doit alors apparaître.
Si vous cliquez sur votre compte de stockage, vous accéderez alors aux différentes fonctions et propriétés du compte de stockage. Notamment pour retrouver les informations de connexions en cliquant sur « Access Key ».
Maintenant que le compte de stockage est disponible, nous allons créer les containeurs pour y stocker nos différents fichiers.
Avant de pouvoir créer les containeurs, il faut pouvoir accéder au compte de stockage. Pour cela, il faut récupérer les clefs d'accès au compte. Ci-dessous une commande permettant de récupérer les clefs.
az storage account keys list --account-name <yourStorageAccount > --resource-group <yourResourceGroup> --output table
Dans notre exemple, voici la commande utilisée
az storage account keys list --account-name datavorestorage --resource-group datavore --output table
Copiez une des 2 clefs puis exportez les informations de votre compte de stockage
export AZURE_STORAGE_ACCOUNT="<YourStorageAccount>"
export AZURE_STORAGE_ACCESS_KEY="<YourKey>"
Voici les lignes de commande concernant notre laboratoire
export AZURE_STORAGE_ACCOUNT="datavorestorage"
export AZURE_STORAGE_ACCESS_KEY=" yqwBdGRgCW0LWdEuRwGdnxKPit+zXNrrVOxXQy57wq6oHmCSy2NnoA3Pr9E4pMgJPwcVeg8uQt1Uzk5YAWntiw=="
Création des containeurs
az storage container create --name nyctaxi-consumption
az storage container create --name nyctaxi-curated
az storage container create --name nyctaxi-demo
az storage container create --name nyctaxi-raw
az storage container create --name nyctaxi-ref-data
az storage container create --name nyctaxi-staging
az storage container create --name nyctaxi-scratch
Pour vérifier la création de vos containers, depuis le portail Azure, cliquez sur votre stockage Azure
Dans la vue « Overview », cliquez sur « Blobs »
Vous devez retrouver les containeurs créés précédemment
Copie des fichiers pour le laboratoire
Données de références
Les fichiers sont stockés sur un de nos comptes de stockage. Ne modifiez surtout pas la clef ci-dessous.
Exécutez ce script dans le « Cloud Shell »
export SRC_STORAGE_ACCOUNT="franmerstore"
export SRC_STORAGE_ACCESS_KEY="eSSFOUVLg4gB3iSxuFVh/lDVoMeQHCqVj67xHdaYcPYoMSUqFuD+E2OeDhY4wRZCEF97nCRGOV0i7WJDyoOd7g=="
Puis la commande suivante :
azcopy --source https://franmerstore.blob.core.windows.net/nyctaxi-staging/reference-data/ --destination https:// <YourStorageAccount>.blob.core.windows.net/nyctaxi-staging/reference-data/ --source-key $SRC_STORAGE_ACCESS_KEY --dest-key $AZURE_STORAGE_ACCESS_KEY --sync-copy ––recursive
Dans notre exemple, voici la commande à exécuter avec le compte de stockage utilisé dans cet exemple :
azcopy --source https://franmerstore.blob.core.windows.net/nyctaxi-staging/reference-data/ --destination https://datavorestorage.blob.core.windows.net/nyctaxi-staging/reference-data/ --source-key $SRC_STORAGE_ACCESS_KEY --dest-key $AZURE_STORAGE_ACCESS_KEY --sync-copy --recursive
Copie des données transactionnelles
Pour ce laboratoire, nous allons prendre juste un sous-ensemble des données. Si vous souhaitez récupérer l'ensemble des données référez-vous à l'index en fin de document (cela prendra au moins 2h).
Pour ce laboratoire, nous allons travailler uniquement sur l'année 2017, mais rien ne vous empêchera par la suite de réexécuter les scripts en changeant simplement l'année
Voici les scripts pour copier les données transactionnelles :
azcopy
--source https://franmerstore.blob.core.windows.net/nyctaxi-staging/transactional-data/year=2017/ --destination https://<YourStorageAccount>.blob.core.windows.net/nyctaxi-staging/transactional-data/year=2017/ --source-key $SRC_STORAGE_ACCESS_KEY --dest-key $AZURE_STORAGE_ACCESS_KEY --sync-copy
--recursive
Dans notre exemple, nous aurons donc :
azcopy
--source https://franmerstore.blob.core.windows.net/nyctaxi-staging/transactional-data/year=2017/ --destination https://datavorestorage.blob.core.windows.net/nyctaxi-staging/transactional-data/year=2017/ --source-key $SRC_STORAGE_ACCESS_KEY --dest-key $AZURE_STORAGE_ACCESS_KEY --sync-copy
--recursive
Pour vérifier les données, vous pouvez exécuter la commande suivante :
az storage blob list
--container-name nyctaxi-staging --output table
Création d'une base Azure SQL Database
Depuis le portail Azure, cliquez sur « + Create a resource », « Database » puis sur « SQL database »
Puis renseignez les valeurs pour votre base de données
Il se peut que vous soyez obligé de créer un serveur SQL.
Cliquez sur « Configure required settings », « Create a new server ».
Renseignez les informations du server SQL. Souvenez-vous bien du mot de passe !
Cliquez sur « Select ».
Continuez à renseigner les informations de votre de base de données puis cliquez sur « Create »
Création des tables SQL
Depuis le portail Azure, cliquez sur votre base de données fraichement créée.
Cliquez sur « Query editor », puis sur « Login »
Entrez vos informations de connexion, puis cliquez sur « Ok ».
Création des tables
Depuis le portail Azure, copier le script T-SQL ci-dessous dans l'éditeur, puis cliquez sur « Run »
DROP TABLE IF EXISTS TRIPS_BY_YEAR;
CREATE TABLE TRIPS_BY_YEAR (
TAXI_TYPE VARCHAR(10),
TRIP_YEAR INT,
TRIP_COUNT BIGINT
);
Répétez l'opération pour les 2 tables suivantes
DROP TABLE IF EXISTS TRIPS_BY_HOUR;
CREATE TABLE TRIPS_BY_HOUR (
TAXI_TYPE VARCHAR(10),
TRIP_YEAR INT,
TRIP_HOUR INT,
TRIP_COUNT BIGINT
);
DROP TABLE IF EXISTS BATCH_JOB_HISTORY;
CREATE TABLE BATCH_JOB_HISTORY
(
batch_id int,
batch_step_id int,
batch_step_description varchar(50),
batch_step_status varchar(10),
batch_step_time varchar(25)
);
ALTER TABLE BATCH_JOB_HISTORY
ADD CONSTRAINT batch_step_time_def
DEFAULT CURRENT_TIMESTAMP FOR batch_step_time;
Vous devez voir vos tables depuis le portail Azure
Création d'une ressource Azure Databricks
Depuis le portail Azure, cliquez sur « + Create a resource », « Data + Analytics » puis « Azure Databricks ».
Renseignez les informations de votre « workspace » . Placez le bien dans votre ressource groupe. Sélectionnez la région « East US 2 ».
Cliquez sur « Create ».
Après la création de votre espace de travail Databricks, votre groupe de ressources doit contenir les ressources suivantes :
Provisionnez un cluster et commencez les analyses
Cliquez sur votre ressource Databricks
Puis sur le bouton « Launch Workspace ».
Votre infrastructure Azure est prête. Vous pouvez commencer l'analyse de vos données avec Databricks
Partie 2 : utilisation de Databricks
Atelier : Data Engineering avec Databricks
Création du cluster
Une fois dans l'espace de travail Databricks, sur la gauche, cliquez sur « Clusters », puis sur « Create Cluster »
Voici les paramètres du cluster à utiliser :
- Databricks Runtime Version : 4
- Python version : 3
- Worker Type : Standard_DS13_v2
- Spark Config : spark.hadoop.fs.azure.account.key.<yourStorageAccount>.blob.core.windows.net <yourKey>
Ci-dessous l'exemple de configuration pour l'atelier 2.
Cliquez sur « Create cluster »
Après quelques minutes, votre cluster est prêt
Notebooks
Sur la gauche de l'écran, cliquez sur « Workspace », puis « Users ».
A droite de votre alias, cliquez sur la flèche puis sur « Import »
Dans la fenêtre « Import Notebooks », cliquez sur « URL » puis copiez l'adresse ci-dessous
https://franmerstorage.blob.core.windows.net/databricks/Notebooks/nyc-taxi-workshop.dbc
Cliquez sur le bouton « Import »
Les notebooks doivent apparaître dans votre espace de travail.
Utiliser un notebook avec un cluster
Avant de pouvoir commencer à utiliser le notebook, il faut attacher ce dernier à un cluster.
Cliquez sur « Detached » puis sélectionnez un cluster.
Configuration des Notebooks
Pensez à renseigner votre compte de stockage
Dans le notebook « 2-CreateDatabaseObjects », renseignez les champs concernant votre base de données Azure.
Dans cet exemple nous aurons donc
Cliquez sur le notebook « 1-LoadReferenceData » pour continuer le laboratoire avec Databricks
Durant les ateliers, pour revenir sur votre espace de travail pour changer de notebooks, cliquez sur « Workspace » à gauche de l'écran.
A partir de maintenant, continuez le laboratoire à partir des notebooks. Ci-dessous des conseils pour les différents notebooks de l'atelier.
Certains travaux vont prendre plusieurs minutes. Vous pourrez vérifier l'avancement en cliquant sut les flèches à gauche des travaux.
Dans la partie « 05-GenerateReports », dans le notebook « Report-1 », vous y trouverez des exemples de rapports.
Au niveau d'un des rapports, cliquez sur l'icône graphique.
Dans le menu contextuel, cliquez sur « Show Code »
Le script retournant les résultats permettant la création des graphiques s'affichent
Sous le graphique, de nombreuses options sont disponibles pour changer la visualisation de vos données
Dans la partie « 06-BatchJob », dans le notebook « GlobalVarsMethods », n'oubliez pas de renseigner les valeurs de votre base Azure SQL
Commande 1
Commande 2
Rapport interactif avec Power BI Desktop
Après avoir fait le dernier notebook du laboratoire, il peut être intéressant de se connecter aux données avec Power BI Desktop.
Depuis Power BI Desktop, cliquez sur « Get Data », « More »
Sélectionnez le connecteur « Spark »
La fenêtre suivante apparaît. Il faut donc fournir les informations de connexions
Pour le moment, l'adresse du cluster Databricks n'est pas triviale à trouver. Mais voici comment faire.
Depuis votre espace de travail Databricks, cliquez sur « Clusters », puis sur le nom de votre cluster (« DatavoreCluster » dans notre exemple)
Une fois dans la page de votre cluster, cliquez sur « JDBC/ODBC ».
Dans le champ « JDBC URL », composez l'adresse du server avec les 2 éléments entourés en rouge, et en ajoutant https au début.
Pour notre exemple cela va donner :
https://eastus2.azuredatabricks.net:443/sql/protocolv1/o/1174394268694420/0317-035245-abed504
Donc, voici ce que ça donne dans Power BI Desktop. Cliquez sur « Ok »
Maintenant, il faut les autorisations .
Pour cela, il est nécessaire de générer un jeton d'accès du côté de Databricks.
Dans l'espace de travail de Databricks, cliquez en haut à droite sur l'icône utilisateur, puis sur « User Settings »
Cliquez sur le bouton « Generate New Token »
Donner un nom explicite à votre jeton et cliquez sur le bouton « Generate »
Depuis la fenêtre qui apparaît, copiez et conservez bien ce jeton, car il ne sera plus possible de le récupérer par la suite.
Cliquez sur le bouton « Done ».
Le jeton est généré !
Du côté de Power BI Desktop, copiez le jeton dans le champ « Password », puis utiliser token dans le champ « User Name » (Effectivement, ça ne s'invente pas ).
Cliquez sur le bouton « Connect ».
Vous voilà prêt pour explorer vos données. Sélectionnez les tables ci-dessous, puis cliquez sur le bouton « Load »
Une fois les données connectées au rapport, cliquez sur l'icône de liaison qui se trouve sur la gauche.
Par un simple glisser-déposer, réaliser les liaisons entre les tables
La fenêtre de liaison apparaît, cliquez sur le bouton « Ok »
Après avoir effectué toutes les liaisons, voici un exemple de ce que vous pouvez obtenir :
Voici un exemple de rapport
Index
Dans le cas où vous souhaitez charger toutes les données dans votre compte de stockage, il est possible de le faire avec la commande suivante
azcopy
--source https://franmerstore.blob.core.windows.net/nyctaxi-staging/ --destination https://<YourStorageAccount>.blob.core.windows.net/nyctaxi-staging/ --source-key $SRC_STORAGE_ACCESS_KEY --dest-key $AZURE_STORAGE_ACCESS_KEY --sync-copy --recursive
Dans notre exemple cette ligne de commande sera donc :
azcopy
--source https://franmerstore.blob.core.windows.net/nyctaxi-staging/ --destination https://datavorestorage.blob.core.windows.net/nyctaxi-staging/ --source-key $SRC_STORAGE_ACCESS_KEY --dest-key $AZURE_STORAGE_ACCESS_KEY --sync-copy –recursive