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:

  1. 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.
  2. Maak een Spark-cluster in HDInsight dat deel uitmaakt van het virtuele site-naar-site-netwerk.
  3. Controleer de verbinding tussen het hoofdknooppunt van het cluster en uw bureaublad.
  4. Maak een Scala-toepassing in IntelliJ IDEA en configureer deze voor externe foutopsporing.
  5. De toepassing uitvoeren en fouten opsporen.

Vereisten

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:

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

  1. Haal het IP-adres van het hoofdknooppunt op. Open de Ambari-gebruikersinterface voor het cluster. Selecteer Dashboard op de clusterblade.

    Select Dashboard in Apache Ambari.

  2. Selecteer Hosts in de Ambari-gebruikersinterface.

    Select Hosts in Apache Ambari.

  3. U ziet een lijst met hoofdknooppunten, werkknooppunten en zookeeper-knooppunten. De hoofdknooppunten hebben een hn* voorvoegsel. Selecteer het eerste hoofdknooppunt.

    Find the head node in Apache Ambari.

  4. Kopieer in het deelvenster Samenvatting onder aan de pagina die wordt geopend het IP-adres van het hoofdknooppunt en de hostnaam.

    Find the IP address in Apache Ambari.

  5. 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
    
  6. 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.

  7. 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
  8. 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

  1. Open IntelliJ IDEA en maak een nieuw project. Voer in het dialoogvenster Nieuw project de volgende handelingen uit:

    Select the new project template in IntelliJ IDEA.

    a. Selecteer HDInsight>Spark in HDInsight (Scala).

    b. Selecteer Volgende.

  2. 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.

    Select the project SDK and Spark version.

  3. 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.

    IntelliJ IDEA artifacts create jar.

  4. 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.

    IntelliJ IDEA download library.

    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
  5. Kopieer yarn-site.xml en core-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 volgende scp 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.

  6. 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 het core-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.

  7. Voeg de hoofdklasse voor uw toepassing toe. Klik in Projectverkenner met de rechtermuisknop op src, wijs Nieuw aan en selecteer vervolgens Scala-klasse.

    IntelliJ IDEA Select the main class.

  8. Geef in het dialoogvenster Nieuwe Scala-klasse maken een naam op, selecteer Object in het vak Soort en selecteer VERVOLGENS OK.

    IntelliJ IDEA Create new Scala class.

  9. Plak de volgende code in het MyClusterAppMain.scala bestand. Met deze code wordt de Spark-context gemaakt en wordt een executeJob methode van het SparkSample 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")
        }
    }
    
  10. 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)
         }
    }
    
  11. 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 klasse RemoteClusterDebugging:

        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.
    • setJarsGeef de locatie op waar het JAR-artefact wordt gemaakt. Normaal gesproken is <Your IntelliJ project directory>\out\<project name>_DefaultArtifact\default_artifact.jarhet .
  12. Klik in de*RemoteClusterDebugging klasse met de rechtermuisknop op het test trefwoord en selecteer RemoteClusterDebugging Configuration maken.

    IntelliJ IDEA Create a remote configuration.

  13. 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.

    Create RemoteClusterDebugging Configuration.

  14. U ziet nu een vervolgkeuzelijst voor de configuratie voor extern uitvoeren in de menubalk.

    IntelliJ The Remote run drop-down list.

Stap 5: De toepassing uitvoeren in de foutopsporingsmodus

  1. Open SparkSample.scala en maak in uw IntelliJ IDEA-project een onderbrekingspunt naast val rdd1. Selecteer in het onderbrekingspunt maken voor het snelmenu regel in functie executeJob.

    IntelliJ IDEA Add a breakpoint.

  2. Als u de toepassing wilt uitvoeren, selecteert u de knop Foutopsporing uitvoeren naast de vervolgkeuzelijst Configuratie voor externe uitvoering .

    IntelliJ IDEA Select the Debug Run button.

  3. Wanneer de uitvoering van het programma het onderbrekingspunt bereikt, ziet u een tabblad Foutopsporingsprogramma in het onderste deelvenster.

    IntelliJ IDEA View the Debugger tab.

  4. Als u een horloge wilt toevoegen, selecteert u het (+)-pictogram.

    IntelliJ debug-add-watch-variable.

    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 variabele rddzien. Selecteer Enter.

    IntelliJ Run the program in debug mode.

    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.

  5. U kunt nu het pictogram Programma hervatten selecteren om door te gaan met de uitvoering van uw toepassing.

    IntelliJ IDEA Select Resume Program.

  6. Als de toepassing is voltooid, ziet u uitvoer als volgt:

    IntelliJ IDEA debugger console output.

Volgende stappen

Scenario's

Toepassingen maken en uitvoeren

Tools en uitbreidingen

Resources beheren