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:
- 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.
- Hozzon létre egy Spark-fürtöt a HDInsightban, amely a helyek közötti virtuális hálózat része.
- Ellenőrizze a fürtfőcsomópont és az asztal közötti kapcsolatot.
- Hozzon létre egy Scala-alkalmazást az IntelliJ IDEA-ban, majd konfigurálja távoli hibakeresésre.
- 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:
- Virtuális hálózat létrehozása helyek közötti VPN-kapcsolattal az Azure Portal használatával
- Virtuális hálózat létrehozása helyek közötti VPN-kapcsolattal a PowerShell használatával
- Pont–hely kapcsolat konfigurálása virtuális hálózathoz a PowerShell használatával
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
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.
Az Ambari felhasználói felületén válassza a Gazdagépek lehetőséget.
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.
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.
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
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.
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
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
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:
a. Válassza ki a HDInsight>Spark on HDInsight (Scala) lehetőséget.
b. Válassza a Tovább lehetőséget.
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).
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.
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.
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
Másolja
yarn-site.xml
ki éscore-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
.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.
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.
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.
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ódustexecuteJob
azSparkSample
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") } }
Ismételje meg a 8. és a 9. lépést egy új, úgynevezett Scala-objektum
*SparkSample
hozzá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) } }
Ismételje meg a 8. és a 9. lépést egy új, úgynevezett
RemoteClusterDebugging
osztá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 azRemoteClusterDebugging
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
setJars
adhatja meg az összetevő JAR létrehozásának helyét. Általában az<Your IntelliJ project directory>\out\<project name>_DefaultArtifact\default_artifact.jar
.
- Ehhez
Az osztályban kattintson a
*RemoteClusterDebugging
jobb gombbal atest
kulcsszóra, majd válassza a RemoteClusterDebugging Configuration létrehozása parancsot.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.
Ekkor megjelenik egy távoli futtatás konfigurációs legördülő listája a menüsávon.
5. lépés: Az alkalmazás futtatása hibakeresési módban
Az IntelliJ IDEA-projektben nyisson meg
SparkSample.scala
és hozzon létre egy töréspontot aval rdd1
mellette. Az előugró menü Töréspont létrehozása menüjében válassza ki az ExecuteJob függvény sorát.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.
Amikor a program végrehajtása eléri a töréspontot, megjelenik egy Hibakereső lap az alsó panelen.
Óra hozzáadásához válassza a (+) ikont.
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órdd
első öt sorát láthatjuk. Nyomja le az Enter billentyűt.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.
Most már a Program folytatása ikont választva folytathatja az alkalmazás futtatását.
Ha az alkalmazás sikeresen befejeződött, az alábbihoz hasonló kimenetnek kell megjelennie:
Következő lépések
Forgatókönyvek
- Apache Spark bi-val: Interaktív adatelemzés végrehajtása a Spark in HDInsight használatával BI-eszközökkel
- Apache Spark gépi Tanulás: A Spark használata a HDInsightban az épülethőmérséklet HVAC-adatokkal történő elemzéséhez
- Apache Spark gépi Tanulás: A Spark használata a HDInsightban az élelmiszer-ellenőrzési eredmények előrejelzéséhez
- Webhelynapló-elemzés az Apache Spark használatával a HDInsightban
Alkalmazások létrehozása és futtatása
- Önálló alkalmazás létrehozása a Scala használatával
- Feladatok távoli futtatása Apache Spark-fürtön az Apache Livy használatával
Eszközök és bővítmények
- Apache Spark-alkalmazások létrehozása HDInsight-fürtökhöz az Azure Toolkit for IntelliJ használatával
- Az Azure Toolkit for IntelliJ használatával távolról, SSH-val hibakeresést végezhet az Apache Spark-alkalmazásokban
- Apache Spark-alkalmazások létrehozásához használja a HDInsight Toolst az Azure Toolkit for Eclipse-ben
- Apache Zeppelin-jegyzetfüzetek használata Apache Spark-fürttel a HDInsightban
- A Jupyter Notebookhoz elérhető kernelek a HDInsighthoz készült Apache Spark-fürtben
- Külső csomagok használata Jupyter Notebookokkal
- A Jupyter telepítése a számítógépre, majd csatlakozás egy HDInsight Spark-fürthöz