Pomocí rozhraní Apache Spark REST API můžete odesílat vzdálené úlohy ke clusteru HDInsight SparkUse Apache Spark REST API to submit remote jobs to an HDInsight Spark cluster

Další informace o použití Apache Livy, Apache Spark rozhraní REST API, které se používá k odeslání vzdálené úlohy do clusteru Azure HDInsight Spark.Learn how to use Apache Livy, the Apache Spark REST API, which is used to submit remote jobs to an Azure HDInsight Spark cluster. Podrobnou dokumentaci najdete v tématu https://livy.incubator.apache.org/ .For detailed documentation, see https://livy.incubator.apache.org/.

Livy můžete použít ke spuštění interaktivních Spark prostředí nebo odesílání úloh služby batch běžet ve Sparku.You can use Livy to run interactive Spark shells or submit batch jobs to be run on Spark. Tento článek pojednává o pomocí Livy odesílat úlohy služby batch.This article talks about using Livy to submit batch jobs. Fragmenty kódu v tomto článku používáme nástroj cURL k volání rozhraní REST API ke koncovému bodu Livy Spark.The snippets in this article use cURL to make REST API calls to the Livy Spark endpoint.

PožadavkyPrerequisites

Odeslat úlohu služby batch Apache Livy SparkSubmit an Apache Livy Spark batch job

Před odesláním úlohy služby batch, musíte nahrát soubor jar aplikace v úložišti clusteru přidružené ke clusteru.Before you submit a batch job, you must upload the application jar on the cluster storage associated with the cluster. Můžete použít AzCopy, nástroje příkazového řádku, Uděláte to tak.You can use AzCopy, a command-line utility, to do so. Existují různé klienty, které vám umožní nahrát data.There are various other clients you can use to upload data. Můžete najít další informace o nich v nahrávání dat pro úlohy Apache Hadoop v HDInsight.You can find more about them at Upload data for Apache Hadoop jobs in HDInsight.

curl -k --user "<hdinsight user>:<user 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říkladyExamples

  • Pokud je soubor .JAR v úložišti clusteru (WASB)If the jar file is on the cluster storage (WASB)

    curl -k --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST -d '{ "file":"wasb://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"
    
  • Pokud chcete předat název souboru jar a classname jako součást vstupní soubor (v tomto příkladu 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"
    

Získejte informace o dávky Livy Spark spuštěné v clusteruGet information on Livy Spark batches running on the cluster

Syntaxe:Syntax:

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

PříkladyExamples

  • Pokud chcete načíst všechny listy Livy Spark spuštěné v clusteru: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" 
    
  • Pokud chcete načíst konkrétní dávka s ID daného dávkyIf 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}"
    

Odstranit úlohu služby batch Livy SparkDelete a Livy Spark batch job

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

Příklad:Example

Odstraňuje se úloha služby batch s ID dávky 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 a vysoké dostupnostiLivy Spark and high-availability

Livy poskytuje vysokou dostupnost pro Spark úloh spuštěných v clusteru.Livy provides high-availability for Spark jobs running on the cluster. Tady je několik příkladů.Here is a couple of examples.

  • Pokud službu Livy přestane fungovat po odeslání úlohy vzdáleně ke clusteru Spark, úloha dál běžet na pozadí.If the Livy service goes down after you have submitted a job remotely to a Spark cluster, the job continues to run in the background. Při zálohování Livy obnoví stav úlohy a sestavy ji zpět.When Livy is back up, it restores the status of the job and reports it back.
  • Poznámkové bloky Jupyter pro HDInsight využívají Livy v back-endu.Jupyter notebooks for HDInsight are powered by Livy in the backend. Pokud poznámkového bloku běží úloha Sparku a získá restartována služba Livy, zůstane spuštěný buňky kódu poznámkového bloku.If a notebook is running a Spark job and the Livy service gets restarted, the notebook continues to run the code cells.

Zobrazit příkladShow me an example

V této části se podíváme na příklady se sparkem Livy k odeslání úlohy služby batch, sledovat průběh úlohy a pak ho odstraňte.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. Aplikace v tomto příkladu používáme je vyvinutý v tomto článku vytvoření samostatné aplikace Scala a ke spuštění v clusteru HDInsight Spark.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. Tady postup předpokládá, že:The steps here assume that:

  • Již zkopírovali jste přes jar aplikace k účtu úložiště přidruženého clusteru.You have already copied over the application jar to the storage account associated with the cluster.
  • Máte nainstalovaný na počítači, ve kterém chcete tyto kroky CuRL.You have CuRL installed on the computer where you are trying these steps.

Proveďte následující kroky:Perform the following steps:

  1. Dejte nám prosím nejdřív ověřte, že Livy Spark běží v clusteru.Let us first verify that Livy Spark is running on the cluster. Jsme to tak, že načítá se seznam spuštění dávky.We can do so by getting a list of running batches. Pokud používáte úlohu pomocí Livy poprvé, výstup by měl vrátit nula.If you are running a job using Livy for the first time, the output should return zero.

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

    Měl zobrazit výstup podobný následujícímu fragmentu kódu: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
    

    Všimněte si, jak uvádí, že poslední řádek ve výstupu celkem: 0, takže je možné žádná spuštění dávek.Notice how the last line in the output says total:0, which suggests no running batches.

  2. Dejte nám odešlete úlohu služby batch.Let us now submit a batch job. Následující fragment kódu používá vstupní soubor (input.txt) k předání názvu jar a názvu třídy jako parametry.The following snippet uses an input file (input.txt) to pass the jar name and the class name as parameters. Pokud používáte tyto kroky z počítače Windows, pomocí vstupního souboru je doporučený postup.If you are running these steps from a Windows computer, using an input file is the recommended approach.

    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"
    

    Parametry v souboru input.txt jsou definovány takto:The parameters in the file input.txt are defined as follows:

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

    Zobrazený výstup by měl vypadat přibližně jako následující fragment kódu: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
    

    Všimněte si, jak uvádí, že poslední řádek výstupu stavu: spouští se.Notice how the last line of the output says state:starting. Také říká, id: 0.It also says, id:0. Tady 0 je ID dávky.Here, 0 is the batch ID.

  3. Nyní můžete načíst stav této konkrétní služby batch pomocí ID dávky.You can now retrieve the status of this specific batch using the batch ID.

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

    Zobrazený výstup by měl vypadat přibližně jako následující fragment kódu: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://hn0-myspar.lpel1gnnvxne3gwzqkfq5u5uzh.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
    

    Výstup teď zobrazují stav: Úspěch, takže je možné, že se úloha úspěšně dokončila.The output now shows state:success, which suggests that the job was successfully completed.

  4. Pokud chcete, můžete nyní odstranit služby batch.If you want, you can now delete the batch.

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

    Zobrazený výstup by měl vypadat přibližně jako následující fragment kódu: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
    

    Poslední řádek výstupu ukazuje, že dávka byla úspěšně odstraněna.The last line of the output shows that the batch was successfully deleted. Odstraňuje se úloha, když je spuštěn, ukončuje také úlohu.Deleting a job, while it is running, also kills the job. Pokud odstraníte úlohu, která byla dokončena úspěšně, nebo v opačném případě odstraní informace o úloze úplně.If you delete a job that has completed, successfully or otherwise, it deletes the job information completely.

Aktualizace konfigurace Livy od verze 3.5 pro HDInsightUpdates to Livy configuration starting with HDInsight 3.5 version

HDInsight 3.5 clusterů a výše, ve výchozím nastavení, zakázat použití místní cesty souborů přístup ukázkových datových souborů nebo souborů JAR.HDInsight 3.5 clusters and above, by default, disable use of local file paths to access sample data files or jars. Doporučujeme vám použít wasb:// cesta místo pro přístup k kromě souborů JAR nebo ukázková data souborů z clusteru.We encourage you to use the wasb:// path instead to access jars or sample data files from the cluster.

Odesílání úloh Livy pro cluster v rámci virtuální sítě AzureSubmitting Livy jobs for a cluster within an Azure virtual network

Pokud se připojíte ke clusteru HDInsight Spark z v rámci virtuální sítě Azure, můžete přímo připojit k Livy v clusteru.If you connect to an HDInsight Spark cluster from within an Azure Virtual Network, you can directly connect to Livy on the cluster. V takovém případě je adresa URL pro koncový bod Livy 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. Tady 8998 je port, na kterém poběží Livy hlavního uzlu clusteru.Here, 8998 is the port on which Livy runs on the cluster headnode. Další informace o přístup ke službám na jiných veřejných portech najdete v tématu portů používaných služeb Apache Hadoop v HDInsight.For more information on accessing services on non-public ports, see Ports used by Apache Hadoop services on HDInsight.

Další postupNext steps