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
- Een Apache Hadoop-cluster in HDInsight. Zie Apache Hadoop-clusters maken met behulp van Azure Portal.
Ofwel:
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
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=
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"}
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
.-
-d:
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
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"
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"}
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
.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
Als de taak is voltooid, is
SUCCEEDED
de geretourneerde status .Wanneer de status van de taak is gewijzigd in
SUCCEEDED
, kunt u de resultaten van de taak ophalen uit Azure Blob Storage. Destatusdir
parameter die met de query wordt doorgegeven, bevat de locatie van het uitvoerbestand. In dit voorbeeld is/example/curl
de 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:
- MapReduce gebruiken met Apache Hadoop in HDInsight
- Apache Hive gebruiken met Apache Hadoop in HDInsight
Zie de WebHCat-verwijzing voor meer informatie over de REST-interface die in dit artikel wordt gebruikt.