A Jupyter Notebook kernelei Apache Spark-fürtökön az Azure HDInsightban

A HDInsight Spark-fürtök olyan kerneleket biztosítanak, amelyeket az Apache Spark jupyter notebookjával használhat az alkalmazások teszteléséhez. A kernel olyan program, amely futtatja és értelmezi a kódot. A három kernel a következő:

  • PySpark – Python2-ben írt alkalmazásokhoz. (Csak Spark 2.4-es verziójú fürtök esetén alkalmazható)
  • PySpark3 – Python3-ban írt alkalmazásokhoz.
  • Spark – Scalában írt alkalmazásokhoz.

Ebből a cikkből megtudhatja, hogyan használhatja ezeket a kerneleket, és hogyan használhatja őket.

Előfeltételek

Apache Spark-fürt a HDInsightban. További útmutatásért lásd: Apache Spark-fürt létrehozása az Azure HDInsightban.

Jupyter-jegyzetfüzet létrehozása a Spark HDInsightban

  1. Az Azure Portalon válassza ki a Spark-fürtöt. Az utasításokért tekintse meg a fürtök listáját és megjelenítését. Megnyílik az Áttekintés nézet.

  2. Az Áttekintés nézet Fürt irányítópultok mezőjében válassza a Jupyter Notebook lehetőséget. Ha a rendszer felkéri rá, adja meg a fürthöz tartozó rendszergazdai hitelesítő adatokat.

    Jupyter Notebook on Apache Spark.

    Feljegyzés

    A Spark-fürtön található Jupyter Notebookot is elérheti az alábbi URL-cím böngészőben való megnyitásával. Cserélje le a CLUSTERNAME elemet a fürt nevére:

    https://CLUSTERNAME.azurehdinsight.net/jupyter

  3. Válassza az Új lehetőséget, majd a Jegyzetfüzet létrehozásához válassza a Pyspark, a PySpark3 vagy a Spark lehetőséget. Használja a Spark kernelt Scala-alkalmazásokhoz, Python2-alkalmazásokhoz a PySpark kernelt és a Python3-alkalmazásokhoz készült PySpark3 kernelt.

    Kernels for Jupyter Notebook on Spark.

Feljegyzés

A Spark 3.1-ben csak a PySpark3 vagy a Spark érhető el.

Kernels for Jupyter Notebook on Spark HDI4.0.

  1. Megnyílik egy jegyzetfüzet a kiválasztott kernellel.

A kernelek használatának előnyei

Íme néhány előnye annak, hogy az új kerneleket a Jupyter Notebook használatával használhatja Spark HDInsight-fürtökön.

  • Előre beállított környezetek. A PySpark, a PySpark3 vagy a Spark-kernelek esetében nem kell explicit módon beállítania a Spark- vagy Hive-környezeteket, mielőtt elkezdené használni az alkalmazásokat. Ezek a környezetek alapértelmezés szerint elérhetők. Ezek a környezetek a következők:

    • sc – Spark-környezethez

    • sqlContext – Hive-környezethez

      Így a környezetek beállításához nem kell az alábbihoz hasonló utasításokat futtatnia:

      sc = SparkContext('yarn-client')
      sqlContext = HiveContext(sc)
      

      Ehelyett közvetlenül használhatja az alkalmazás előre beállított környezeteit.

  • Cellavarázsok. A PySpark kernel előre definiált "varázslatokat" biztosít, amelyek olyan speciális parancsok, amelyekkel %% meghívható (például %%MAGIC<args>). A varázsparancsnak a kódcellák első szójának kell lennie, és lehetővé kell tennie több sornyi tartalom használatát. A varázsszó legyen az első szó a cellában. Ha bármit hozzáad a varázslat előtt, még a megjegyzéseket is, hibát okoz. A varázslatokkal kapcsolatos további információkért lásd itt.

    Az alábbi táblázat a kerneleken keresztül elérhető különböző varázslatokat sorolja fel.

    Magic Példa Leírás
    súgó %%help Létrehoz egy táblázatot az összes elérhető varázslatról példával és leírással
    Info %%info Az aktuális Livy-végpont munkamenetadatainak kimenete
    Konfigurálás %%configure -f
    {"executorMemory": "1000M",
    "executorCores": 4}
    Konfigurálja a munkamenet létrehozásához szükséges paramétereket. Az erőjelző (-f) kötelező, ha már létrejött egy munkamenet, amely biztosítja a munkamenet elvetése és újbóli létrehozása. Tekintse meg Livy POST/sessions kérelemtörzsét az érvényes paraméterek listájához. A paramétereket JSON-sztringként kell átadni, és a varázslat után a következő sorban kell lenniük, ahogyan az a példaoszlopban látható.
    sql %%sql -o <variable name>
    SHOW TABLES
    Hive-lekérdezést hajt végre az sqlContexten. Ha a -o paraméter átadása megtörtént, a lekérdezés eredménye pandas-adatkeretként megmarad a %%helyi Python-környezetben.
    helyi %%local
    a=1
    A későbbi sorokban szereplő összes kód helyileg lesz végrehajtva. A kódnak érvényes Python2-kódnak kell lennie, függetlenül attól, hogy melyik kernelt használja. Így még akkor is, ha a jegyzetfüzet létrehozásakor a PySpark3 vagy a Spark kerneleket választotta ki, ha a %%local varázslatot egy cellában használja, annak a cellának csak érvényes Python2-kóddal kell rendelkeznie.
    naplók %%logs Az aktuális Livy-munkamenet naplóit adja ki.
    Törlés... %%delete -f -s <session number> Törli az aktuális Livy-végpont egy adott munkamenetét. A kernelhez indított munkamenet nem törölhető.
    tisztítás %%cleanup -f Törli az aktuális Livy-végpont összes munkamenetét, beleértve a jegyzetfüzet munkamenetét is. Az -f erőjelző kötelező.

    Feljegyzés

    A PySpark kernel által hozzáadott varázslatok mellett a beépített IPython-varázslatokat is használhatja, beleértve a %%sh. A %%sh varázslattal szkripteket és kódblokkokat futtathat a fürt fejcsomópontján.

  • Automatikus vizualizáció. A Pyspark kernel automatikusan megjeleníti a Hive- és SQL-lekérdezések kimenetét. Többféle vizualizáció közül választhat, például Táblázat, Kör, Vonal, Terület, Sáv.

A %%sql magic által támogatott paraméterek

A %%sql varázslat különböző paramétereket támogat, amelyekkel szabályozható a lekérdezések futtatásakor kapott kimenet típusa. Az alábbi táblázat a kimenetet sorolja fel.

Paraméter Példa Leírás
-o -o <VARIABLE NAME> Ezzel a paraméterrel megőrizheti a lekérdezés eredményét a %%helyi Python-környezetben Pandas-adatkeretként. Az adatkeret változójának neve a megadott változónév.
-q -q Ezzel a paramétersel kikapcsolhatja a cella vizualizációit. Ha nem szeretné automatikusan megjeleníteni egy cella tartalmát, és csak adatkeretként szeretné rögzíteni, használja a következőt -q -o <VARIABLE>: Ha az eredmények rögzítése nélkül szeretné kikapcsolni a vizualizációkat (például SQL-lekérdezés, például utasítás CREATE TABLE futtatásához), használja -q argumentum megadása -o nélkül.
-M -m <METHOD> Ahol a METHOD a take vagy a sample (az alapértelmezett érték). Ha a metódus az take, a kernel a MAXROWS által megadott eredményadatkészlet tetejéről választ elemeket (ezt a táblázat későbbi részében ismertetjük). Ha a módszer minta, a kernel véletlenszerűen mintát vesz az adathalmaz elemeiből a paraméter alapján -r , amelyet a táblázat következő részében ismertet.
-r -r <FRACTION> Itt a TÖRT egy lebegőpontos szám 0,0 és 1,0 között. Ha az SQL-lekérdezés mintametódusa az sample, akkor a kernel véletlenszerűen mintavételezi az eredményhalmaz elemeinek megadott törtrészét. Ha például egy SQL-lekérdezést futtat az argumentumokkal, akkor az eredménysorok -m sample -r 0.011%-a véletlenszerűen lesz mintázva.
-n -n <MAXROWS> A MAXROWS egy egész szám. A kernel a kimeneti sorok számát MAXROWS-ra korlátozza. Ha a MAXROWS negatív szám, például -1, akkor az eredményhalmaz sorainak száma nem korlátozott.

Példa:

%%sql -q -m sample -r 0.1 -n 500 -o query2
SELECT * FROM hivesampletable

A fenti utasítás a következő műveleteket hajtja végre:

  • Kiválasztja az összes rekordot a hivesampletable fájlból.
  • Mivel a -q parancsot használjuk, kikapcsolja az automatikus vizualizációt.
  • Mivel használjuk -m sample -r 0.1 -n 500, véletlenszerűen mintát vesz a hivesampletable sorainak 10%-át, és 500 sorra korlátozza az eredményhalmaz méretét.
  • Végül, mivel használtuk-o query2, a kimenetet egy lekérdezés2 nevű adatkeretbe is menti.

Az új kernelek használata során megfontolandó szempontok

Bármelyik kernelt is használja, a futó jegyzetfüzetek elhagyása a fürt erőforrásait használja. Ezekkel a kernelekkel, mivel a környezetek előre vannak beállítva, a jegyzetfüzetek elhagyása nem öli meg a környezetet. Így a fürterőforrások továbbra is használatban maradnak. A jegyzetfüzet Fájl menüjében a Bezárás és a Leállítás lehetőség használata ajánlott, ha befejezte a jegyzetfüzet használatát. A lezárás megöli a környezetet, majd kilép a jegyzetfüzetből.

Hol vannak tárolva a jegyzetfüzetek?

Ha a fürt az Azure Storage-t használja alapértelmezett tárfiókként, a Rendszer a Jupyter-jegyzetfüzeteket a /HdiNotebooks mappában lévő tárfiókba menti. A Jupyteren belül létrehozott jegyzetfüzetek, szövegfájlok és mappák a tárfiókból érhetők el. Ha például a Jupyter használatával hoz létre egy mappát myfolder és egy myfolder/mynotebook.ipynb jegyzetfüzetet, a tárfiókon /HdiNotebooks/myfolder/mynotebook.ipynb belül elérheti a jegyzetfüzetet. A fordítottja is igaz, vagyis ha közvetlenül a tárfiókba /HdiNotebooks/mynotebook1.ipynbtölt fel jegyzetfüzetet, akkor a jegyzetfüzet a Jupyterből is látható. A jegyzetfüzetek a fürt törlése után is a tárfiókban maradnak.

Feljegyzés

A HDInsight-fürtök, amelyek alapértelmezett tárolóként az Azure Data Lake Storage-t tárolják, nem tárolják a jegyzetfüzeteket a társított tárolóban.

A tárfiókba mentett jegyzetfüzetek kompatibilisek az Apache Hadoop HDFS-vel. Ha SSH-t használ a fürtbe, használhatja a fájlkezelési parancsokat:

Parancs Leírás
hdfs dfs -ls /HdiNotebooks # Lista mindent a gyökérkönyvtárban – ebben a könyvtárban minden látható a Jupyter számára a kezdőlapon
hdfs dfs –copyToLocal /HdiNotebooks # Töltse le a HdiNotebooks mappa tartalmát
hdfs dfs –copyFromLocal example.ipynb /HdiNotebooks # Töltsön fel egy example.ipynb jegyzetfüzetet a gyökérmappába, hogy látható legyen a Jupyterből

Függetlenül attól, hogy a fürt az Azure Storage-t vagy az Azure Data Lake Storage-t használja-e alapértelmezett tárfiókként, a rendszer a jegyzetfüzeteket a fürt átjárócsomópontjára is menti a következő helyen /var/lib/jupyter: .

Támogatott böngésző

A Spark HDInsight-fürtökön futó Jupyter Notebookok csak a Google Chrome-ban támogatottak.

Javaslatok

Az új kernelek folyamatosan fejlődnek, és idővel kifejlődnek. Így az API-k változhatnak, ahogy ezek a kernelek kifejlődnek. Nagyra értékelnénk az új kernelek használata során érkezett visszajelzéseket. A visszajelzés hasznos lehet ezeknek a kerneleknek a végleges kiadásának alakításában. Megjegyzéseit/visszajelzéseit a cikk alján található Visszajelzés szakaszban hagyhatja meg.

Következő lépések