Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Nous vous recommandons de déboguer des applications Apache Spark à distance via SSH. Pour obtenir des instructions, consultez Débogage à distance d’applications Apache Spark sur un cluster HDInsight avec Le Kit de ressources Azure pour IntelliJ via SSH.
Cet article fournit des instructions pas à pas sur l’utilisation des outils HDInsight dans le kit de ressources Azure pour IntelliJ pour envoyer un travail Spark sur un cluster HDInsight Spark, puis le déboguer à distance à partir de votre ordinateur de bureau. Pour effectuer ces tâches, vous devez effectuer les étapes générales suivantes :
- Créez un réseau virtuel Azure de site à site ou point à site. Les étapes décrites dans ce document supposent que vous utilisez un réseau de site à site.
- Créez un cluster Spark dans HDInsight qui fait partie du réseau virtuel de site à site.
- Vérifiez la connectivité entre le nœud principal du cluster et votre bureau.
- Créez une application Scala dans IntelliJ IDEA, puis configurez-la pour le débogage à distance.
- Exécutez et déboguez l’application.
Conditions préalables
- Un abonnement Azure.
- Un cluster Apache Spark dans HDInsight. Pour obtenir des instructions, consultez Création de clusters Apache Spark dans Azure HDInsight.
- Kit de développement Oracle Java. Vous pouvez l’installer à partir du site web Oracle.
- IntelliJ IDEA. Cet article utilise la version 2017.1. Vous pouvez l’installer à partir du site web JetBrains.
- HDInsight Tools dans la Boîte à outils Azure pour IntelliJ. Les outils HDInsight pour IntelliJ sont disponibles dans le cadre du Kit de ressources Azure pour IntelliJ. Pour obtenir des instructions sur l’installation d’Azure Toolkit, consultez Installer Azure Toolkit pour IntelliJ.
- Connectez-vous à votre abonnement Azure à partir d’IntelliJ IDEA. Suivez les instructions de l’utilisation du Kit de ressources Azure pour IntelliJ pour créer des applications Apache Spark pour un cluster HDInsight.
- Solution de contournement pour une exception. Lors de l’exécution de l’application Spark Scala pour le débogage à distance sur un ordinateur Windows, vous pouvez obtenir une exception. Cette exception est expliquée dans SPARK-2356 et se produit en raison d’un fichier WinUtils.exe manquant dans Windows. Pour contourner cette erreur, vous devez télécharger Winutils.exe à un emplacement tel que C :\WinUtils\bin. Ajoutez une variable d’environnement HADOOP_HOME , puis définissez la valeur de la variable sur C\WinUtils.
Étape 1 : Créer un réseau virtuel Azure
Suivez les instructions des liens suivants pour créer un réseau virtuel Azure, puis vérifiez la connectivité entre votre ordinateur de bureau et le réseau virtuel :
- Créer un réseau virtuel avec une connexion VPN de site à site à l’aide du portail Azure
- Créer un réseau virtuel avec une connexion VPN de site à site à l’aide de PowerShell
- Configurer une connexion point à site à un réseau virtuel à l’aide de PowerShell
Étape 2 : Créer un cluster HDInsight Spark
Nous vous recommandons également de créer un cluster Apache Spark dans Azure HDInsight qui fait partie du réseau virtuel Azure que vous avez créé. Utilisez les informations disponibles dans Créer des clusters Linux dans HDInsight. Dans le cadre de la configuration facultative, sélectionnez le réseau virtuel Azure que vous avez créé à l’étape précédente.
Étape 3 : Vérifier la connectivité entre le nœud principal du cluster et votre bureau
Obtenez l’adresse IP du nœud principal. Ouvrez l’interface utilisateur Ambari pour le cluster. Dans la lame du cluster, sélectionnez Tableau de bord.
Dans l’interface utilisateur d’Ambari, sélectionnez Hôtes.
Vous obtenez une liste de nœuds principaux, de nœuds worker et de nœuds zookeeper. Les nœuds principaux ont un préfixe hn*. Sélectionnez le premier nœud principal.
Dans le volet Résumé en bas de la page qui s’ouvre, copiez l’adresse IP du nœud principal et le nom d’hôte.
Ajoutez l’adresse IP et le nom d’hôte du nœud principal au fichier hosts sur l’ordinateur sur lequel vous souhaitez exécuter et déboguer à distance le travail Spark. Cela vous permet de communiquer avec le nœud principal à l’aide de l’adresse IP, ainsi que du nom d’hôte.
a) Ouvrez un fichier bloc-notes avec des autorisations élevées. Dans le menu Fichier , sélectionnez Ouvrir, puis recherchez l’emplacement du fichier hosts. Sur un ordinateur Windows, l’emplacement est C :\Windows\System32\Drivers\etc\hosts.
b. Ajoutez les informations suivantes au fichier hosts :
# For headnode0 192.xxx.xx.xx nitinp 192.xxx.xx.xx nitinp.lhwwghjkpqejawpqbwcdyp3.gx.internal.cloudapp.net # For headnode1 192.xxx.xx.xx nitinp 192.xxx.xx.xx nitinp.lhwwghjkpqejawpqbwcdyp3.gx.internal.cloudapp.netÀ partir de l’ordinateur que vous avez connecté au réseau virtuel Azure utilisé par le cluster HDInsight, vérifiez que vous pouvez effectuer un test ping sur les nœuds principaux à l’aide de l’adresse IP, ainsi que du nom d’hôte.
Utilisez SSH pour vous connecter au nœud principal du cluster en suivant les instructions de connexion à un cluster HDInsight à l’aide de SSH. À partir du nœud principal du cluster, effectuez un test ping sur l’adresse IP de l’ordinateur de bureau. Testez la connectivité aux deux adresses IP affectées à l’ordinateur :
- Une pour la connexion réseau
- Un pour le réseau virtuel Azure
Répétez les étapes pour l’autre nœud principal.
Étape 4 : Créer une application Apache Spark Scala à l’aide de HDInsight Tools dans le Kit de ressources Azure pour IntelliJ et la configurer pour le débogage à distance
Ouvrez IntelliJ IDEA et créez un projet. Dans la boîte de dialogue Nouveau projet, procédez comme suit :
a) Sélectionnez HDInsight>Spark sur HDInsight (Scala).
b. Cliquez sur Suivant.
Dans la boîte de dialogue Nouveau projet suivant, procédez comme suit, puis sélectionnez Terminer :
Entrez un nom et un emplacement pour le projet.
Dans la liste déroulante Project SDK (SDK du projet), sélectionnez Java 1.8 pour le cluster Spark 2.x, ou sélectionnez Java 1.7 pour le cluster Spark 1.x.
Dans la liste déroulante des versions Spark , l’Assistant Création de projet Scala intègre la version appropriée pour le SDK Spark et le SDK Scala. Si la version du cluster Spark est antérieure à la version 2.0, sélectionnez Spark 1.x. Sinon, sélectionnez Spark2.x. Cet exemple utilise Spark 2.0.2 (Scala 2.11.8).
Le projet Spark crée automatiquement un artefact. Pour afficher l’artefact, procédez comme suit :
a) Dans le menu Fichier , sélectionnez Structure du projet.
b. Dans la boîte de dialogue Project Structure, sélectionnez Artifacts pour voir l’artefact par défaut qui a été créé. Vous pouvez également créer votre propre artefact en sélectionnant le signe plus (+).
Ajoutez des bibliothèques à votre projet. Pour ajouter une bibliothèque, procédez comme suit :
a) Cliquez avec le bouton droit sur le nom du projet dans l’arborescence du projet, puis sélectionnez Ouvrir les paramètres du module.
b. Dans la boîte de dialogue Structure du projet , sélectionnez Bibliothèques, sélectionnez le symbole (+), puis Sélectionnez À partir de Maven.
v. Dans la boîte de dialogue Télécharger la bibliothèque à partir du référentiel Maven , recherchez et ajoutez les bibliothèques suivantes :
org.scalatest:scalatest_2.10:2.2.1org.apache.hadoop:hadoop-azure:2.7.1
Copiez
yarn-site.xmletcore-site.xmldu nœud principal du cluster et ajoutez-les au projet. Utilisez les commandes suivantes pour copier les fichiers. Vous pouvez utiliser Cygwin pour exécuter les commandes suivantesscppour copier les fichiers à partir des nœuds principaux du cluster :scp <ssh user name>@<headnode IP address or host name>://etc/hadoop/conf/core-site.xml .Étant donné que nous avons déjà ajouté l’adresse IP du nœud principal du cluster et les noms d’hôte pour le fichier hosts sur le bureau, nous pouvons utiliser les
scpcommandes de la manière suivante :scp sshuser@nitinp:/etc/hadoop/conf/core-site.xml . scp sshuser@nitinp:/etc/hadoop/conf/yarn-site.xml .Pour ajouter ces fichiers à votre projet, copiez-les sous le dossier /src dans l’arborescence de votre projet, par exemple
<your project directory>\src.Mettez à jour le
core-site.xmlfichier pour apporter les modifications suivantes :a) Remplacez la clé chiffrée. Le
core-site.xmlfichier inclut la clé chiffrée du compte de stockage associé au cluster. Dans lecore-site.xmlfichier que vous avez ajouté au projet, remplacez la clé chiffrée par la clé de stockage réelle associée au compte de stockage par défaut. Pour plus d’informations, consultez Gérer les clés d’accès au compte de stockage.<property> <name>fs.azure.account.key.hdistoragecentral.blob.core.windows.net</name> <value>access-key-associated-with-the-account</value> </property>b. Supprimez les entrées suivantes de
core-site.xml:<property> <name>fs.azure.account.keyprovider.hdistoragecentral.blob.core.windows.net</name> <value>org.apache.hadoop.fs.azure.ShellDecryptionKeyProvider</value> </property> <property> <name>fs.azure.shellkeyprovider.script</name> <value>/usr/lib/python2.7/dist-packages/hdinsight_common/decrypt.sh</value> </property> <property> <name>net.topology.script.file.name</name> <value>/etc/hadoop/conf/topology_script.py</value> </property>v. Enregistrez le fichier.
Ajoutez la classe principale pour votre application. Dans l’Explorateur de projets, cliquez avec le bouton droit sur src, pointez sur Nouveau, puis sélectionnez Classe Scala.
Dans la boîte de dialogue Créer une classe Scala , indiquez un nom, sélectionnez Objet dans la zone Type , puis sélectionnez OK.
Dans le
MyClusterAppMain.scalafichier, collez le code suivant. Ce code crée le contexte Spark et ouvre uneexecuteJobméthode à partir de l’objetSparkSample.import org.apache.spark.{SparkConf, SparkContext} object SparkSampleMain { def main (arg: Array[String]): Unit = { val conf = new SparkConf().setAppName("SparkSample") .set("spark.hadoop.validateOutputSpecs", "false") val sc = new SparkContext(conf) SparkSample.executeJob(sc, "wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv", "wasb:///HVACOut") } }Répétez les étapes 8 et 9 pour ajouter un nouvel objet Scala appelé
*SparkSample. Ajoutez le code suivant à cette classe. Ce code lit les données du HVAC.csv (disponible dans tous les clusters HDInsight Spark). Il récupère les lignes qui n’ont qu’un seul chiffre dans la septième colonne du fichier CSV, puis écrit la sortie dans /HVACOut sous le conteneur de stockage par défaut du cluster.import org.apache.spark.SparkContext object SparkSample { def executeJob (sc: SparkContext, input: String, output: String): Unit = { val rdd = sc.textFile(input) //find the rows which have only one digit in the 7th column in the CSV val rdd1 = rdd.filter(s => s.split(",")(6).length() == 1) val s = sc.parallelize(rdd.take(5)).cartesian(rdd).count() println(s) rdd1.saveAsTextFile(output) //rdd1.collect().foreach(println) } }Répétez les étapes 8 et 9 pour ajouter une nouvelle classe appelée
RemoteClusterDebugging. Cette classe implémente l’infrastructure de test Spark utilisée pour déboguer les applications. Ajoutez le code suivant à la classeRemoteClusterDebugging:import org.apache.spark.{SparkConf, SparkContext} import org.scalatest.FunSuite class RemoteClusterDebugging extends FunSuite { test("Remote run") { val conf = new SparkConf().setAppName("SparkSample") .setMaster("yarn-client") .set("spark.yarn.am.extraJavaOptions", "-Dhdp.version=2.4") .set("spark.yarn.jar", "wasb:///hdp/apps/2.4.2.0-258/spark-assembly-1.6.1.2.4.2.0-258-hadoop2.7.1.2.4.2.0-258.jar") .setJars(Seq("""C:\workspace\IdeaProjects\MyClusterApp\out\artifacts\MyClusterApp_DefaultArtifact\default_artifact.jar""")) .set("spark.hadoop.validateOutputSpecs", "false") val sc = new SparkContext(conf) SparkSample.executeJob(sc, "wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv", "wasb:///HVACOut") } }Il y a quelques points importants à noter :
- Pour
.set("spark.yarn.jar", "wasb:///hdp/apps/2.4.2.0-258/spark-assembly-1.6.1.2.4.2.0-258-hadoop2.7.1.2.4.2.0-258.jar"), vérifiez que le fichier JAR d’assembly Spark est disponible sur le stockage de cluster sur le chemin spécifié. - Pour
setJars, spécifiez l’emplacement où le fichier JAR d’artefact est créé. En règle générale, c’est<Your IntelliJ project directory>\out\<project name>_DefaultArtifact\default_artifact.jar.
- Pour
Dans la classe
*RemoteClusterDebugging, cliquez avec le bouton droit sur le mot-clétest, puis sélectionnez Create RemoteClusterDebugging Configuration (Créer une configuration RemoteClusterDebugging).
Dans la boîte de dialogue Créer une configuration remoteClusterDebugging , indiquez un nom pour la configuration, puis sélectionnez Type de test comme nom de test. Conservez toutes les autres valeurs comme paramètres par défaut. Sélectionnez Appliquer, puis ok.
Vous devez maintenant voir une liste déroulante de configuration d’exécution à distance dans la barre de menus.
Étape 5 : Exécuter l’application en mode débogage
Dans votre projet IntelliJ IDEA, ouvrez
SparkSample.scalaet créez un point d’arrêt à côté deval rdd1. Dans le menu contextuel Create Breakpoint for (Créer un point d’arrêt pour), sélectionnez line in function executeJob (ligne dans la fonction executeJob).
Pour exécuter l’application, cliquez sur le bouton Debug Run (Exécuter le débogage) situé en regard de la liste déroulante de configuration Remote Run (Exécution à distance).
Lorsque l’exécution du programme atteint le point d’arrêt, vous voyez un onglet Débogueur dans le volet inférieur.
Pour ajouter une montre, sélectionnez l’icône (+).
Dans cet exemple, l’application s’est rompue avant la création de la variable
rdd1. À l’aide de cette montre, nous pouvons voir les cinq premières lignes de la variablerdd. Sélectionnez Enter (Entrer).
Ce que vous voyez dans l’image précédente est que lors de l’exécution, vous pouvez interroger les téraoctets de données et déboguer la progression de votre application. Par exemple, dans la sortie affichée dans l’image précédente, vous pouvez voir que la première ligne de la sortie est un en-tête. En fonction de cette sortie, vous pouvez modifier votre code d’application pour ignorer la ligne d’en-tête, si nécessaire.
Vous pouvez maintenant sélectionner l’icône Reprendre le programme pour poursuivre l’exécution de votre application.
Si l’application se termine correctement, vous devez voir la sortie suivante :
Étapes suivantes
Scénarios
- Apache Spark avec BI : Effectuer une analyse de données interactive à l’aide de Spark dans HDInsight avec des outils décisionnels
- Apache Spark avec Machine Learning : Utiliser Spark dans HDInsight pour analyser la température d’un bâtiment à l’aide de données issues des systèmes de chauffage, de ventilation et de climatisation
- Apache Spark avec Machine Learning : utiliser Spark dans HDInsight pour prédire les résultats de l’inspection d’aliments
- Analyse des journaux de site web à l’aide d’Apache Spark dans HDInsight
Création et exécution d’applications
- Créer une application autonome avec Scala
- Exécuter des tâches à distance avec Apache Livy sur un cluster Apache Spark
Outils et extensions
- Utiliser Azure Toolkit for IntelliJ afin de créer des applications Apache Spark pour un cluster HDInsight
- Utiliser le Kit de ressources Azure pour IntelliJ pour déboguer des applications Apache Spark à distance via SSH
- Utiliser HDInsight Tools dans Azure Toolkit for Eclipse pour créer des applications Apache Spark
- Utiliser des blocs-notes Apache Zeppelin avec un cluster Apache Spark sur HDInsight
- Noyaux disponibles pour Jupyter Notebook dans un cluster Apache Spark dans HDInsight
- Utiliser des packages externes avec des blocs-notes Jupyter
- Installer Jupyter sur votre ordinateur et se connecter à un cluster HDInsight Spark