[Big Data] HDInsight : implémentation et utilisation d’un cluster Spark

Ce billet montre comment implémenter un cluster Spark – que ce soit via Azure Management Portal ou Azure Powershell – et y manipuler des données dans un environnement HDInsight avec Scala ou le SQL.

Pour comprendre les concepts associés aux Big Data,et à HDInsight, vous pouvez aller ici.

Avant de commencer…

Le scénario est résolument simple : créer un cluster Spark de plusieurs nœuds et y lancer quelques requêtes Scala ou SQL.

Le but de ce billet n’est pas de tester les performances relatives à l’utilisation d’une solution comme Spark, mais plutôt de s’initier à son utilisation.

On supposera :

Entrée dans le vif du sujet…

Implémentation d’un cluster Spark

    … avec Azure Management Portal

Pour créer un cluster Spark, suivez les étapes suivantes :

  • Accès au service HDInsight.

Faites un clic sur le service HDInsight, situé dans le panneau de navigation à gauche de l’Azure Management Portal, puis cliquez sur Create an HDInsight cluster :


Cela ouvrira, à partir du bas, le panneau contenant les options de création d’un cluster HDInsight :


Il existe 2 possibilités de création : la création rapide (Hadoop, HBase, Storm…), ou celle personnalisée (Custom Create). Nous allons opter pour le Custom Create.

UPDATE: depuis le 10/07/2015, il est désormais possible de créer un cluster Spark via un menu SPARK, comme pour Hadoop, HBase, Storm… Plus de détails ici: https://channel9.msdn.com/Shows/Azure-Friday/Announcing-Apache-Spark-on-Azure-HDInsight.

  • Lancement de la création personnalisée.

Après clic sur Custom Create, une fenêtre modale interactive va s’ouvrir et permettre la création du cluster étape par étape :

  • Etape 1 – Spécification des informations détaillées du cluster.


        Quelques remarques sur la 1ère étape:

  • Le nom du cluster doit être globalement unique.
  • Le type de cluster permet d’indiquer la nature du cluster (Hadoop, Storm, HBase, … à la date d’écriture de ce billet).
  • Le type de système d’exploitation est par défaut la dernière version stable de Windows Server. Il est néanmoins possible de choisir la distribution Linux Ubuntu (à l’heure de l’écriture du billet).
  • La version HDInsight détermine la version du cluster à créer. Par défaut, la version la plus récente est choisie (et recommandée). Pour plus d’informations sur les versions, vous pouvez aller ici : http://azure.microsoft.com/en-us/documentation/articles/hdinsight-component-versioning/.
  • Etape 2 – Configuration du cluster.


Quelques remarques sur la 2ème étape:

  • Au moins 2 nœuds sont recommandés pour de la haute-disponibilité. Le nombre maximal de nœuds dépend des options souscrites lors de l’inscription à Windows Azure auprès de Microsoft. Plus de détails ici : http://azure.microsoft.com/en-us/pricing/details/hdinsight/.
  • La région (ou le réseau virtuel) indique l’endroit où sera stocké le cluster. Il doit être identique à celui du compte de stockage préalablement créé.
  • Et enfin :
    • Le head node est le nœud principal qui contrôle les nœuds travailleurs.
    • Les data nodes sont les nœuds travailleurs qui exécuteront les tâches déléguées par le nœud principal.
  • Etape 3 – Configuration des informations d’authentification au cluster.


        Quelques remarques sur la 3ème étape :

  • L’username HTTP correspond au compte – à créer – utilisé pour accéder au cluster.
  • Le mot-de-passe de l’username HTTP doit être suffisamment fort.
  • L’option Hive/Oozie Metastore (laissée déchochée dans notre démonstration) permet d’utiliser une base de données SQL Azure comme zone de stockage des métadonnées Hive/Oozie. L’intérêt est de permettre une rétention des métadonnées Hive/Oozie de façon permanente, y compris après suppression du cluster.
  • L’activation du bureau à distance pour le cluster permet de préconfigurer à cette étape les accès RDP.


  • Etape 4 – Sélection du compte de stockage.


Quelques remarques sur la 4ème étape :

  • Il existe 3 options de sélection d’un compte de stockage : créer un nouveau compte de stockage, utiliser un compte de stockage issu d’une autre inscription et utiliser un compte de stockage existant (comme dans notre démonstration).
  • Le nom du compte de stockage est dépendant de l’option de sélection choisie.
  • Le container de stockage par défaut (créé avec le compte de stockage), où seront stockées les données.
  • Etape 5 – Ajout d’actions de scripts.


C’est à cette étape que les choses sérieuses commencent.

Il s’agit d’une option de configuration permettant de produire des actions de scripts Powershell pour une personnalisation souvent plus avancée (i.e., ajout de modules R ou Spark, etc…). Son utilisation n’est possible qu’à partir de la version 3.1 de HDInsight.

Plus de détails ici : http://azure.microsoft.com/en-us/documentation/articles/hdinsight-hadoop-customize-cluster/. Dans notre démonstration, nous allons ignorer cette étape.

Cliquez sur add script action, puis remplissez le formulaire :


Quelques remarques :

  • Name permet d’indiquer le nom de l’action de script. Dans notre cas, il a été arbitrairement appelé SparkInstaller.
  • Script URI permet de spécifier l’URI (Uniform Resource Identifier) pour le script invoqué pour le paramétrage du cluster. Un script est disponible ici : https://hdiconfigactions.blob.core.windows.net/sparkconfigactionv03/spark-installer-v03.ps1,
    au sein d’un espace de stockage WASB en lecture seule.
  • Node Type permet sélectionner le type de nœuds sur lequel lancer le script (All nodes, Head nodes only ou Worker nodes only).
  • Parameters permet de donner des valeurs de paramètres pour le script à lancer. Dans le cas d’une installation de Spark, ce n’est pas nécessaire.
  • Validation et lancement de la création du cluster.

Dans la dernière étape de configuration du cluster, cliquez sur le bouton de validation. Cela lancera le processus de création du cluster Hadoop :


Avec possibilité de suivre en temps réel et en détail le statut de la progression (en cliquant sur )
:


Ou au sein du service HDInsight du panneau de navigation de gauche :


Si tout va bien, nous obtiendrons les résultats suivants :



    … avec Azure Powershell

Azure Powershell propose les principaux Cmdlets suivantes pour créer et gérer un cluster Spark:

Cmdlet Description
New-AzureHDInsightCluster Crée un nouveau cluster Spark HDInsight au sein de l’abonnement Azure courant (ou spécifié).
New-AzureHDInsightClusterConfig Crée une configuration de cluster Spark HDInsight avec différents paramètres tels que le nombre de nœuds, la taille des nœuds,… à utiliser lors de la création dudit cluster.
Add-AzureHDInsightConfigValues Ajoute des valeurs de configuration à la configuration courante du cluster Spark HDInsight.
Get-AzureHDInsightCluster Fournit la liste des clusters d’un abonnement Azure, et leurs informations détaillées.
Get-AzureHDInsightProperties Fournit les propriétés d’un service Azure HDInsight, comme le nombre de clusters Hadoop,…
Use-AzureHDInsightCluster Sélectionne le cluster Spark HDInsight à utiliser pour un job.
Remove-AzureHDInsightCluster Supprime un cluster Spark HDInsight.
Add-AzureHDInsightScriptAction Ajoute une action de script pour la création de modules R, Spark…

Pour créer un cluster Spark via Azure Powershell, suivez les étapes suivantes :

  • Lancement du script de création d’un cluster Spark.

Copiez-collez le script ci-dessus au sein dans l’invite de commandes ou une fenêtre de script Windows Powershell ISE (dans tous les cas, après avoir correctement spécifié les valeurs de paramètres, dont le nom de l’abonnement Azure) :

# Spécification des informations de base
$subscriptionName = "<SubscriptionName>" # Nom de l'abonnement Azure
$clusterName = "Sp4rkCluster" # Nom du cluster HDInsight
$storageAccountName = "hd1nst0rage" # Nom du compte de stockage Azure où est stocké le container par défaut
$storageAccountKey = Get-AzureStorageKey -StorageAccountName $storageAccountName | %{$_.Primary} # Clé du compte de stockage
$storageAccountLocation = "West Europe" # Localisation du compte de stockage à utiliser
$clusterNodes = "4" # Number of nodes in the HDInsight cluster
$version = "3.1" # Sans spécification, la dernière version sera choisie par défaut

 # Spécification des options de configuration
Select-AzureSubscription $subscriptionName
$config = New-AzureHDInsightClusterConfig -ClusterSizeInNodes $clusterNodes
$config.DefaultStorageAccount.StorageAccountName="$storageAccountName.blob.core.windows.net"
$config.DefaultStorageAccount.StorageAccountKey=$storageAccountKey

 # Ajout de l'action de script avec les options de configuration
$config = Add-AzureHDInsightScriptAction -Config $config -Name "SparkInstaller" -ClusterRoleCollection HeadNode -Uri https://hdiconfigactions.blob.core.windows.net/sparkconfigactionv03/spark-installer-v03.ps1

 # Lancement de l'action de script, qui va initier la création du cluster Spark
New-AzureHDInsightCluster -Config $config -Name $clusterName -Location $storageAccountLocation -Version $version

Sitôt le script lancé, une boîte modale d’authentification va s’ouvrir :


Il faut entrer un (nouveau) compte d’accès au cluster à créer, ainsi qu’un mot-de-passe :



La création (ou approvisionnement) du cluster va se lancer. Une fenêtre ancrée au sein de Windows Powershell ISE va indiquer la progression de l’opération, comme ci-dessous :


Sitôt la création du cluster terminée, un message de sortie va s’afficher au sein de Windows Powershell ISE, avec quelques informations élémentaires en guise de synthèse :


  • Vérification de la création du cluster Hadoop HDInsight.

Lancez le script suivant pour vérifier si le cluster a été correctement créé :

Get-AzureHDInsightCluster -Name "Sp4rkCluster"

Accès à la console de requêtes HDInsight

Il est possible d’accéder à la console de requêtes du cluster Spark fraîchement créé de diverses manières :

  • En allant à l’URL suivante : https://.azurehdinsight.net//, où est le nom du cluster Spark (dans notre cas, Sp4rkCluster).

    A noter qu’une boîte modale d’authentification s’ouvrira, où il faudra spécifier le login et le mot-de-passe.

  • En cliquant sur Spark Dashboard en bas de page de l’interface Azure Management Portal, après avoir pointé sur le cluster (à partir de la section HDInsight, ou l’interface d’accueil All items) :


L’interface d’accueil a l’aperçu suivant :


Ainsi, il est possible de suivre les jobs et de consulter et tester des tutoriels et exemples.

Accès à l’interface de commande Shell de Spark

Allez dans la zone de configuration du cluster Spark en suivant les étapes suivantes :

  • Accès au dashboard du cluster.


  • Lancement de la session RDP.


Après lancement du fichier RDP téléchargé, un clic sur celui-ci va lancer une boîte modale d’authentification :


La suite est simple :

  • Lancez l’interface Hadoop Command Line (HCL).


  • Au sein de l’HCL, allez dans le dossier C:\apps\dist\spark-x.x.x puis lancez la commande suivante pour démarrer le Shell Spark.
.\bin\spark-shell --master yarn

Cela donnera cet exemple d’aperçu qui indique le déroulement de la configuration de l’interface de commande Shell Spark:


Un prompteur Scala sera affiché en fin d’exécution :


  • Testez une requête.
    • En Scala.

Au sein du dossier example/data, du Azure Storage Blob du cluster, se trouvent quelques exemples de fichiers pouvant être requêtés pour des tests. La requête ci-dessous calcule le nombre d’occurrences de chaque mot du fichier exemple davinci.txt :

val file = sc.textFile("/example/data/gutenberg/davinci.txt")
val counts = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
counts.toArray().foreach(println)

Son lancement donnera l’aperçu suivant :


  • En SQL.

Tout d’abord, exécutez la ligne de commande suivante permettant d’utiliser Hive pour le requêtage SQL :

val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)

Lancez la requête suivante qui permet d’interroger la table exemple hivesampletable en filtrant les informations en fonction de la France et en limitant le résultat à 50 lignes :

hiveContext.sql("""SELECT * FROM hivesampletable WHERE country="France" LIMIT 50""").collect().foreach(println)


Pour aller plus loin…

Gardez un œil ici. D’autres articles autour du Big Data et de HDInsight y seront pondus.

Pour en savoir un peu plus sur les Azure Powershell Cdmlets, vous pouvez également aller ici : http://msdn.microsoft.com/en-us/library/azure/jj554330.aspx.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s