Delen via


Apache Spark REST API gebruiken om externe taken naar een HDInsight Spark-cluster te verzenden

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 in Spark moeten worden uitgevoerd. In dit artikel wordt besproken hoe je Livy kunt gebruiken om batchopdrachten in te dienen. De codefragmenten in dit artikel gebruiken cURL om REST API-aanroepen te maken naar het Livy Spark-eindpunt.

Vereiste voorwaarden

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 is gekoppeld aan het cluster. U kunt AzCopy, een opdrachtregelprogramma, gebruiken om dit te doen. Er zijn verschillende andere clients die u kunt gebruiken om gegevens te uploaden. Meer informatie hierover vindt u in Gegevens uploaden voor Apache Hadoop-taken 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 op 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 verwijderen met batch-id 5.

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 in het cluster worden uitgevoerd. Hier volgen enkele voorbeelden.

  • Als de Livy-service uitvalt nadat u een taak op afstand naar een Spark-cluster hebt verzonden, blijft de taak op de achtergrond worden uitgevoerd. Wanneer Livy weer operationeel is, wordt de status van de taak hersteld en gerapporteerd.
  • Jupyter Notebooks voor HDInsight worden mogelijk gemaakt door Livy in de back-end. Als een notebook een Spark-taak uitvoert en de Livy-service opnieuw wordt gestart, blijft het notebook de codecellen uitvoeren.

Een voorbeeld weergeven

In deze sectie bekijken we voorbeelden om Livy Spark te gebruiken om 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 HDInsight Spark-cluster. Bij de volgende stappen wordt ervan uitgegaan:

  • U hebt het jar-bestand van de toepassing al gekopieerd naar het opslagaccount dat is gekoppeld aan het cluster.
  • U hebt CuRL geïnstalleerd op de computer waarop u deze stappen uitvoert.

Voer de volgende stappen uit:

  1. Voor gebruiksgemak stelt u omgevingsvariabelen in. Dit voorbeeld is gebaseerd op een Windows-omgeving en wijzigt variabelen indien nodig voor uw omgeving. Vervang CLUSTERNAME en PASSWORD door de 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 uitvoert die Livy voor het eerst gebruikt, moet de uitvoer nul retourneren.

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

    U moet een uitvoer krijgen die vergelijkbaar is met 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 hoe op de laatste regel in de uitvoer totaal:0 staat, wat suggereert dat er geen actieve batches worden uitgevoerd.

  3. Laten we nu een batchtaak indienen. In het volgende fragment wordt een invoerbestand (input.txt) gebruikt om de JAR-naam en de klassenaam als parameters door te geven. Als u deze stappen uitvoert vanaf een Windows-computer, is het gebruik van een invoerbestand de aanbevolen methode.

    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 worden als volgt gedefinieerd:

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

    U zou een uitvoer moeten zien die lijkt op het volgende fragment:

    < 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 hoe op de laatste regel van de uitvoer de status :start staat. Het zegt 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"
    

    U zou een uitvoer moeten zien die lijkt op het volgende fragment:

    < 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
    

    De uitvoer toont nu state:success, 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"
    

    U zou een uitvoer moeten zien die lijkt op het volgende fragment:

    < 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
    

    Op de laatste regel van de uitvoer ziet u dat de batch is verwijderd. Als u een taak verwijdert terwijl deze wordt uitgevoerd, wordt de taak ook gedood. Als u een taak verwijdert die is voltooid, succesvol of niet, worden de taakgegevens volledig verwijderd.

Updates voor Livy-configuratie vanaf HDInsight 3.5-versie

HDInsight 3.5-clusters en hoger schakelen standaard het gebruik van lokale bestandspaden uit voor toegang tot voorbeeldgegevensbestanden of JAR's. U wordt aangeraden in plaats daarvan het wasbs:// pad te gebruiken voor toegang tot JAR's of voorbeeldgegevensbestanden van het cluster.

Livy-taken verzenden voor een cluster binnen een virtueel Azure-netwerk

Als u vanuit een virtueel Azure-netwerk 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 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