Le Machine Learning avec Spark grâce à HDInsight – 1ère partie


Cela faisait longtemps que nous n'avions pas eu l'occasion de partager sur ce blog.

Pour autant, si vous êtes une fidèle lectrice ou un fidèle lecteur de ce blog depuis ses débuts, vous êtes sûrement déjà familier avec le service Azure HDInsight qui vous permet de disposer à la demande d'un cluster Hadoop et Spark dans le Cloud.

Ainsi, A ce jour encore, Azure HDInsight est la seule offre de cloud Apache Hadoop entièrement gérée qui vous offre des clusters d'analyse open source optimisés pour Spark, Hive, MapReduce, HBase, Storm, Kafka et Microsoft R Server, avec un contrat SLA proposant une disponibilité de 99,9 %.

Dans ce billet, nous allons ici nous concentrer sur l'utilisation d'Apache Spark pour Azure HDInsight au travers du déploiement d'un cluster pour implémenter un modèle de Machine Learning. Cette première partie s'intéresse plus spécifiquement sur le déploiement du cluster en tant que tel.

J'en profite pour remercier très sincèrement Anaig Maréchal actuellement en stage au sein de l'équipe pour cette contribution 🙂

Spark : quésaco ?

    Apache Spark est un Framework Open Source de la fondation Apache permettant d'effectuer des opérations parallélisées directement en mémoire ; ce qui le rend jusqu'à 100 fois plus rapide que le MapReduce Hadoop.

Les applications Spark peuvent être écrites en Java, Scala, Python et R. L'avantage de déployer un modèle d'apprentissage automatique (Machine Learning) en s'appuyant sur Spark est donc de pouvoir utiliser un gros jeu de données tout en conservant une durée de calcul optimale.

Création d'un cluster Spark avec Azure

Tout d'abord, connectez-vous au portail Azure à l'adresse https://portal.azure.com. (Si vous ne disposez pas d'ores et déjà d'un abonnement Azure, vous pouvez créer un compte Azure gratuit ici. Ce compte vous permet d'explorer n'importe quelle combinaison de services Azure pendant 30 jours, de commencer gratuitement pour cela avec un crédit de 170 € et/ou de poursuivre avec les options gratuites d'Azure.)

Azure HDInsight est disponible dans la section Intelligence + analytics au niveau de la place de marché d'Azure ou tout simplement en tapant « HDInsight » dans la barre de recherche.

La première étape consiste à nommer le cluster puis à configurer le nom d'utilisateur et le mot de passe pour la connexion au cluster et la connexion SSH.

Il faut donc choisir un cluster de type Spark (vous vous en seriez douté(e) ;-)), qui est disponible sous Linux uniquement.

Pour la suite de cette illustration, nous avons choisi la version stable Spark 2.0.2. La dernière version disponible à date est Spark 2.1.0. (Les différents composants disponibles dans Azure HDInsight et les versions associées sont décrits dans l'article What are the Hadoop components and versions available with HDInsight?.)

Le cluster créé doit être lié à un compte de stockage Azure où seront placés les fichiers de configuration et où l'on pourra également stocker les jeux de données à utiliser.

Enfin, il suffit de définir une taille de cluster satisfaisant les besoins de notre application. Le tarif par heure est alors affiché. Ici, nous choisissons des nœuds de petite taille car nous allons travailler (dans la seconde partie de ce billet) sur un jeu de données de test, de faible volume.

Le cluster ainsi configuré met en général entre 15 et 20 minutes pour se créer. On le retrouve ensuite facilement, ainsi que le compte de stockage, dans la liste des ressources.

Utilisation du compte de stockage du cluster

Le compte de stockage permet d'accéder à une collection de conteneurs blobs, dans lesquels on peut placer des fichiers de tous types de formats. On peut déjà y trouver un conteneur avec les fichiers de configurations du cluster, dans lequel on pourra par la suite ajouter les données que l'on voudra utiliser pour notre application. La figure suivante montre un exemple de compte de stockage Azure :

Afin de gérer ce compte de stockage, on peut utiliser une des nombreuses applications bureau existantes qui permettent de se connecter au compte et de notamment l'alimenter en données depuis ses fichiers locaux. L'article Azure Storage Client Tools liste les solutions disponibles à l'image de Microsoft Azure Storage Explorer.

En termes d'accès depuis le cluster, WASB (Windows Azure Storage Blob) permet de créer une couche d'abstraction pour l'accès à ces blobs. Ceci permet la persistance des données même quand le cluster n'existe pas ou plus, et permet à plusieurs clusters et applications d'accéder à une même donnée au même moment. WASB est, dans la pratique, une extension basée sur l'API HDFS (Hadoop Distributed File System), un des composants clés de Hadoop. La différence avec un système Hadoop classique est que les données sont chargées depuis le compte de stockage et non plus depuis le disque local, tout en conservant des performances similaires. Pour de plus amples informations, vous pouvez consulter le billet Understanding WASB and Hadoop Storage in Azure.

Enfin, au registre de la sécurité, le service de stockage Azure offre pour ces blobs une capacité de chiffrement au repos en AES-256 (avec des clés gérées par le service (en disponibilité générale) ou ses propres clés (pour les blobs en version préliminaire limitée), il est désormais possible de protéger par voie de conséquence ses données au repos avec HD Insight. Pour de plus amples informations, vous pouvez consulter les billets Announcing general availability of Storage Service Encryption for Azure File Storage et Announcing Storage Service Encryption with Customer Managed Keys limited preview., ainsi que le guide de la sécurité du stockage ici.

« Gestion » du cluster Spark

En cliquant sur le cluster, on a accès, entre autres, à son état, à de la documentation et à un outil de mise à l'échelle qui permet de modifier le nombre de nœuds ou leur taille.

Depuis la page du cluster, on peut également accéder à un tableau de bord Ambari qui donne accès à tout sorte d'informations sur le cluster, ainsi qu'à un bloc note Jupyter qui permet d'exécuter des lignes de code et dont nous parlerons dans la seconde partie de ce billet.

Arrêt du cluster

Pour arrêter le cluster, il convient de le supprimer depuis sa page principale. Si vous souhaitez seulement couper l'exécution momentanément pour reprendre votre travail plus tard, il existe des procédures permettant de sauvegarder la configuration du cluster pour la réutiliser lors du prochain déploiement.

Au moment de la création du cluster, il est possible de cliquer sur Download template and parameters pour créer un modèle Resource Manager avec toutes les configurations choisies.

Pour de plus amples informations, vous pouvez consulter l'article Déployer des ressources à l'aide de modèles Resource Manager et d'Azure PowerShell.

Cette option est également disponible sur la page d'accueil du cluster une fois créé, en cliquant sur Script d'automatisation dans la section Paramètres du menu.

Une autre façon de redéployer un cluster est de se rendre dans la liste des groupes de ressources.

Pour un groupe de ressources donné, on aller dans Déploiements de la section Paramètres du menu. On y trouve le récapitulatif de chacun des précédents déploiements, en les sélectionnant dans le menu. Il est alors possible de les redéployer très facilement. Seul un nouveau mot de passe est nécessaire, les autres modifications sont optionnelles.

Ceci conclut cette première partie du billet. Vous pouvez consulter à titre de complément l'article Prise en main : Créer un cluster Apache Spark dans HDInsight et exécuter des requêtes interactives Spark SQL.

Dans la seconde partie, nous utiliserons ce cluster Spark pour mettre en place un modèle d'apprentissage automatique (Machine Learning) en Python.

Comments (0)

Skip to main content