Azure Toolkit voor IntelliJ gebruiken om fouten op te sporen in Apache Spark-toepassingen op afstand in HDInsight via VPN
U wordt aangeraden fouten op te sporen in Apache Spark-toepassingen op afstand via SSH. Zie Apache Spark-toepassingen op afstand opsporen in een HDInsight-cluster met Azure Toolkit voor IntelliJ via SSH voor instructies.
Dit artikel bevat stapsgewijze instructies voor het gebruik van de HDInsight-hulpprogramma's in Azure Toolkit voor IntelliJ om een Spark-taak in te dienen in een HDInsight Spark-cluster en fouten op te sporen vanaf uw desktopcomputer. Als u deze taken wilt uitvoeren, moet u de volgende stappen op hoog niveau uitvoeren:
- Een site-naar-site- of punt-naar-site-virtueel Azure-netwerk maken. Bij de stappen in dit document wordt ervan uitgegaan dat u een site-naar-site-netwerk gebruikt.
- Maak een Spark-cluster in HDInsight dat deel uitmaakt van het virtuele site-naar-site-netwerk.
- Controleer de verbinding tussen het hoofdknooppunt van het cluster en uw bureaublad.
- Maak een Scala-toepassing in IntelliJ IDEA en configureer deze voor externe foutopsporing.
- De toepassing uitvoeren en fouten opsporen.
Vereisten
- Een Azure-abonnement. Zie Een gratis proefversie van Azure krijgen voor meer informatie.
- Een Apache Spark-cluster in HDInsight. Zie Apache Spark-clusters maken in Azure HDInsight voor instructies.
- Oracle Java Development Kit. U kunt deze installeren vanaf de Oracle-website.
- IntelliJ IDEA. In dit artikel wordt versie 2017.1 gebruikt. U kunt het installeren vanaf de JetBrains-website.
- HDInsight Tools in Azure Toolkit voor IntelliJ. HDInsight-hulpprogramma's voor IntelliJ zijn beschikbaar als onderdeel van Azure Toolkit voor IntelliJ. Zie Azure Toolkit voor IntelliJ installeren voor instructies voor het installeren van de Azure-toolkit.
- Meld u aan bij uw Azure-abonnement vanuit IntelliJ IDEA. Volg de instructies in Azure Toolkit voor IntelliJ gebruiken om Apache Spark-toepassingen te maken voor een HDInsight-cluster.
- Tijdelijke oplossing voor uitzonderingen. Tijdens het uitvoeren van de Spark Scala-toepassing voor externe foutopsporing op een Windows-computer krijgt u mogelijk een uitzondering. Deze uitzondering wordt uitgelegd in SPARK-2356 en treedt op als gevolg van een ontbrekend WinUtils.exe-bestand in Windows. Als u deze fout wilt omzeilen, moet u Winutils.exe downloaden naar een locatie zoals C:\WinUtils\bin. Voeg een HADOOP_HOME omgevingsvariabele toe en stel vervolgens de waarde van de variabele in op C\WinUtils.
Stap 1: Een virtueel Azure-netwerk maken
Volg de instructies in de volgende koppelingen om een virtueel Azure-netwerk te maken en controleer vervolgens de connectiviteit tussen uw desktopcomputer en het virtuele netwerk:
- Een VNet met een site-naar-site-VPN-verbinding maken met behulp van Azure Portal
- Een VNet met een site-naar-site-VPN-verbinding maken met behulp van PowerShell
- Een punt-naar-site-verbinding met een virtueel netwerk configureren met behulp van PowerShell
Stap 2: een HDInsight Spark-cluster maken
U wordt aangeraden ook een Apache Spark-cluster te maken in Azure HDInsight dat deel uitmaakt van het virtuele Azure-netwerk dat u hebt gemaakt. Gebruik de informatie die beschikbaar is in Op Linux gebaseerde clusters maken in HDInsight. Selecteer als onderdeel van de optionele configuratie het virtuele Azure-netwerk dat u in de vorige stap hebt gemaakt.
Stap 3: De verbinding tussen het hoofdknooppunt van het cluster en het bureaublad controleren
Haal het IP-adres van het hoofdknooppunt op. Open de Ambari-gebruikersinterface voor het cluster. Selecteer Dashboard op de clusterblade.
Selecteer Hosts in de Ambari-gebruikersinterface.
U ziet een lijst met hoofdknooppunten, werkknooppunten en zookeeper-knooppunten. De hoofdknooppunten hebben een hn* voorvoegsel. Selecteer het eerste hoofdknooppunt.
Kopieer in het deelvenster Samenvatting onder aan de pagina die wordt geopend het IP-adres van het hoofdknooppunt en de hostnaam.
Voeg het IP-adres en de hostnaam van het hoofdknooppunt toe aan het hostbestand op de computer waarop u de Spark-taak wilt uitvoeren en op afstand fouten wilt opsporen. Hiermee kunt u communiceren met het hoofdknooppunt met behulp van het IP-adres, evenals de hostnaam.
a. Open een Kladblok-bestand met verhoogde machtigingen. Selecteer Openen in het menu Bestand en zoek vervolgens de locatie van het hosts-bestand. Op een Windows-computer is de locatie C:\Windows\System32\Drivers\etc\hosts.
b. Voeg de volgende informatie toe aan het hosts-bestand :
# 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
Controleer vanaf de computer die u hebt verbonden met het virtuele Azure-netwerk dat wordt gebruikt door het HDInsight-cluster of u de hoofdknooppunten kunt pingen met behulp van het IP-adres en de hostnaam.
Gebruik SSH om verbinding te maken met het hoofdknooppunt van het cluster door de instructies in Verbinding maken te volgen op een HDInsight-cluster met behulp van SSH. Ping vanaf het hoofdknooppunt van het cluster het IP-adres van de desktopcomputer. Test de connectiviteit met beide IP-adressen die aan de computer zijn toegewezen:
- Eén voor de netwerkverbinding
- Een voor het virtuele Azure-netwerk
Herhaal de stappen voor het andere hoofdknooppunt.
Stap 4: Een Apache Spark Scala-toepassing maken met behulp van HDInsight Tools in Azure Toolkit voor IntelliJ en deze configureren voor externe foutopsporing
Open IntelliJ IDEA en maak een nieuw project. Voer in het dialoogvenster Nieuw project de volgende handelingen uit:
a. Selecteer HDInsight>Spark in HDInsight (Scala).
b. Selecteer Volgende.
Ga als volgt te werk in het volgende dialoogvenster Nieuw project en selecteer Voltooien:
Geef een projectnaam en locatie op.
Selecteer in de vervolgkeuzelijst Project SDK de optie Java 1.8 voor het Spark 2.x-cluster of selecteer Java 1.7 voor het Spark 1.x-cluster.
In de vervolgkeuzelijst met Spark-versies integreert de wizard Scala-project maken de juiste versie voor de Spark SDK en de Scala SDK. Selecteer Spark 1.x als de Spark-clusterversie ouder is dan 2.0. Selecteer anders Spark 2.x. In dit voorbeeld wordt Spark 2.0.2 (Scala 2.11.8) gebruikt.
Het Spark-project maakt automatisch een artefact voor u. Ga als volgt te werk om het artefact weer te geven:
a. Selecteer Project Structure in het menu File.
b. Selecteer artefacten in het dialoogvenster Projectstructuur om het standaardartefact weer te geven dat is gemaakt. U kunt ook uw eigen artefact maken door het plusteken (+) te selecteren.
Voeg bibliotheken toe aan uw project. Ga als volgt te werk om een bibliotheek toe te voegen:
a. Klik met de rechtermuisknop op de projectnaam in de projectstructuur en selecteer Module openen Instellingen.
b. Selecteer in het dialoogvenster Projectstructuur bibliotheken, selecteer het (+) symbool en selecteer vervolgens Van Maven.
c. Zoek en voeg in het dialoogvenster Bibliotheek downloaden uit maven-opslagplaats de volgende bibliotheken toe:
org.scalatest:scalatest_2.10:2.2.1
org.apache.hadoop:hadoop-azure:2.7.1
Kopieer
yarn-site.xml
encore-site.xml
vanuit het hoofdknooppunt van het cluster en voeg deze toe aan het project. Gebruik de volgende opdrachten om de bestanden te kopiëren. U kunt Cygwin gebruiken om de volgendescp
opdrachten uit te voeren om de bestanden van de hoofdknooppunten van het cluster te kopiëren:scp <ssh user name>@<headnode IP address or host name>://etc/hadoop/conf/core-site.xml .
Omdat we het IP-adres van het hoofdknooppunt van het cluster al hebben toegevoegd voor het hostbestand op het bureaublad, kunnen we de
scp
opdrachten op de volgende manier gebruiken:scp sshuser@nitinp:/etc/hadoop/conf/core-site.xml . scp sshuser@nitinp:/etc/hadoop/conf/yarn-site.xml .
Als u deze bestanden wilt toevoegen aan uw project, kopieert u ze onder de map /src in uw projectstructuur, bijvoorbeeld
<your project directory>\src
.Werk het
core-site.xml
bestand bij om de volgende wijzigingen aan te brengen:a. Vervang de versleutelde sleutel. Het
core-site.xml
bestand bevat de versleutelde sleutel voor het opslagaccount dat is gekoppeld aan het cluster. Vervang in hetcore-site.xml
bestand dat u aan het project hebt toegevoegd de versleutelde sleutel door de werkelijke opslagsleutel die is gekoppeld aan het standaardopslagaccount. Zie Toegangssleutels voor een opslagaccount beheren voor meer informatie.<property> <name>fs.azure.account.key.hdistoragecentral.blob.core.windows.net</name> <value>access-key-associated-with-the-account</value> </property>
b. Verwijder de volgende vermeldingen uit
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>
c. Sla het bestand op.
Voeg de hoofdklasse voor uw toepassing toe. Klik in Projectverkenner met de rechtermuisknop op src, wijs Nieuw aan en selecteer vervolgens Scala-klasse.
Geef in het dialoogvenster Nieuwe Scala-klasse maken een naam op, selecteer Object in het vak Soort en selecteer VERVOLGENS OK.
Plak de volgende code in het
MyClusterAppMain.scala
bestand. Met deze code wordt de Spark-context gemaakt en wordt eenexecuteJob
methode van hetSparkSample
object geopend.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") } }
Herhaal stap 8 en 9 om een nieuw Scala-object toe te voegen met de naam
*SparkSample
. Voeg de volgende code toe aan deze klasse. Met deze code worden de gegevens uit de HVAC.csv gelezen (beschikbaar in alle HDInsight Spark-clusters). Hiermee worden de rijen opgehaald met slechts één cijfer in de zevende kolom in het CSV-bestand en wordt vervolgens de uitvoer naar /HVACOut geschreven onder de standaardopslagcontainer voor het 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) } }
Herhaal stap 8 en 9 om een nieuwe klasse toe te voegen met de naam
RemoteClusterDebugging
. Met deze klasse wordt het Spark-testframework geïmplementeerd dat wordt gebruikt om fouten in de toepassingen op te sporen. Voeg de volgende code toe aan de klasseRemoteClusterDebugging
: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") } }
Er zijn enkele belangrijke dingen die u moet noteren:
- Zorg
.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")
ervoor dat de JAR van de Spark-assembly beschikbaar is in de clusteropslag op het opgegeven pad. setJars
Geef de locatie op waar het JAR-artefact wordt gemaakt. Normaal gesproken is<Your IntelliJ project directory>\out\<project name>_DefaultArtifact\default_artifact.jar
het .
- Zorg
Klik in de
*RemoteClusterDebugging
klasse met de rechtermuisknop op hettest
trefwoord en selecteer RemoteClusterDebugging Configuration maken.Geef in het dialoogvenster Configuratie voor RemoteClusterDebugging maken een naam op voor de configuratie en selecteer Testtype als testnaam. Laat alle andere waarden staan als de standaardinstellingen. Selecteer Apply en vervolgens OK.
U ziet nu een vervolgkeuzelijst voor de configuratie voor extern uitvoeren in de menubalk.
Stap 5: De toepassing uitvoeren in de foutopsporingsmodus
Open
SparkSample.scala
en maak in uw IntelliJ IDEA-project een onderbrekingspunt naastval rdd1
. Selecteer in het onderbrekingspunt maken voor het snelmenu regel in functie executeJob.Als u de toepassing wilt uitvoeren, selecteert u de knop Foutopsporing uitvoeren naast de vervolgkeuzelijst Configuratie voor externe uitvoering .
Wanneer de uitvoering van het programma het onderbrekingspunt bereikt, ziet u een tabblad Foutopsporingsprogramma in het onderste deelvenster.
Als u een horloge wilt toevoegen, selecteert u het (+)-pictogram.
In dit voorbeeld is de toepassing verbroken voordat de variabele
rdd1
werd gemaakt. Met behulp van dit horloge kunnen we de eerste vijf rijen in de variabelerdd
zien. Selecteer Enter.Wat u in de vorige afbeelding ziet, is dat u tijdens runtime query's kunt uitvoeren op terabytes aan gegevens en fouten kunt opsporen in de voortgang van uw toepassing. In de uitvoer die in de vorige afbeelding wordt weergegeven, ziet u bijvoorbeeld dat de eerste rij van de uitvoer een koptekst is. Op basis van deze uitvoer kunt u uw toepassingscode zo nodig wijzigen om de veldnamenrij over te slaan.
U kunt nu het pictogram Programma hervatten selecteren om door te gaan met de uitvoering van uw toepassing.
Als de toepassing is voltooid, ziet u uitvoer als volgt:
Volgende stappen
Scenario's
- Apache Spark met BI: interactieve gegevensanalyse uitvoeren met Behulp van Spark in HDInsight met BI-hulpprogramma's
- Apache Spark met Machine Learning: Spark in HDInsight gebruiken om de gebouwtemperatuur te analyseren met behulp van HVAC-gegevens
- Apache Spark met Machine Learning: Spark in HDInsight gebruiken om resultaten van voedselinspectie te voorspellen
- Analyse van websitelogboeken met Apache Spark in HDInsight
Toepassingen maken en uitvoeren
- Een zelfstandige toepassing maken met behulp van Scala
- Apache Livy gebruiken om taken op afstand uit te voeren in een Apache Spark-cluster
Tools en uitbreidingen
- Azure Toolkit voor IntelliJ gebruiken om Apache Spark-toepassingen te maken voor een HDInsight-cluster
- Azure Toolkit voor IntelliJ gebruiken om op afstand fouten in Apache Spark-toepassingen op te sporen via SSH
- HDInsight Tools gebruiken in Azure Toolkit voor Eclipse om Apache Spark-toepassingen te maken
- Apache Zeppelin-notebooks gebruiken met een Apache Spark-cluster in HDInsight
- Kernels beschikbaar voor Jupyter Notebook in een Apache Spark-cluster voor HDInsight
- Externe pakketten gebruiken met Jupyter Notebooks
- Jupyter op uw computer installeren en verbinding maken met een HDInsight Spark-cluster