Az Azure Toolkit for IntelliJ használatával távolról hibakeresést végezhet az Apache Spark-alkalmazásokban a HDInsightban VPN-en keresztül

Javasoljuk az Apache Spark-alkalmazások távoli hibakeresését az SSH-val. Útmutatásért lásd : Apache Spark-alkalmazások távoli hibakeresése HDInsight-fürtön az Azure Toolkit for IntelliJ-vel SSH-n keresztül.

Ez a cikk részletes útmutatást nyújt arról, hogyan használhatja a HDInsight Tools in Azure Toolkit for IntelliJ eszközt a Spark-feladatok HDInsight Spark-fürtön való elküldéséhez, majd távoli hibakereséshez az asztali számítógépről. A feladatok elvégzéséhez a következő magas szintű lépéseket kell végrehajtania:

  1. Helyek közötti vagy pont–hely azure-beli virtuális hálózat létrehozása. A dokumentum lépései feltételezik, hogy helyek közötti hálózatot használ.
  2. Hozzon létre egy Spark-fürtöt a HDInsightban, amely a helyek közötti virtuális hálózat része.
  3. Ellenőrizze a fürtfőcsomópont és az asztal közötti kapcsolatot.
  4. Hozzon létre egy Scala-alkalmazást az IntelliJ IDEA-ban, majd konfigurálja távoli hibakeresésre.
  5. Futtassa és hibakeresése az alkalmazást.

Előfeltételek

  • Azure-előfizetés. További információ: Az Azure ingyenes próbaverziójának lekérése.
  • Apache Spark-fürt a HDInsightban. További útmutatásért lásd: Apache Spark-fürt létrehozása az Azure HDInsightban.
  • Oracle Java fejlesztői készlet. Az Oracle webhelyén telepítheti.
  • IntelliJ IDEA. Ez a cikk a 2017.1-es verziót használja. A JetBrains webhelyén telepítheti.
  • HDInsight Tools in Azure Toolkit for IntelliJ. Az IntelliJ-hez készült HDInsight-eszközök az IntelliJ-hez készült Azure Toolkit részeként érhetők el. Az Azure Toolkit telepítésével kapcsolatos utasításokért tekintse meg az Azure Toolkit for IntelliJ telepítését ismertető cikket.
  • Jelentkezzen be az Azure-előfizetésbe az IntelliJ IDEA-ból. Kövesse az IntelliJ-hez készült Azure Toolkitben található utasításokat apache Spark-alkalmazások HDInsight-fürtökhöz való létrehozásához.
  • Kivétel megkerülő megoldása. Ha windowsos számítógépen futtatja a Spark Scala alkalmazást a távoli hibakereséshez, kivételt kaphat. Ezt a kivételt a SPARK-2356 ismerteti, és a Windows hiányzó WinUtils.exe fájlja miatt következik be. A hiba megkerüléséhez le kell töltenie Winutils.exe egy olyan helyre, mint a C:\WinUtils\bin. Adjon hozzá egy HADOOP_HOME környezeti változót, majd állítsa a változó értékét a C\WinUtils értékre.

1. lépés: Azure-beli virtuális hálózat létrehozása

Kövesse az alábbi hivatkozások utasításait egy Azure-beli virtuális hálózat létrehozásához, majd ellenőrizze az asztali számítógép és a virtuális hálózat közötti kapcsolatot:

2. lépés: HDInsight Spark-fürt létrehozása

Javasoljuk, hogy hozzon létre egy Apache Spark-fürtöt is az Azure HDInsightban, amely a létrehozott Azure-beli virtuális hálózat része. Használja a Linux-alapú fürtök HDInsightban való létrehozásában elérhető információkat. Az opcionális konfiguráció részeként válassza ki az előző lépésben létrehozott Azure-beli virtuális hálózatot.

3. lépés: A fürtfőcsomópont és az asztal közötti kapcsolat ellenőrzése

  1. Kérje le a főcsomópont IP-címét. Nyissa meg a fürt Ambari felhasználói felületét. A fürt paneljén válassza az Irányítópult lehetőséget.

    Select Dashboard in Apache Ambari.

  2. Az Ambari felhasználói felületén válassza a Gazdagépek lehetőséget.

    Select Hosts in Apache Ambari.

  3. Megjelenik a fő csomópontok, a feldolgozó csomópontok és a zookeeper csomópontok listája. A fejcsomópontok hn* előtaggal rendelkeznek. Válassza ki az első fejcsomópontot.

    Find the head node in Apache Ambari.

  4. A megnyíló oldal alján található Összegzés panelen másolja ki a fő csomópont IP-címét és a gazdagépnevet.

    Find the IP address in Apache Ambari.

  5. Adja hozzá a fő csomópont IP-címét és állomásnevét azon a számítógépen található gazdagépfájlhoz , amelyen futtatni szeretné, és távolról hibakeresést végez a Spark-feladatban. Ez lehetővé teszi a fő csomóponttal való kommunikációt az IP-cím és a gazdagépnév használatával.

    a. Nyisson meg egy emelt szintű engedélyekkel rendelkező Jegyzettömb fájlt. A Fájl menüben válassza a Megnyitás lehetőséget, majd keresse meg a gazdagépfájl helyét. Windows rendszerű számítógépeken a hely a C:\Windows\System32\Drivers\etc\hosts.

    b. Adja hozzá a következő adatokat a gazdagépfájlhoz :

    # 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. A HDInsight-fürt által használt Azure-beli virtuális hálózathoz csatlakoztatott számítógépről ellenőrizze, hogy pingelheti-e a fő csomópontokat az IP-cím és a gazdagépnév használatával.

  7. Az SSH használatával csatlakozhat a fürtfejcsomóponthoz az SSH-t használó HDInsight-fürthöz Csatlakozás utasításait követve. A fürtfőcsomóponton pingelje az asztali számítógép IP-címét. Tesztelje a számítógéphez rendelt mindkét IP-címhez való kapcsolódást:

    • Egy a hálózati kapcsolathoz
    • Egy az Azure-beli virtuális hálózathoz
  8. Ismételje meg a másik főcsomópont lépéseit.

4. lépés: Apache Spark Scala-alkalmazás létrehozása a HDInsight Tools használatával az Azure Toolkit for IntelliJ-ben, és konfigurálja távoli hibakeresésre

  1. Nyissa meg az IntelliJ IDEA-t, és hozzon létre egy új projektet. A New Project (Új projekt) párbeszédablakban hajtsa végre az alábbi lépéseket:

    Select the new project template in IntelliJ IDEA.

    a. Válassza ki a HDInsight>Spark on HDInsight (Scala) lehetőséget.

    b. Válassza a Tovább lehetőséget.

  2. A következő Új projekt párbeszédpanelen tegye a következőket, majd válassza a Befejezés elemet:

    • Adja meg a projekt nevét és helyét.

    • A Project SDK (Projekt SDK) legördülő listából Spark 2.x-fürt esetében válassza a Java 1.8, Spark 1.x-fürt esetében pedig a Java 1.7 lehetőséget.

    • A Spark-verzió legördülő listájában a Scala projektlétrehozási varázslója integrálja a Spark SDK és a Scala SDK megfelelő verzióját. Ha a Spark-fürt verziója 2.0-nál korábbi, válassza a Spark 1.x lehetőséget. Máskülönben válassza a Spark2.x lehetőséget. Ez a példa a következő verziót használja: Spark 2.0.2 (Scala 2.11.8).

    Select the project SDK and Spark version.

  3. A Spark-projekt automatikusan létrehoz egy összetevőt. Az összetevő megtekintéséhez tegye a következőket:

    a. A File (Fájl) menüben válassza a Project Structure (Projektstruktúra) lehetőséget.

    b. A Projektstruktúra párbeszédpanelen válassza az Összetevők lehetőséget a létrehozott alapértelmezett összetevő megtekintéséhez. A pluszjel (+) kiválasztásával saját összetevőt is létrehozhat.

    IntelliJ IDEA artifacts create jar.

  4. Kódtárak hozzáadása a projekthez. Tár hozzáadásához tegye a következőket:

    a. Kattintson a jobb gombbal a projekt nevére a projektfán, majd válassza a Modul megnyitása Gépház lehetőséget.

    b. A Projektstruktúra párbeszédpanelen válassza a Kódtárak lehetőséget, válassza a (+) szimbólumot, majd válassza a Mavenből lehetőséget.

    IntelliJ IDEA download library.

    c. A Kódtár letöltése a Maven-adattárból párbeszédpanelen keresse meg és adja hozzá a következő kódtárakat:

    • org.scalatest:scalatest_2.10:2.2.1
    • org.apache.hadoop:hadoop-azure:2.7.1
  5. Másolja yarn-site.xml ki és core-site.xml adja hozzá a fürtfőcsomópontról, és adja hozzá őket a projekthez. A fájlok másolásához használja az alábbi parancsokat. A Cygwin használatával a következő scp parancsokat futtatva másolhatja a fájlokat a fürtfőcsomópontokról:

    scp <ssh user name>@<headnode IP address or host name>://etc/hadoop/conf/core-site.xml .
    

    Mivel már hozzáadtuk a fürtfőcsomópont IP-címét és állomásneveit az asztali gazdagépfájlhoz, a parancsokat a scp következő módon használhatjuk:

    scp sshuser@nitinp:/etc/hadoop/conf/core-site.xml .
    scp sshuser@nitinp:/etc/hadoop/conf/yarn-site.xml .
    

    Ha ezeket a fájlokat a projekthez szeretné hozzáadni, másolja őket a projektfa /src mappájába, például <your project directory>\src.

  6. Frissítse a fájlt a core-site.xml következő módosítások végrehajtásához:

    a. Cserélje le a titkosított kulcsot. A core-site.xml fájl tartalmazza a fürthöz társított tárfiók titkosított kulcsát. core-site.xml A projekthez hozzáadott fájlban cserélje le a titkosított kulcsot az alapértelmezett tárfiókhoz társított tényleges tárkulcsra. További információ: Tárfiók hozzáférési kulcsainak kezelése.

    <property>
            <name>fs.azure.account.key.hdistoragecentral.blob.core.windows.net</name>
            <value>access-key-associated-with-the-account</value>
    </property>
    

    b. Távolítsa el a következő bejegyzéseket a következőből 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. Mentse a fájlt.

  7. Adja hozzá az alkalmazás főosztályát. A Project Explorerben kattintson a jobb gombbal az src elemre, mutasson az Új pontra, majd válassza a Scala osztályt.

    IntelliJ IDEA Select the main class.

  8. Az Új Scala-osztály létrehozása párbeszédpanelen adjon meg egy nevet, válassza az Objektum lehetőséget a Kind mezőben, majd kattintson az OK gombra.

    IntelliJ IDEA Create new Scala class.

  9. Illessze be a MyClusterAppMain.scala következő kódot a fájlba. Ez a kód létrehozza a Spark-környezetet, és megnyit egy metódust executeJob az SparkSample objektumból.

    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. Ismételje meg a 8. és a 9. lépést egy új, úgynevezett Scala-objektum *SparkSamplehozzáadásához. Adja hozzá az alábbi kódot ehhez az osztályhoz. Ez a kód beolvassa az adatokat a HVAC.csv (minden HDInsight Spark-fürtben elérhető). Lekéri azokat a sorokat, amelyeknek csak egy számjegye van a CSV-fájl hetedik oszlopában, majd a kimenetet a /HVACOut fájlba írja a fürt alapértelmezett tárolójában.

    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. Ismételje meg a 8. és a 9. lépést egy új, úgynevezett RemoteClusterDebuggingosztály hozzáadásához. Ez az osztály implementálja az alkalmazások hibakereséséhez használt Spark-teszt keretrendszert. Adja hozzá a következő kódot az RemoteClusterDebugging osztályhoz:

        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")
         }
        }
    

    Néhány fontos dolgot érdemes megjegyezni:

    • Ehhez .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")győződjön meg arról, hogy a Spark-szerelvény JAR elérhető a fürttárolón a megadott elérési úton.
    • Itt setJarsadhatja meg az összetevő JAR létrehozásának helyét. Általában az <Your IntelliJ project directory>\out\<project name>_DefaultArtifact\default_artifact.jar.
  12. Az osztályban kattintson a*RemoteClusterDebugging jobb gombbal a test kulcsszóra, majd válassza a RemoteClusterDebugging Configuration létrehozása parancsot.

    IntelliJ IDEA Create a remote configuration.

  13. A RemoteClusterDebugging Konfiguráció létrehozása párbeszédpanelen adja meg a konfiguráció nevét, majd válassza a Teszt típust tesztnévként. Hagyja meg az összes többi értéket alapértelmezett beállításként. Válassza az Apply (Alkalmaz) lehetőséget, majd kattintson az OK gombra.

    Create RemoteClusterDebugging Configuration.

  14. Ekkor megjelenik egy távoli futtatás konfigurációs legördülő listája a menüsávon.

    IntelliJ The Remote run drop-down list.

5. lépés: Az alkalmazás futtatása hibakeresési módban

  1. Az IntelliJ IDEA-projektben nyisson meg SparkSample.scala és hozzon létre egy töréspontot a val rdd1mellette. Az előugró menü Töréspont létrehozása menüjében válassza ki az ExecuteJob függvény sorát.

    IntelliJ IDEA Add a breakpoint.

  2. Az alkalmazás futtatásához válassza a Távoli futtatás konfigurációs legördülő lista melletti Hibakeresési futtatás gombot.

    IntelliJ IDEA Select the Debug Run button.

  3. Amikor a program végrehajtása eléri a töréspontot, megjelenik egy Hibakereső lap az alsó panelen.

    IntelliJ IDEA View the Debugger tab.

  4. Óra hozzáadásához válassza a (+) ikont.

    IntelliJ debug-add-watch-variable.

    Ebben a példában az alkalmazás a változó rdd1 létrehozása előtt megszakadt. Ezzel az órával a változó rddelső öt sorát láthatjuk. Nyomja le az Enter billentyűt.

    IntelliJ Run the program in debug mode.

    Az előző képen az látható, hogy futásidőben több terabájtnyi adatot kérdezhet le, és hibakeresést végezhet az alkalmazás előrehaladása során. Az előző képen látható kimenetben például láthatja, hogy a kimenet első sora egy fejléc. A kimenet alapján módosíthatja az alkalmazás kódját, hogy szükség esetén kihagyja a fejlécsort.

  5. Most már a Program folytatása ikont választva folytathatja az alkalmazás futtatását.

    IntelliJ IDEA Select Resume Program.

  6. Ha az alkalmazás sikeresen befejeződött, az alábbihoz hasonló kimenetnek kell megjelennie:

    IntelliJ IDEA debugger console output.

Következő lépések

Forgatókönyvek

Alkalmazások létrehozása és futtatása

Eszközök és bővítmények

Erőforrások kezelése