Przesyłanie zadań zdalnych do klastra usługi HDInsight Spark przy użyciu interfejsu API REST platformy Apache Spark

Dowiedz się, jak używać usługi Apache Livy, interfejsu API REST platformy Apache Spark, który służy do przesyłania zadań zdalnych do klastra Spark usługi Azure HDInsight. Aby uzyskać szczegółową dokumentację, zobacz Apache Livy.

Za pomocą usługi Livy można uruchamiać interaktywne powłoki spark lub przesyłać zadania wsadowe do uruchomienia na platformie Spark. W tym artykule omówiono używanie usługi Livy do przesyłania zadań wsadowych. Fragmenty kodu w tym artykule używają biblioteki cURL do tworzenia wywołań interfejsu API REST do punktu końcowego usługi Livy Spark.

Wymagania wstępne

Klaster Apache Spark w usłudze HDInsight. Aby uzyskać instrukcje, zobacz Tworzenie klastra platformy Apache Spark w usłudze Azure HDInsight.

Przesyłanie zadania wsadowego apache Livy Spark

Przed przesłaniem zadania wsadowego należy przekazać plik JAR aplikacji do magazynu klastra skojarzonego z klastrem. Możesz to zrobić za pomocą narzędzia wiersza polecenia AzCopy. Istnieje wiele innych klientów, których można użyć do przekazywania danych. Więcej informacji na ten temat można znaleźć w artykule Przekazywanie danych dla zadań Apache Hadoop w usłudze 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"

Przykłady

  • Jeśli plik jar znajduje się w magazynie klastra (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"
    
  • Jeśli chcesz przekazać nazwę pliku jar i nazwę klasy jako część pliku wejściowego (w tym przykładzie 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"
    

Uzyskiwanie informacji o partiach usługi Livy Spark uruchomionych w klastrze

Składnia:

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

Przykłady

  • Jeśli chcesz pobrać wszystkie partie usługi Livy Spark uruchomione w klastrze:

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
    
  • Jeśli chcesz pobrać określoną partię z danym identyfikatorem partii

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

Usuwanie zadania wsadowego usługi Livy Spark

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

Przykład

Usuwanie zadania wsadowego o identyfikatorze 5wsadowym .

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

Usługa Livy Spark i wysoka dostępność

Usługa Livy zapewnia wysoką dostępność zadań platformy Spark uruchomionych w klastrze. Oto kilka przykładów.

  • Jeśli usługa Livy ulegnie awarii po przesłaniu zadania zdalnie do klastra Spark, zadanie będzie nadal działać w tle. Po utworzeniu kopii zapasowej usługi Livy przywraca stan zadania i zgłasza je z powrotem.
  • Notesy Jupyter dla usługi HDInsight są obsługiwane przez usługę Livy w zapleczu. Jeśli notes uruchamia zadanie platformy Spark, a usługa Livy zostanie uruchomiona ponownie, notes będzie nadal uruchamiać komórki kodu.

Pokaż przykład

W tej sekcji przyjrzymy się przykładom użycia usługi Livy Spark do przesyłania zadania wsadowego, monitorowania postępu zadania, a następnie usuwania go. Aplikacja używana w tym przykładzie jest aplikacją opracowaną w artykule Create a standalone Scala application and to run on HDInsight Spark cluster (Tworzenie autonomicznej aplikacji Scala i uruchamianie jej w klastrze Spark w usłudze HDInsight). W poniższych krokach przyjęto założenie:

  • Plik jar aplikacji został już skopiowany do konta magazynu skojarzonego z klastrem.
  • Program CuRL został zainstalowany na komputerze, na którym próbujesz wykonać te kroki.

Wykonaj następujące czynności:

  1. Aby ułatwić korzystanie, ustaw zmienne środowiskowe. Ten przykład jest oparty na środowisku systemu Windows, popraw zmienne zgodnie z potrzebami środowiska. Zastąp CLUSTERNAMEwartości , i PASSWORD odpowiednimi wartościami.

    set clustername=CLUSTERNAME
    set password=PASSWORD
    
  2. Sprawdź, czy platforma Livy Spark jest uruchomiona w klastrze. Możemy to zrobić, uzyskując listę uruchomionych partii. Jeśli uruchamiasz zadanie przy użyciu usługi Livy po raz pierwszy, dane wyjściowe powinny zwrócić zero.

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

    Powinny zostać wyświetlone dane wyjściowe podobne do następującego fragmentu kodu:

    < 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
    

    Zwróć uwagę, że ostatni wiersz w danych wyjściowych wskazuje wartość total:0, co sugeruje brak uruchomionych partii.

  3. Teraz prześlijmy zadanie wsadowe. Poniższy fragment kodu używa pliku wejściowego (input.txt), aby przekazać nazwę pliku jar i nazwę klasy jako parametry. Jeśli wykonujesz te kroki z komputera z systemem Windows, zalecane jest użycie pliku wejściowego.

    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 w plikuinput.txt są definiowane w następujący sposób:

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

    Powinny pojawić się dane wyjściowe podobne do następującego fragmentu kodu:

    < 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
    

    Zwróć uwagę, jak ostatni wiersz danych wyjściowych mówi state:starting. Mówi również, id:0. W tym miejscu wartość 0 to identyfikator partii.

  4. Teraz możesz pobrać stan tej konkretnej partii przy użyciu identyfikatora partii.

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

    Powinny pojawić się dane wyjściowe podobne do następującego fragmentu kodu:

    < 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
    

    Dane wyjściowe pokazują teraz state:success, co sugeruje, że zadanie zostało ukończone pomyślnie.

  5. Jeśli chcesz, możesz teraz usunąć partię.

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

    Powinny pojawić się dane wyjściowe podobne do następującego fragmentu kodu:

    < 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
    

    Ostatni wiersz danych wyjściowych pokazuje, że partia została pomyślnie usunięta. Usunięcie zadania, gdy jest ono uruchomione, powoduje również zabicie zadania. Usunięcie zadania zakończonego pomyślnie lub w inny sposób spowoduje całkowite usunięcie informacji o zadaniu.

Aktualizacje do konfiguracji usługi Livy, począwszy od usługi HDInsight w wersji 3.5

Klastry usługi HDInsight 3.5 i nowsze domyślnie wyłączają używanie lokalnych ścieżek plików w celu uzyskania dostępu do przykładowych plików danych lub plików jar. Zachęcamy do użycia ścieżki wasbs:// w celu uzyskania dostępu do plików jar lub przykładowych plików danych z klastra.

Przesyłanie zadań usługi Livy dla klastra w sieci wirtualnej platformy Azure

Jeśli łączysz się z klastrem SPARK usługi HDInsight z poziomu usługi Azure Virtual Network, możesz połączyć się bezpośrednio z usługą Livy w klastrze. W takim przypadku adres URL punktu końcowego usługi Livy to http://<IP address of the headnode>:8998/batches. W tym miejscu numer 8998 to port, na którym działa usługa Livy w węźle głównym klastra. Aby uzyskać więcej informacji na temat uzyskiwania dostępu do usług na portach innych niż publiczne, zobacz Porty używane przez usługi Apache Hadoop w usłudze HDInsight.

Następne kroki