Megosztás a következőn keresztül:


Az Apache Spark REST API használata távoli feladatok küldéséhez egy HDInsight Spark-fürtre

Megtudhatja, hogyan használhatja az Apache Livyt, az Apache Spark REST API-t, amellyel távoli feladatokat küldhet egy Azure HDInsight Spark-fürtnek. Részletes dokumentáció: Apache Livy.

A Livy használatával interaktív Spark-rendszerhéjakat futtathat, vagy elküldheti a Sparkon futtatandó kötegelt feladatokat. Ez a cikk arról szól, hogy a Livy használatával küldhet be kötegelt feladatokat. A cikkben szereplő kódrészletek a cURL használatával kezdeményeznek REST API-hívásokat a Livy Spark-végponthoz.

Előfeltételek

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

Apache Livy Spark-kötegelt feladat elküldése

Batch-feladat elküldése előtt fel kell töltenie az alkalmazás jar-ját a fürthöz társított fürttárolóba. Ehhez az AzCopy parancssori segédprogramot használhatja. Az adatok feltöltéséhez számos más ügyfél is használható. Ezekről további információt az Adatok feltöltése Apache Hadoop-feladatokhoz a HDInsightban című témakörben talál.

curl -k --user "admin:password" -v -H "Content-Type: application/json" -X POST -d '{ "file":"<path to application jar>", "className":"<classname in jar>" }' 'https://<spark_cluster_name>.azurehdinsight.net/livy/batches' -H "X-Requested-By: admin"

Példák

  • Ha a jar-fájl a fürttárolón (WASBS) található

    curl -k --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST -d '{ "file":"wasbs://mycontainer@mystorageaccount.blob.core.windows.net/data/SparkSimpleTest.jar", "className":"com.microsoft.spark.test.SimpleFile" }' "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    
  • Ha egy bemeneti fájl részeként szeretné átadni a jar fájlnevet és az osztálynevet (ebben a példában input.txt)

    curl -k  --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    

A fürtön futó Livy Spark-kötegekre vonatkozó információk lekérése

Szintaxis:

curl -k --user "admin:password" -v -X GET "https://<spark_cluster_name>.azurehdinsight.net/livy/batches"

Példák

  • Ha le szeretné kérni a fürtön futó összes Livy Spark-köteget:

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
    
  • Ha egy adott köteget szeretne lekérni egy adott kötegazonosítóval

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches/{batchId}"
    

Livy Spark-kötegelt feladat törlése

curl -k --user "admin:mypassword1!" -v -X DELETE "https://<spark_cluster_name>.azurehdinsight.net/livy/batches/{batchId}"

Példa

Kötegelt feladat törlése a kötegazonosítóval 5.

curl -k --user "admin:mypassword1!" -v -X DELETE "https://mysparkcluster.azurehdinsight.net/livy/batches/5"

Livy Spark és magas rendelkezésre állás

A Livy magas rendelkezésre állást biztosít a fürtön futó Spark-feladatokhoz. Íme néhány példa.

  • Ha a Livy szolgáltatás leáll, miután távolról elküldött egy feladatot egy Spark-fürtnek, a feladat továbbra is a háttérben fut. Amikor a Livy biztonsági másolatot készít, visszaállítja a feladat állapotát, és jelentést készít róla.
  • A HDInsighthoz készült Jupyter-notebookokat a háttérbeli Livy működteti. Ha egy jegyzetfüzet Spark-feladatot futtat, és a Livy szolgáltatás újraindul, a jegyzetfüzet továbbra is futtatja a kódcellát.

Példa megjelenítése

Ebben a szakaszban példákat tekintünk meg a Livy Spark használatával a kötegelt feladat elküldéséhez, a feladat állapotának monitorozásához, majd törléséhez. Az ebben a példában használt alkalmazás az önálló Scala-alkalmazás létrehozása és HDInsight Spark-fürtön való futtatásához kifejlesztett alkalmazás. Az itt ismertetett lépések a következőket feltételezik:

  • Már átmásolta az alkalmazás jar-fájlját a fürthöz társított tárfiókba.
  • A CuRL telepítve van arra a számítógépre, amelyen ezeket a lépéseket próbálja végrehajtani.

Hajtsa végre a következő lépéseket:

  1. A könnyű használat érdekében állítsa be a környezeti változókat. Ez a példa egy Windows-környezeten alapul, és szükség szerint módosítja a változókat a környezethez. Cserélje le CLUSTERNAMEa és PASSWORD a értéket a megfelelő értékekre.

    set clustername=CLUSTERNAME
    set password=PASSWORD
    
  2. Ellenőrizze, hogy a Livy Spark fut-e a fürtön. Ehhez lekéri a futó kötegek listáját. Ha először futtat egy feladatot a Livy használatával, a kimenetnek nullát kell visszaadnia.

    curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches"
    

    A következő kódrészlethez hasonló kimenetet kell kapnia:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:47:53 GMT
    < Content-Length: 34
    <
    {"from":0,"total":0,"sessions":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Figyelje meg, hogy a kimenet utolsó sora total :0 értéket ad vissza, ami azt jelzi, hogy nincsenek futó kötegek.

  3. Most küldjünk be egy kötegelt feladatot. Az alábbi kódrészlet egy bemeneti fájlt (input.txt) használ a jar és az osztálynév paraméterekként való átadásához. Ha windowsos számítógépről futtatja ezeket a lépéseket, a beviteli fájl használata a javasolt módszer.

    curl -k --user "admin:%password%" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://%clustername%.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    

    A input.txt fájl paraméterei a következőképpen vannak definiálva:

    { "file":"wasbs:///example/jars/SparkSimpleApp.jar", "className":"com.microsoft.spark.example.WasbIOTest" }
    

    Az alábbi kódrészlethez hasonló kimenetnek kell megjelennie:

    < HTTP/1.1 201 Created
    < Content-Type: application/json; charset=UTF-8
    < Location: /0
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:51:30 GMT
    < Content-Length: 36
    <
    {"id":0,"state":"starting","log":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Figyelje meg, hogy a kimenet utolsó sora state :starting értéket ad vissza. Azt is mondja, id:0. Itt a 0 a köteg azonosítója.

  4. Most már lekérheti ennek az adott kötegnek az állapotát a kötegazonosító használatával.

    curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches/0"
    

    Az alábbi kódrészlethez hasonló kimenetnek kell megjelennie:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:54:42 GMT
    < Content-Length: 509
    <
    {"id":0,"state":"success","log":["\t diagnostics: N/A","\t ApplicationMaster host: 10.0.0.4","\t ApplicationMaster RPC port: 0","\t queue: default","\t start time: 1448063505350","\t final status: SUCCEEDED","\t tracking URL: http://myspar.lpel.jx.internal.cloudapp.net:8088/proxy/application_1447984474852_0002/","\t user: root","15/11/20 23:52:47 INFO Utils: Shutdown hook called","15/11/20 23:52:47 INFO Utils: Deleting directory /tmp/spark-b72cd2bf-280b-4c57-8ceb-9e3e69ac7d0c"]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    A kimenet most a state:success állapotot jeleníti meg, ami arra utal, hogy a feladat sikeresen befejeződött.

  5. Ha szeretné, törölheti a köteget.

    curl -k --user "admin:%password%" -v -X DELETE "https://%clustername%.azurehdinsight.net/livy/batches/0"
    

    Az alábbi kódrészlethez hasonló kimenetnek kell megjelennie:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Sat, 21 Nov 2015 18:51:54 GMT
    < Content-Length: 17
    <
    {"msg":"deleted"}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    A kimenet utolsó sora azt mutatja, hogy a köteg sikeresen törölve lett. Ha töröl egy feladatot, miközben fut, a feladat is leáll. Ha olyan feladatot töröl, amely sikeresen vagy más módon befejeződött, az teljesen törli a feladat adatait.

Frissítések a Livy-konfigurációra a HDInsight 3.5-ös verziójától kezdve

A HDInsight 3.5-ös és újabb fürtjei alapértelmezés szerint letiltják a helyi fájlelérési utak használatát a mintaadatfájlok vagy jar-fájlok eléréséhez. Javasoljuk, hogy használja az elérési utat a wasbs:// JAR-fájlok vagy mintaadatfájlok fürtből való eléréséhez.

Livy-feladatok elküldése egy Azure-beli virtuális hálózaton belüli fürthöz

Ha egy HDInsight Spark-fürthöz csatlakozik egy Azure-Virtual Network belülről, közvetlenül csatlakozhat a livyhez a fürtön. Ilyen esetben a Livy-végpont URL-címe a következő http://<IP address of the headnode>:8998/batches: . Itt a 8998 az a port, amelyen a Livy fut a fürt átjárócsomópontján. A szolgáltatások nem nyilvános portokon való elérésével kapcsolatos további információkért lásd: Az Apache Hadoop-szolgáltatások által a HDInsighton használt portok.

Következő lépések