Skip to main content

Intégration d’Apache Spark à ArcGIS Notebooks dans ArcGIS Pro

Apache Spark est devenu l’outil d’office pour le traitement des données à grande échelle. ArcGIS GeoAnalytics Server et GeoAnalytics Desktop utilisent tous deux Apache Spark comme moteur de traitement en arrière-plan pour exécuter des analyses rapides et efficaces. Dans ce billet de blogue, voyez comment intégrer Apache Spark à ArcGIS Notebooks pour exécuter des tâches liées aux données massives à distance sur une agrégation Spark, plutôt que sur votre machine locale.

Apache Spark est un moteur d’analyse libre utilisé pour traiter des données à grande échelle. Il fournit un cadre pour le traitement distribué des données massives, qui se fonde sur le paradigme MapReduce. MapReduce permet d’accélérer les tâches impliquant des données massives en divisant les grands ensembles de données en plus petits sous-ensembles, lesquels profitent d’un traitement massivement parallèle. Apache Spark est principalement écrit dans le langage de programmation Scala, mais propose des interfaces API pour Python, Scala, Java et R. De plus, Spark dispose d’un module de traitement des données structurées (Spark SQL) qui permet d’interroger des données à l’aide d’un langage SQL (structured query language).

Apache Spark Core comprend les fonctionnalités de base de Spark. Il assure la répartition des tâches distribuées, l’attribution, la gestion des mémoires, la reprise après défaillance, les fonctionnalités d’E/S, etc. Ces fonctionnalités sont approfondies dans plusieurs composants qui s’ajoutent à Spark Core : Spark SQL permet aux ingénieurs et aux spécialistes des données d’exécuter des requêtes distribuées sur des données structurées (ou semi-structurées); Spark Streaming fournit des bibliothèques pour le traitement des données en temps réel; MLlib intègre les bibliothèques d’Apache Spark aux tâches d’apprentissage automatique; et GraphX facilite les graphes et le calcul parallèle de graphes.

Architecture de l’agrégation Spark

Pour le traitement des données massives, l’agrégation d’Apache Spark suit une architecture avec un nœud pilote et plusieurs nœuds de travail, lesquels sont gérés par un gestionnaire d’agrégation.

Les composants d’une agrégation Apache Spark : un nœud pilote, un gestionnaire d’agrégation et plusieurs nœuds de travail.

  • Le nœud pilote contient le processus pilote responsable de l’exécution du code utilisateur, de la conversion du code en tâches et de l’acquisition d’exécuteurs sur les nœuds de travail.
  • Le gestionnaire d’agrégation contrôle et alloue les ressources pour les nœuds de travail lorsqu’une application Spark est lancée. Il est possible de configurer Apache Spark pour qu’il utilise le gestionnaire d’agrégation de l’un des systèmes libres suivants :
    • Spark Standalone Mode, inclus dans la distribution Spark.
    • Apache Hadoop YARN, le gestionnaire de ressources de deuxième génération d’Hadoop.
    • Apache Mesos, développé pour gérer les ressources des agrégations à grande échelle.
    • Kubernetes, une plateforme de gestion des charges de travail conteneurisées.
  • Les nœuds de travail renferment les processus responsables de l’exécution des calculs que le nœud pilote leur assigne.

Apache Spark et ArcGIS

Il y a plusieurs façons d’utiliser la capacité de traitement distribué d’Apache Spark dans ArcGIS. Par exemple, Apache Spark est le moteur derrière le traitement distribué dans un site ArcGIS GeoAnalytics Server. GeoAnalytics Server offre une collection d’outils de calcul parallèle pour vous permettre d’analyser plus efficacement vos données massives. Il assure un traitement rapide en décortiquant le processus en plus petites tâches, lesquelles sont exécutées sur plusieurs cœurs de serveur et machines simultanément. Les résultats sont ensuite agrégés et renvoyés aux utilisateurs. Depuis la sortie d’ArcGIS Pro 2.4, la fonctionnalité GeoAnalytics est également offerte dans la boîte à outils GeoAnalytics Desktop. Ces outils utilisent Apache Spark en arrière-plan et assurent le calcul parallèle sur les cœurs de processeur disponibles sur votre machine locale.

Par ailleurs, vous pouvez connecter certaines applications ArcGIS à des agrégations Spark à distance, si vous avez besoin de ressources supplémentaires pour traiter de vastes ensembles de données sur votre machine locale. Par exemple, vous pourriez intégrer ArcGIS Insights Desktop à une agrégation Spark gérée pour effectuer des analyses à grande échelle. Pour la suite de ce billet de blogue, voyons comment intégrer ArcGIS Notebooks à une agrégation Spark à distance.

ArcGIS Notebooks et les agrégations Spark à distance

Une autre façon d’utiliser Apache Spark dans ArcGIS consiste à configurer ArcGIS Notebooks dans ArcGIS Pro pour traiter de grands ensembles de données dans une agrégation Spark à distance en utilisant Databricks. Il s’agit d’une plateforme infonuagique développée afin de fournir aux ingénieurs et aux spécialistes des données des agrégations Spark entièrement gérées pour les charges de travail de données massives. Avec Databricks, il est facile de créer un ensemble de ressources de calcul au besoin. Databricks Connect est une bibliothèque client qui permet aux utilisateurs d’exécuter à distance des charges de travail imposantes sur une agrégation gérée, plutôt que sur leur machine locale. L’analyse se fait sur votre machine locale, mais la tâche est soumise au serveur Spark exploité dans Databricks pour une exécution dans l’agrégation. Afin d’activer cette fonctionnalité pour ArcGIS Notebooks dans ArcGIS Pro, suivez les instructions ci-dessous :

Remarque : Un abonnement à Databricks est requis pour utiliser Databricks Connect sur votre machine locale.

Étape 1 : créez une agrégation sur Databricks. La version de Python installée sur votre machine locale doit correspondre à la version de Python liée à l’agrégation Databricks. Par exemple, ArcGIS Pro 2.8 est livré avec Python 3.7 et, par conséquent, lors de la création d’une agrégation, vous devez utiliser l’une des versions de Databricks Runtime qui comportent également Python 3.7. Dans cette liste figurent les versions 7.3 LTS ML, 7.3 LTS, 6.4 ML et 6.4 de Databricks Runtime (l’abréviation « LTS » signifie Long Term Support [assistance à long terme]). Databricks Runtime ML (ou Databricks Runtime for Machine Learning) crée une agrégation optimisée pour les tâches d’apprentissage automatique qui comprend les bibliothèques d’apprentissage automatique les plus populaires, telles que scikit-learn, PyTorch, TensorFlow, Keras et XGBoost. Si vous utilisez Databricks sur Azure ou AWS, vous avez peut-être accès à certaines de ces versions de Runtime.

Databricks Connect utilise le numéro de port 15001 par défaut. Vous pouvez configurer une agrégation de façon à ce qu’elle utilise un port différent, comme 8787. Pour ce faire, empruntez le chemin Advanced > Spark > Spark Config lors de la création de l’agrégation, et ajoutez la ligne ci-dessous à spark.conf :

spark.databricks.service.port 8787

Vous pouvez également ajouter une ligne supplémentaire à spark.conf pour vous assurer que vous pouvez connecter vos applications ou serveurs Notebook préférés à une agrégation Databricks, puis exécuter le code Apache Spark :

spark.databricks.service.server.enabled true

Définition du numéro de port et activation de l’accès à distance dans la zone Spark Config d’une agrégation Spark.

Étape 2 : téléchargez et installez la version 8 de Java SE Runtime sur votre machine locale. Il est important de seulement installer la version 8. Il est également très important de faire passer l’emplacement d’installation à « C:\Java\jdk1.8.0_301 » (ou à tout autre emplacement ne comportant pas d’espace dans le nom du chemin). Par défaut, le programme d’installation utilise le dossier « Program Files » (Programmes) comme emplacement d’installation, ce qui peut poser des problèmes avec Spark en raison de l’espace dans le nom anglais du chemin.

Une fois que Java est installé, ouvrez Windows PowerShell et exécutez la commande suivante pour définir la variable d’environnement pour JAVA_HOME :

[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Java\jdk1.8.0_301", "Machine")

Étape 3 : clonez l’environnement Conda par défaut qui est livré avec ArcGIS Pro (c’est-à-dire arcgispro-py3) et définissez ce nouvel environnement comme environnement actif. Ensuite, ouvrez l’invite de commande Python et exécutez la commande pip pour installer la bibliothèque Databricks Connect pour la version de Databricks Runtime que vous utilisez dans l’environnement actif. Par exemple, si vous utilisez la version 7.3 de Databricks Runtime, exécutez la commande suivante :

pip install -U "databricks-connect==7.3.*"

Étape 4 : déterminez la valeur des paramètres dont vous aurez besoin pour vous connecter. Pour utiliser une agrégation Databricks à distance, vous devez définir cinq paramètres : l’hôte (Databricks Host), le jeton (Databricks Token), l’identifiant d’agrégation (Cluster ID), l’identifiant d’organisation (Org ID) et le port (Port).

Le Databricks Host, le Cluster ID et l’Org ID se trouvent dans l’URL de l’espace de travail Databricks lorsque vous êtes connecté à votre déploiement Databricks. Par exemple, si vous utilisez Microsoft Azure, l’URL sera la suivante :

<Databricks Host>/?o=<Org ID>#setting/clusters/<Cluster ID>/configuration

L’espace de travail Databricks avec l’URL en surbrillance.

Le numéro de port est le même que celui que vous avez utilisé à l’étape 1, soit la valeur par défaut de 15001, soit le numéro que vous avez indiqué pour spark.databricks.service.port lorsque vous avez créé l’agrégation.

Vous devrez également générer un jeton d’accès personnel dans votre espace de travail Databricks. Les étapes de la génération du jeton se trouvent dans la documentation en ligne portant sur Databricks.

Étape 5 : configurez la connexion à l’agrégation à distance. Exécutez la commande suivante dans l’invite de commande Python :

databricks-connect configure

Acceptez la licence lorsque vous y êtes invité, puis précisez les paramètres de l’étape précédente pour vous connecter à l’agrégation à distance que vous avez créée.

Étape 6 : testez votre connexion. Exécutez la commande suivante dans l’invite de commande Python pour tester la connectivité à Databricks :

databricks-connect test

Le test va démarrer l’agrégation, si vous ne l’avez pas déjà démarré manuellement, et exécuter un certain nombre de tests pour vérifier que tous les paramètres sont configurés correctement et que Java 8 est installé sur votre machine locale. L’agrégation demeurera en fonction jusqu’au moment fixé pour son autodésactivation. Dans le terminal, vous devriez voir un message disant « All tests passed » (réussite de tous les tests) lorsque les tests sont terminés. Si vous voyez des messages d’erreur, assurez-vous que la variable d’environnement JAVA_HOME et que tous les paramètres de connexion à Databricks ont été correctement définis.

Une fois votre connexion établie et configurée, vous pouvez utiliser la puissance d’une agrégation Spark dans ArcGIS Notebooks. Pour ce faire, créez un nouveau bloc-notes dans un projet d’ArcGIS Pro, puis ajoutez le bloc de code suivant pour créer une session SparkSession :

Le bloc de code qui doit être intégré à ArcGIS Notebooks dans ArcGIS Pro pour créer une session SparkSession.

Vous pouvez ensuite utiliser les fonctions Spark dans vos scripts Python. Par exemple, vous pouvez lire un ensemble de données à partir d’un service d’entité hébergé, l’interroger et agréger une colonne à l’aide de la bibliothèque pyspark comme suit :

Le bloc de code qui doit être intégré à ArcGIS Notebooks dans ArcGIS Pro pour lire un ensemble de données à partir d’un service d’entité hébergé, l’interroger et agréger une colonne à l’aide de la bibliothèque pyspark. Une partie du résultat retourné est également affichée.

Avez-vous des idées de tâches d’ingénierie des données et d’analyse dans ArcGIS Notebooks qui pourraient profiter de la puissance du traitement distribué? Partagez-les avec nous dans les commentaires!

Ce billet a été écrit en anglais par Hossein Hosseini et peut être consulté ici.