Apache Spark REST API gebruiken voor het verzenden van externe taken naar een HDInsight Spark-cluster
Meer informatie over het gebruik van Apache Livy, de Apache Spark REST API, die wordt gebruikt voor het verzenden van externe taken naar een Azure HDInsight Spark-cluster. Zie Apache Livy voor gedetailleerde documentatie.
U kunt Livy gebruiken om interactieve Spark-shells uit te voeren of batchtaken te verzenden die op Spark moeten worden uitgevoerd. In dit artikel wordt beschreven hoe u Livy kunt gebruiken om batchtaken te verzenden. De fragmenten in dit artikel gebruiken cURL om REST API-aanroepen naar het Livy Spark-eindpunt te maken.
Vereisten
Een Apache Spark-cluster in HDInsight. Zie Apache Spark-clusters maken in Azure HDInsight voor instructies.
Een Apache Livy Spark-batchtaak verzenden
Voordat u een batchtaak verzendt, moet u het jar-bestand van de toepassing uploaden in de clusteropslag die aan het cluster is gekoppeld. Dit kan met AzCopy, een opdrachtregelprogramma. Er zijn verschillende andere clients die u kunt gebruiken om gegevens te uploaden. Meer informatie hierover vindt u in Gegevens voor Apache Hadoop-taken uploaden 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"
Voorbeelden
Als het JAR-bestand zich in de clusteropslag bevindt (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"
Als u de jar-bestandsnaam en de klassenaam wilt doorgeven als onderdeel van een invoerbestand (in dit voorbeeld 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"
Informatie ophalen over Livy Spark-batches die worden uitgevoerd op het cluster
Syntaxis:
curl -k --user "admin:password" -v -X GET "https://<spark_cluster_name>.azurehdinsight.net/livy/batches"
Voorbeelden
Als u alle Livy Spark-batches wilt ophalen die op het cluster worden uitgevoerd:
curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
Als u een specifieke batch met een bepaalde batch-id wilt ophalen
curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches/{batchId}"
Een Livy Spark-batchtaak verwijderen
curl -k --user "admin:mypassword1!" -v -X DELETE "https://<spark_cluster_name>.azurehdinsight.net/livy/batches/{batchId}"
Voorbeeld
Een batchtaak met batch-id 5
verwijderen.
curl -k --user "admin:mypassword1!" -v -X DELETE "https://mysparkcluster.azurehdinsight.net/livy/batches/5"
Livy Spark en hoge beschikbaarheid
Livy biedt hoge beschikbaarheid voor Spark-taken die op het cluster worden uitgevoerd. Hier volgen enkele voorbeelden.
- Als de Livy-service uitvalt nadat u een taak op afstand hebt verzonden naar een Spark-cluster, blijft de taak op de achtergrond worden uitgevoerd. Wanneer Livy een back-up maakt, wordt de status van de taak hersteld en wordt deze weer gerapporteerd.
- Jupyter Notebooks voor HDInsight worden mogelijk gemaakt door Livy in de back-end. Als op een notebook een Spark-taak wordt uitgevoerd en de Livy-service opnieuw wordt gestart, blijven de codecellen in het notebook worden uitgevoerd.
Voorbeeld weergeven
In deze sectie bekijken we voorbeelden om Livy Spark te gebruiken om een batchtaak te verzenden, de voortgang van de taak te controleren en deze vervolgens te verwijderen. De toepassing die we in dit voorbeeld gebruiken, is de toepassing die is ontwikkeld in het artikel Een zelfstandige Scala-toepassing maken en uitvoeren op een HDInsight Spark-cluster. Bij de stappen hier wordt ervan uitgegaan dat:
- U hebt al via het jar-bestand van de toepassing gekopieerd naar het opslagaccount dat aan het cluster is gekoppeld.
- CuRL is geïnstalleerd op de computer waarop u deze stappen probeert uit te voeren.
Voer de volgende stappen uit:
Voor het gebruiksgemak stelt u omgevingsvariabelen in. Dit voorbeeld is gebaseerd op een Windows-omgeving en wijzig de variabelen indien nodig voor uw omgeving. Vervang , en
PASSWORD
doorCLUSTERNAME
de juiste waarden.set clustername=CLUSTERNAME set password=PASSWORD
Controleer of Livy Spark wordt uitgevoerd op het cluster. We kunnen dit doen door een lijst met actieve batches op te halen. Als u een taak voor het eerst uitvoert met Livy, moet de uitvoer nul retourneren.
curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches"
Als het goed is, krijgt u een uitvoer die lijkt op het volgende codefragment:
< 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
U ziet dat op de laatste regel in de uitvoer total:0 staat, wat wijst op geen actieve batches.
Laten we nu een batchtaak verzenden. In het volgende codefragment wordt een invoerbestand (input.txt) gebruikt om de JAR-naam en de klassenaam door te geven als parameters. Als u deze stappen uitvoert vanaf een Windows-computer, wordt het gebruik van een invoerbestand aanbevolen.
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"
De parameters in het bestand input.txt zijn als volgt gedefinieerd:
{ "file":"wasbs:///example/jars/SparkSimpleApp.jar", "className":"com.microsoft.spark.example.WasbIOTest" }
Als het goed is, wordt ongeveer het volgende codefragment weergegeven:
< 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
U ziet dat op de laatste regel van de uitvoer status:starten staat. Er staat ook , id:0. Hier is 0 de batch-id.
U kunt nu de status van deze specifieke batch ophalen met behulp van de batch-id.
curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches/0"
Als het goed is, wordt ongeveer het volgende codefragment weergegeven:
< 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
In de uitvoer wordt nu state:success weergegeven, wat aangeeft dat de taak is voltooid.
Als u wilt, kunt u de batch nu verwijderen.
curl -k --user "admin:%password%" -v -X DELETE "https://%clustername%.azurehdinsight.net/livy/batches/0"
Als het goed is, wordt ongeveer het volgende codefragment weergegeven:
< 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
De laatste regel van de uitvoer laat zien dat de batch is verwijderd. Als u een taak verwijdert terwijl deze wordt uitgevoerd, wordt de taak ook beëindigd. Als u een taak verwijdert die is voltooid, met succes of anderszins, worden de taakgegevens volledig verwijderd.
Updates naar Livy-configuratie vanaf HDInsight 3.5-versie
HDInsight 3.5-clusters en hoger schakelt standaard het gebruik van lokale bestandspaden uit voor toegang tot voorbeeldgegevensbestanden of JAR's. We raden u aan om in plaats daarvan het wasbs://
pad te gebruiken om toegang te krijgen tot JAR-bestanden of voorbeeldgegevensbestanden vanuit het cluster.
Livy-taken verzenden voor een cluster in een virtueel Azure-netwerk
Als u vanuit een Azure-Virtual Network verbinding maakt met een HDInsight Spark-cluster, kunt u rechtstreeks verbinding maken met Livy in het cluster. In dat geval is http://<IP address of the headnode>:8998/batches
de URL voor het Livy-eindpunt . Hier is 8998 de poort waarop Livy wordt uitgevoerd op het hoofdknooppunt van het cluster. Zie Poorten die worden gebruikt door Apache Hadoop-services in HDInsight voor meer informatie over het openen van services op niet-openbare poorten.