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 5
wsadowym .
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:
Aby ułatwić korzystanie, ustaw zmienne środowiskowe. Ten przykład jest oparty na środowisku systemu Windows, popraw zmienne zgodnie z potrzebami środowiska. Zastąp
CLUSTERNAME
wartości , iPASSWORD
odpowiednimi wartościami.set clustername=CLUSTERNAME set password=PASSWORD
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.
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.
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.
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.