Använda REST-API:et för Apache Spark för att skicka fjärrstyrda jobb till ett HDInsight Spark-klusterUse Apache Spark REST API to submit remote jobs to an HDInsight Spark cluster

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.Learn how to use Apache Livy, the Apache Spark REST API, which is used to submit remote jobs to an Azure HDInsight Spark cluster. Detaljerad dokumentation finns i Apache livy.For detailed documentation, see Apache Livy.

Du kan använda livy för att köra interaktiva Spark-gränssnitt eller skicka batch-jobb som ska köras i Spark.You can use Livy to run interactive Spark shells or submit batch jobs to be run on Spark. Den här artikeln pratar om hur du använder livy för att skicka batch-jobb.This article talks about using Livy to submit batch jobs. Kodfragmenten i den här artikeln använder en sväng för att göra REST API anrop till livy Spark-slutpunkten.The snippets in this article use cURL to make REST API calls to the Livy Spark endpoint.

FörutsättningarPrerequisites

Ett Apache Spark-kluster i HDInsight.An Apache Spark cluster on HDInsight. Anvisningar finns i Skapa Apache Spark-kluster i Azure HDInsight.For instructions, see Create Apache Spark clusters in Azure HDInsight.

Skicka ett batch-jobb för Apache livy SparkSubmit an Apache Livy Spark batch job

Innan du skickar ett batch-jobb måste du ladda upp programmet jar på kluster lagringen som är associerad med klustret.Before you submit a batch job, you must upload the application jar on the cluster storage associated with the cluster. Du kan använda kommandoradsverktyget AzCopy till att göra detta.You can use AzCopy, a command-line utility, to do so. Det finns olika andra klienter som du kan använda för att överföra data.There are various other clients you can use to upload data. Det finns mer information om dem i Ladda upp data för Apache Hadoop-jobb i HDInsight.You can find more about them at Upload data for Apache Hadoop jobs in 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"

ExempelExamples

  • Om jar-filen finns på kluster lagringen (WASBS)If the jar file is on the cluster storage (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 klass namnet som en del av en indatafil (i det här exemplet input.txt)If you want to pass the jar filename and the classname as part of an input file (in this example, 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 klustretGet information on Livy Spark batches running on the cluster

Syntax:Syntax:

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

ExempelExamples

  • Om du vill hämta alla livy Spark-batchar som körs i klustret:If you want to retrieve all the Livy Spark batches running on the cluster:

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
    
  • Om du vill hämta en specifik batch med ett angivet batch-IDIf you want to retrieve a specific batch with a given batch ID

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

Ta bort ett livy Spark batch-jobbDelete a Livy Spark batch job

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

ExempelExample

Ta bort ett batch-jobb med batch-ID 5 .Deleting a batch job with batch ID 5.

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

Livy Spark och hög tillgänglighetLivy Spark and high-availability

Livy ger hög tillgänglighet för Spark-jobb som körs i klustret.Livy provides high-availability for Spark jobs running on the cluster. Här är några exempel.Here is a couple of examples.

  • Om livy-tjänsten slutar att fungera när du har skickat ett jobb till ett Spark-kluster fortsätter jobbet att köras i bakgrunden.If the Livy service goes down after you've submitted a job remotely to a Spark cluster, the job continues to run in the background. När livy är säkerhets kopie rad återställer den jobbets status och rapporterar det igen.When Livy is back up, it restores the status of the job and reports it back.
  • Jupyter-anteckningsböcker för HDInsight drivs av livy i Server delen.Jupyter Notebooks for HDInsight are powered by Livy in the backend. Om en bärbar dator kör ett Spark-jobb och livy-tjänsten startas om fortsätter antecknings boken att köra kod cellerna.If a notebook is running a Spark job and the Livy service gets restarted, the notebook continues to run the code cells.

Visa ett exempelShow me an example

I det här avsnittet tittar vi på exempel för att använda livy Spark för att skicka batch-jobb, övervaka jobbets förlopp och ta sedan bort det.In this section, we look at examples to use Livy Spark to submit batch job, monitor the progress of the job, and then delete it. Programmet som vi använder i det här exemplet är det som utvecklades i artikeln skapa ett fristående Scala-program och köra på HDInsight Spark-kluster.The application we use in this example is the one developed in the article Create a standalone Scala application and to run on HDInsight Spark cluster. Stegen här förutsätts:The steps here assume:

  • Du har redan kopierat över Application jar till det lagrings konto som är associerat med klustret.You've already copied over the application jar to the storage account associated with the cluster.
  • Du har spiral installerat på den dator där du provar de här stegen.You've CuRL installed on the computer where you're trying these steps.

Utför följande steg:Perform the following steps:

  1. Ange miljövariabler för enkel användning.For ease of use, set environment variables. Det här exemplet baseras på en Windows-miljö och ändrar variabler efter behov för din miljö.This example is based on a Windows environment, revise variables as needed for your environment. Ersätt CLUSTERNAME och PASSWORD med lämpliga värden.Replace CLUSTERNAME, and PASSWORD with the appropriate values.

    set clustername=CLUSTERNAME
    set password=PASSWORD
    
  2. Kontrol lera att livy Spark körs i klustret.Verify that Livy Spark is running on the cluster. Vi kan göra det genom att hämta en lista med att köra batchar.We can do so by getting a list of running batches. Om du kör ett jobb med livy för första gången ska utdata returnera noll.If you're running a job using Livy for the first time, the output should return zero.

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

    Du bör få utdata som liknar följande kodfragment:You should get an output similar to the following snippet:

    < 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 att den sista raden i utdata visar Total: 0, vilket innebär att inga batchar körs.Notice how the last line in the output says total:0, which suggests no running batches.

  3. Låt oss nu skicka ett batch-jobb.Let us now submit a batch job. I följande kodfragment används en indatafil (input.txt) för att skicka jar-namnet och klass namnet som parametrar.The following snippet uses an input file (input.txt) to pass the jar name and the class name as parameters. Om du kör de här stegen från en Windows-dator rekommenderar vi att du använder en indatafil.If you're running these steps from a Windows computer, using an input file is the recommended approach.

    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 enligt följande:The parameters in the file input.txt are defined as follows:

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

    Du bör se utdata som liknar följande fragment:You should see an output similar to the following snippet:

    < 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 status: Started.Notice how the last line of the output says state:starting. Det heter också ID: 0.It also says, id:0. Här är 0 batch-ID.Here, 0 is the batch ID.

  4. Nu kan du hämta statusen för den här batchen med batch-ID: t.You can now retrieve the status of this specific batch using the batch ID.

    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:You should see an output similar to the following snippet:

    < 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: lyckades, vilket tyder på att jobbet har slutförts.The output now shows state:success, which suggests that the job was successfully completed.

  5. Om du vill kan du nu ta bort batchen.If you want, you can now delete the batch.

    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:You should see an output similar to the following snippet:

    < 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.The last line of the output shows that the batch was successfully deleted. Om du tar bort ett jobb medan det körs, omsorg det också.Deleting a job, while it's running, also kills the job. Om du tar bort ett jobb som har slutförts, eller på annat sätt, tar bort jobb informationen helt.If you delete a job that has completed, successfully or otherwise, it deletes the job information completely.

Uppdateringar av livy-konfiguration från och med HDInsight 3,5-versionUpdates to Livy configuration starting with HDInsight 3.5 version

HDInsight 3,5-kluster och högre, som standard, inaktivera användning av lokala fil Sök vägar för att få åtkomst till exempel data-filer eller jar v7.HDInsight 3.5 clusters and above, by default, disable use of local file paths to access sample data files or jars. Vi rekommenderar att du använder wasbs:// sökvägen i stället för att komma åt jar v7 eller exempelfilerna från klustret.We encourage you to use the wasbs:// path instead to access jars or sample data files from the cluster.

Skicka livy-jobb för ett kluster i ett virtuellt Azure-nätverkSubmitting Livy jobs for a cluster within an Azure virtual network

Om du ansluter till ett HDInsight Spark-kluster från en Azure-Virtual Network, kan du ansluta direkt till livy i klustret.If you connect to an HDInsight Spark cluster from within an Azure Virtual Network, you can directly connect to Livy on the cluster. I sådana fall är URL: en för livy-slutpunkten http://<IP address of the headnode>:8998/batches .In such a case, the URL for Livy endpoint is http://<IP address of the headnode>:8998/batches. Här är 8998 den port där livy körs på klustrets huvudnoden.Here, 8998 is the port on which Livy runs on the cluster headnode. Mer information om hur du ansluter till tjänster på icke-offentliga portar finns i portar som används av Apache Hadoop Services i HDInsight.For more information on accessing services on non-public ports, see Ports used by Apache Hadoop services on HDInsight.

Nästa stegNext steps