Odesílání vzdálených úloh do clusteru HDInsight Spark pomocí rozhraní Apache Spark REST API

Naučte se používat Apache Livy, rozhraní APACHE Spark REST API, které se používá k odesílání vzdálených úloh do clusteru Azure HDInsight Spark. Podrobnou dokumentaci najdete v tématu Apache Livy.

Pomocí Livy můžete spouštět interaktivní prostředí Sparku nebo odesílat dávkové úlohy, které se mají spustit ve Sparku. Tento článek popisuje použití Livy k odesílání dávkových úloh. Fragmenty kódu v tomto článku používají cURL k volání rozhraní REST API koncového bodu Livy Sparku.

Požadavky

Cluster Apache Spark ve službě HDInsight. Pokyny najdete v tématu Vytváření clusterů Apache Spark ve službě Azure HDInsight.

Odeslání dávkové úlohy Apache Livy Sparku

Před odesláním dávkové úlohy musíte nahrát soubor JAR aplikace do úložiště clusteru přidruženého ke clusteru. Můžete k tomu použít nástroj příkazového řádku AzCopy. K nahrání dat můžete použít různé další klienty. Další informace o nich najdete v tématu Nahrávání dat pro úlohy Apache Hadoop ve službě 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"

Příklady

  • Pokud se soubor JAR nachází v úložišti clusteru (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"
    
  • Pokud chcete předat název souboru JAR a název třídy jako součást vstupního souboru (v tomto příkladu 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ískání informací o dávkách Livy Spark spuštěných v clusteru

Syntaxe:

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

Příklady

  • Pokud chcete načíst všechny dávky Livy Spark spuštěné v clusteru:

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
    
  • Pokud chcete načíst konkrétní dávku s daným ID dávky

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

Odstranění dávkové úlohy Livy Sparku

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

Příklad

Odstranění dávkové úlohy s ID 5dávky

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

Livy Spark a vysoká dostupnost

Livy poskytuje vysokou dostupnost pro úlohy Spark spuštěné v clusteru. Tady je několik příkladů.

  • Pokud služba Livy přestane fungovat poté, co vzdáleně odešlete úlohu do clusteru Spark, úloha bude dál běžet na pozadí. Když je Livy zálohovaný, obnoví stav úlohy a hlásí ji zpět.
  • Poznámkové bloky Jupyter pro HDInsight využívají v back-endu technologii Livy. Pokud v poznámkovém bloku běží úloha Sparku a služba Livy se restartuje, bude poznámkový blok dál spouštět buňky kódu.

Zobrazit příklad

V této části se podíváme na příklady použití Livy Sparku k odeslání dávkové úlohy, sledování průběhu úlohy a jejímu odstranění. V tomto příkladu používáme aplikaci vyvinutou v článku Vytvoření samostatné aplikace Scala pro spuštění v clusteru HDInsight Spark. V těchto krocích se předpokládá:

  • Už jste zkopírovali soubor JAR aplikace do účtu úložiště přidruženého ke clusteru.
  • Na počítači, na kterém zkoušíte tyto kroky, máte nainstalovaný CuRL.

Proveďte tyto kroky:

  1. Pro usnadnění použití nastavte proměnné prostředí. Tento příklad je založený na prostředí Windows a reviduje proměnné podle potřeby pro vaše prostředí. Nahraďte CLUSTERNAMEa PASSWORD příslušnými hodnotami.

    set clustername=CLUSTERNAME
    set password=PASSWORD
    
  2. Ověřte, že v clusteru běží Livy Spark. Můžeme to udělat tak, že získáme seznam spuštěných dávek. Pokud úlohu spouštíte pomocí Livy poprvé, výstup by měl vrátit nulu.

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

    Měl by se zobrazit výstup podobný následujícímu fragmentu kódu:

    < 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, že na posledním řádku výstupu je uvedeno total:0, což naznačuje, že nejsou spuštěné dávky.

  3. Teď odešleme dávkovou úlohu. Následující fragment kódu používá vstupní soubor (input.txt) k předání názvu souboru JAR a názvu třídy jako parametrů. Pokud tyto kroky spouštíte z počítače s Windows, doporučujeme použít vstupní soubor.

    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"
    

    Parametry v souboruinput.txt jsou definovány takto:

    { "file":"wasbs:///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:

    < 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, že poslední řádek výstupu uvádí state:starting. Je tam také uvedeno id:0. Tady je ID dávky 0 .

  4. Stav této konkrétní dávky teď můžete načíst pomocí ID dávky.

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

    Zobrazený výstup by měl vypadat přibližně jako následující fragment kódu:

    < 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
    

    Výstup teď ukazuje state:success, což naznačuje, že úloha byla úspěšně dokončena.

  5. Pokud chcete, můžete dávku odstranit.

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

    Zobrazený výstup by měl vypadat přibližně jako následující fragment kódu:

    < 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. Odstraněním úlohy, která je spuštěná, se také ukončí. Pokud odstraníte úlohu, která se dokončila, úspěšně nebo jinak, úplně se odstraní informace o úloze.

Aktualizace do konfigurace Livy počínaje verzí HDInsight 3.5

Clustery HDInsight 3.5 a vyšší ve výchozím nastavení zakazují použití místních cest k souborům pro přístup k ukázkovým datovým souborům nebo souborům JAR. Doporučujeme místo toho použít wasbs:// cestu pro přístup k souborům JAR nebo ukázkovým datovým souborům z clusteru.

Odesílání úloh Livy pro cluster v rámci virtuální sítě Azure

Pokud se ke clusteru HDInsight Spark připojujete z azure Virtual Network, můžete se přímo připojit k Livy v clusteru. V takovém případě je http://<IP address of the headnode>:8998/batchesadresa URL koncového bodu Livy . Tady je port 8998 , na kterém Livy běží na hlavním uzlu clusteru. Další informace o přístupu ke službám na neveřejných portech najdete v tématu Porty používané službami Apache Hadoop ve službě HDInsight.

Další kroky