Share via


MapReduce-taken uitvoeren met Apache Hadoop in HDInsight met behulp van REST

Meer informatie over het gebruik van de Apache Hive WebHCat REST API om MapReduce-taken uit te voeren op een Apache Hadoop in HDInsight-cluster. Curl wordt gebruikt om te laten zien hoe u met HDInsight kunt werken door onbewerkte HTTP-aanvragen te gebruiken om MapReduce-taken uit te voeren.

Notitie

Als u al bekend bent met het gebruik van Hadoop-servers op basis van Linux, maar nog niet bekend bent met HDInsight, raadpleegt u het document Wat u moet weten over Apache Hadoop op basis van Linux in HDInsight .

Vereisten

Ofwel:

  • Windows PowerShell of
  • Curl met jq

Een MapReduce-taak uitvoeren

Notitie

Wanneer u Curl of een andere REST-communicatie met WebHCat gebruikt, moet u de aanvragen verifiëren door de gebruikersnaam en het wachtwoord van de HDInsight-clusterbeheerder op te geven. U moet de clusternaam gebruiken als onderdeel van de URI die wordt gebruikt om de aanvragen naar de server te verzenden.

De REST API wordt beveiligd met basistoegangsverificatie. U moet altijd aanvragen indienen met https om ervoor te zorgen dat uw referenties veilig naar de server worden verzonden.

Curl

  1. Voor het gebruiksgemak stelt u de onderstaande variabelen in. Dit voorbeeld is gebaseerd op een Windows-omgeving. Pas deze indien nodig aan voor uw omgeving.

    set CLUSTERNAME=
    set PASSWORD=
    
  2. Gebruik een opdrachtregel met de volgende opdracht om te controleren of u verbinding met uw HDInsight-cluster kunt maken:

    curl -u admin:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
    

    In deze opdracht worden de volgende parameters gebruikt:

    • -u: geeft de gebruikersnaam en het wachtwoord aan die worden gebruikt om de aanvraag te verifiëren
    • -G: geeft aan dat deze bewerking een GET-aanvraag is

    Het begin van de URI, https://CLUSTERNAME.azurehdinsight.net/templeton/v1, is hetzelfde voor alle aanvragen.

    U ontvangt een antwoord dat lijkt op de volgende JSON:

    {"version":"v1","status":"ok"}
    
  3. Gebruik de volgende opdracht om een MapReduce-taak te verzenden. Wijzig het pad naar jq indien nodig.

    curl -u admin:%PASSWORD% -d user.name=admin ^
    -d jar=/example/jars/hadoop-mapreduce-examples.jar ^
    -d class=wordcount -d arg=/example/data/gutenberg/davinci.txt -d arg=/example/data/output ^
    https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/mapreduce/jar | ^
    C:\HDI\jq-win64.exe .id
    

    Het einde van de URI (/mapreduce/jar) vertelt WebHCat dat met deze aanvraag een MapReduce-taak wordt gestart vanuit een klasse in een JAR-bestand. In deze opdracht worden de volgende parameters gebruikt:

    • -d: -G wordt niet gebruikt, dus de aanvraag wordt standaard ingesteld op de POST-methode. -d hiermee geeft u de gegevenswaarden op die met de aanvraag worden verzonden.
      • user.name: de gebruiker die de opdracht uitvoert
      • jar: de locatie van het JAR-bestand met de klasse die moet worden uitgevoerd
      • klasse: de klasse die de MapReduce-logica bevat
      • arg: de argumenten die moeten worden doorgegeven aan de MapReduce-taak. In dit geval het invoertekstbestand en de map die worden gebruikt voor de uitvoer

    Met deze opdracht moet een taak-id worden geretourneerd die kan worden gebruikt om de status van de taak te controleren: job_1415651640909_0026.

  4. Gebruik de volgende opdracht om de status van de taak te controleren. Vervang de waarde voor JOBID door de werkelijke waarde die in de vorige stap is geretourneerd. Wijzig de locatie van jq indien nodig.

    set JOBID=job_1415651640909_0026
    
    curl -G -u admin:%PASSWORD% -d user.name=admin https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | ^
    C:\HDI\jq-win64.exe .status.state
    

PowerShell

  1. Voor het gebruiksgemak stelt u de onderstaande variabelen in. Vervang door CLUSTERNAME de werkelijke clusternaam. Voer de opdracht uit en voer het aanmeldingswachtwoord voor het cluster in wanneer u hierom wordt gevraagd.

    $clusterName="CLUSTERNAME"
    $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
    
  2. Gebruik de volgende opdracht om te controleren of u verbinding kunt maken met uw HDInsight-cluster:

    $resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" `
        -Credential $creds `
        -UseBasicParsing
    $resp.Content
    

    U ontvangt een antwoord dat lijkt op de volgende JSON:

    {"version":"v1","status":"ok"}
    
  3. Gebruik de volgende opdracht om een MapReduce-taak te verzenden:

    $reqParams = @{}
    $reqParams."user.name" = "admin"
    $reqParams.jar = "/example/jars/hadoop-mapreduce-examples.jar"
    $reqParams.class = "wordcount"
    $reqParams.arg = @()
    $reqParams.arg += "/example/data/gutenberg/davinci.txt"
    $reqparams.arg += "/example/data/output"
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/mapreduce/jar" `
       -Credential $creds `
       -Body $reqParams `
       -Method POST `
       -UseBasicParsing
    $jobID = (ConvertFrom-Json $resp.Content).id
    $jobID
    

    Het einde van de URI (/mapreduce/jar) vertelt WebHCat dat met deze aanvraag een MapReduce-taak wordt gestart vanuit een klasse in een JAR-bestand. In deze opdracht worden de volgende parameters gebruikt:

    • user.name: de gebruiker die de opdracht uitvoert
    • jar: de locatie van het JAR-bestand met de klasse die moet worden uitgevoerd
    • klasse: de klasse die de MapReduce-logica bevat
    • arg: de argumenten die moeten worden doorgegeven aan de MapReduce-taak. In dit geval het invoertekstbestand en de map die worden gebruikt voor de uitvoer

    Met deze opdracht moet een taak-id worden geretourneerd die kan worden gebruikt om de status van de taak te controleren: job_1415651640909_0026.

  4. Gebruik de volgende opdracht om de status van de taak te controleren:

    $reqParams=@{"user.name"="admin"}
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/jobs/$jobID" `
       -Credential $creds `
       -Body $reqParams `
       -UseBasicParsing
    
    # ConvertFrom-JSON can't handle duplicate names with different case
    # So change one to prevent the error
    $fixDup=$resp.Content.Replace("jobID","job_ID")
    (ConvertFrom-Json $fixDup).status.state
    

Beide methoden

  1. Als de taak is voltooid, is SUCCEEDEDde geretourneerde status .

  2. Wanneer de status van de taak is gewijzigd in SUCCEEDED, kunt u de resultaten van de taak ophalen uit Azure Blob Storage. De statusdir parameter die met de query wordt doorgegeven, bevat de locatie van het uitvoerbestand. In dit voorbeeld is /example/curlde locatie . Met dit adres wordt de uitvoer van de taak opgeslagen in de standaardopslag van clusters op /example/curl.

U kunt deze bestanden weergeven en downloaden met behulp van de Azure CLI. Zie Quickstart: Blobs maken, downloaden en vermelden met Azure CLI voor meer informatie over het gebruik van de Azure CLI om te werken met Azure Blob Storage.

Volgende stappen

Voor informatie over andere manieren waarop u met Hadoop in HDInsight kunt werken:

Zie de WebHCat-verwijzing voor meer informatie over de REST-interface die in dit artikel wordt gebruikt.