Använda REST-API:et för Apache Spark för att skicka fjärrstyrda jobb till ett HDInsight Spark-kluster

Lär dig hur du använder Apache Livy, Apache Spark REST API, som används för att skicka fjärrjobb till ett Azure HDInsight Spark-kluster. Detaljerad dokumentation finns i Apache Livy.

Du kan använda Livy för att köra interaktiva Spark-gränssnitt eller skicka batchjobb som ska köras på Spark. I den här artikeln beskrivs hur du använder Livy för att skicka batchjobb. Kodfragmenten i den här artikeln använder cURL för att göra REST API-anrop till Livy Spark-slutpunkten.

Förutsättningar

Ett Apache Spark-kluster i HDInsight. Anvisningar finns i Skapa Apache Spark-kluster i Azure HDInsight.

Skicka ett Apache Livy Spark-batchjobb

Innan du skickar ett batchjobb måste du ladda upp programburken på klusterlagringen som är associerad med klustret. Du kan använda kommandoradsverktyget AzCopy till att göra detta. Det finns olika andra klienter som du kan använda för att ladda upp data. Det finns mer information om dem i Ladda upp data för Apache Hadoop-jobb i HDInsight.

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"

Exempel

  • Om jar-filen finns på klusterlagringen (WASBS)

    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"
    
  • Om du vill skicka jar-filnamnet och klassnamnet som en del av en indatafil (i det här exemplet 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"
    

Hämta information om Livy Spark-batchar som körs i klustret

Syntax:

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

Exempel

  • Om du vill hämta alla Livy Spark-batchar som körs i klustret:

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
    
  • Om du vill hämta en specifik batch med ett visst batch-ID

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

Ta bort ett Livy Spark-batchjobb

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

Exempel

Ta bort ett batchjobb med batch-ID 5.

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

Livy Spark och hög tillgänglighet

Livy ger hög tillgänglighet för Spark-jobb som körs i klustret. Här är några exempel.

  • Om Livy-tjänsten slutar fungera när du har skickat ett jobb via fjärranslutning till ett Spark-kluster fortsätter jobbet att köras i bakgrunden. När Livy säkerhetskopieras återställer det jobbets status och rapporterar tillbaka det.
  • Jupyter Notebooks för HDInsight drivs av Livy i serverdelen. Om en notebook-fil kör ett Spark-jobb och Livy-tjänsten startas om fortsätter notebook-filen att köra kodcellerna.

Visa ett exempel

I det här avsnittet tittar vi på exempel för att använda Livy Spark för att skicka batchjobb, övervaka förloppet för jobbet och sedan ta bort det. Det program som vi använder i det här exemplet är det som utvecklats i artikeln Skapa ett fristående Scala-program och köra på HDInsight Spark-kluster. Stegen här förutsätter:

  • Du har redan kopierat över programburken till lagringskontot som är associerat med klustret.
  • Du har Installerat CuRL på den dator där du provar de här stegen.

Utför följande steg:

  1. För enkel användning anger du miljövariabler. Det här exemplet baseras på en Windows-miljö och ändrar variabler efter behov för din miljö. Ersätt CLUSTERNAMEoch PASSWORD med lämpliga värden.

    set clustername=CLUSTERNAME
    set password=PASSWORD
    
  2. Kontrollera att Livy Spark körs i klustret. Det kan vi göra genom att hämta en lista över batchar som körs. Om du kör ett jobb med Livy för första gången ska utdata returnera noll.

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

    Du bör få utdata som liknar följande kodfragment:

    < 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
    

    Observera hur den sista raden i utdata säger total:0, vilket tyder på att inga batchar körs.

  3. Låt oss nu skicka ett batchjobb. Följande kodfragment använder en indatafil (input.txt) för att skicka jar-namnet och klassnamnet som parametrar. Om du kör de här stegen från en Windows-dator rekommenderar vi att du använder en indatafil.

    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"
    

    Parametrarna i filen input.txt definieras på följande sätt:

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

    Du bör se utdata som liknar följande fragment:

    < 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
    

    Observera hur den sista raden i utdata säger state:starting. Det står också ID:0. Här är 0 batch-ID:t.

  4. Nu kan du hämta statusen för den här specifika batchen med hjälp av batch-ID:t.

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

    Du bör se utdata som liknar följande fragment:

    < 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
    

    Utdata visar nu status:success, vilket tyder på att jobbet har slutförts.

  5. Om du vill kan du nu ta bort batchen.

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

    Du bör se utdata som liknar följande fragment:

    < 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
    

    Den sista raden i utdata visar att batchen har tagits bort. Om du tar bort ett jobb, medan det körs, dödas också jobbet. Om du tar bort ett jobb som har slutförts, korrekt eller på annat sätt, tas jobbinformationen bort helt.

Uppdateringar till Livy-konfiguration som börjar med HDInsight 3.5-version

HDInsight 3.5-kluster och senare inaktiverar som standard användningen av lokala filsökvägar för att komma åt exempeldatafiler eller jar-filer. Vi rekommenderar att du använder wasbs:// sökvägen i stället för att komma åt jar-filer eller exempeldatafiler från klustret.

Skicka Livy-jobb för ett kluster i ett virtuellt Azure-nätverk

Om du ansluter till ett HDInsight Spark-kluster inifrån en Azure-Virtual Network kan du ansluta direkt till Livy i klustret. I så fall är http://<IP address of the headnode>:8998/batchesURL:en för Livy-slutpunkten . Här är 8998 den port där Livy körs på klustrets huvudnod. Mer information om åtkomst till tjänster på icke-offentliga portar finns i Portar som används av Apache Hadoop-tjänster i HDInsight.

Nästa steg