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:
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
CLUSTERNAME
a ésPASSWORD
a értéket a megfelelő értékekre.set clustername=CLUSTERNAME set password=PASSWORD
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.
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.
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.
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.