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 5verwijderen.

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:

  1. 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 door CLUSTERNAMEde juiste waarden.

    set clustername=CLUSTERNAME
    set password=PASSWORD
    
  2. 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.

  3. 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.

  4. 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.

  5. 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/batchesde 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.

Volgende stappen