Ausführen von MapReduce-Aufträgen mit Apache Hadoop in HDInsight mithilfe von REST
Erfahren Sie, wie mithilfe der Apache Hive WebHCat-REST-API MapReduce-Aufträge auf einem Apache Hadoop-Cluster in HDInsight ausführen. Curl dient zum Veranschaulichen der Interaktion mit HDInsight über unformatierte HTTP-Anforderungen zum Ausführen von MapReduce-Aufträgen.
Hinweis
Wenn Sie bereits mit der Verwendung von Linux-basierten Hadoop-Servern vertraut sind, nicht jedoch mit HDInsight, lesen Sie den Artikel Informationen zu Linux-basiertem Apache Hadoop in HDInsight.
Voraussetzungen
- Ein Apache Hadoop-Cluster in HDInsight. Siehe Erstellen von Apache Hadoop-Clustern im Azure-Portal.
Optionen:
Ausführen eines MapReduce-Auftrags
Hinweis
Wenn Sie Curl oder eine andere REST-Kommunikation mit WebHCat verwenden, müssen Sie die Anforderungen authentifizieren, indem Sie den Benutzernamen und das Kennwort des Administrators des HDInsight-Clusters bereitstellen. Sie müssen den Clusternamen als Teil des URI verwenden, der zum Senden der Anforderungen an den Server genutzt wird.
Die REST-API wird durch Standardauthentifizierunggesichert. Sie sollten Anforderungen immer über HTTPS stellen, um sicherzustellen, dass Ihre Anmeldeinformationen sicher an den Server gesendet werden.
Curl
Legen Sie zur Verbesserung der Benutzerfreundlichkeit die unten aufgeführten Variablen fest. Dieses Beispiel basiert auf einer Windows-Umgebung, die nach Bedarf für Ihre Umgebung überarbeitet werden kann.
set CLUSTERNAME= set PASSWORD=
Verwenden Sie den folgenden Befehl in einer Befehlszeile, um zu überprüfen, ob Sie die Verbindung zum HDInsight-Cluster herstellen können:
curl -u admin:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
Folgende Parameter werden in diesem Befehl verwendet:
- -u: Gibt den Benutzernamen und das Kennwort für die Authentifizierung der Anforderung an
- -G: Gibt an, dass dieser Vorgang eine GET-Anforderung ist
Der Anfang des URI (
https://CLUSTERNAME.azurehdinsight.net/templeton/v1
) ist für alle Anforderungen gleich.Sie erhalten eine Antwort, die in etwa dem folgenden JSON entspricht:
{"version":"v1","status":"ok"}
Verwenden Sie den folgenden Befehl, um einen MapReduce-Auftrag zu übermitteln. Ändern Sie nach Bedarf den Pfad zu jq.
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
Das Ende des URIs (/mapreduce/jar) weist WebHCat darauf hin, dass diese Anforderung einen MapReduce-Auftrag aus einer Klasse in einer JAR-Datei startet. Folgende Parameter werden in diesem Befehl verwendet:
-
-d:
-G
wird nicht verwendet, daher verwendet die Anforderung standardmäßig die POST-Methode.-d
gibt die Datenwerte an, die mit der Anforderung gesendet werden.- user.name: Der Benutzer, der den Befehl ausführt
- jar: Der Speicherort der JAR-Datei, die die auszuführende Klasse enthält
- class: Die Klasse, die die MapReduce-Logik enthält
- arg: Die Argumente, die an den MapReduce-Auftrag übergeben werden, in diesem Fall die Eingabetextdatei und das Verzeichnis für die Ausgabe
Dieser Befehl sollte eine Auftrags-ID zurückgeben, mit der der Status des Auftrags überprüft werden kann:
job_1415651640909_0026
.-
-d:
Verwenden Sie den folgenden Befehl, um den Status des Auftrags zu prüfen. Ersetzen Sie den Wert für
JOBID
durch den tatsächlichen Wert, der im vorherigen Schritt zurückgegeben wurde. Ändern Sie den Speicherort von jq nach Bedarf.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
Legen Sie zur Verbesserung der Benutzerfreundlichkeit die unten aufgeführten Variablen fest. Ersetzen Sie
CLUSTERNAME
durch den tatsächlichen Clusternamen. Führen Sie den Befehl aus, und geben Sie nach Aufforderung das Anmeldekennwort für den Cluster ein.$clusterName="CLUSTERNAME" $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
Verwenden Sie den folgenden Befehl, um zu überprüfen, ob Sie die Verbindung mit dem HDInsight-Cluster herstellen können:
$resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" ` -Credential $creds ` -UseBasicParsing $resp.Content
Sie erhalten eine Antwort, die in etwa dem folgenden JSON entspricht:
{"version":"v1","status":"ok"}
Verwenden Sie den folgenden Befehl, um einen MapReduce-Auftrag zu übermitteln.
$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
Das Ende des URIs (/mapreduce/jar) weist WebHCat darauf hin, dass diese Anforderung einen MapReduce-Auftrag aus einer Klasse in einer JAR-Datei startet. Folgende Parameter werden in diesem Befehl verwendet:
- user.name: Der Benutzer, der den Befehl ausführt
- jar: Der Speicherort der JAR-Datei, die die auszuführende Klasse enthält
- class: Die Klasse, die die MapReduce-Logik enthält
- arg: Die Argumente, die an den MapReduce-Auftrag übergeben werden, in diesem Fall die Eingabetextdatei und das Verzeichnis für die Ausgabe
Dieser Befehl sollte eine Auftrags-ID zurückgeben, mit der der Status des Auftrags überprüft werden kann:
job_1415651640909_0026
.Verwenden Sie den folgenden Befehl, um den Status des Auftrags zu prüfen:
$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
Wenn der Auftrag abgeschlossen ist, wird der Status
SUCCEEDED
angezeigt.Sobald der Status des Auftrags in
SUCCEEDED
wechselt, können Sie die Ergebnisse des Auftrags aus Azure Blob Storage abrufen. Der mit der Abfrage übergebene Parameterstatusdir
enthält den Speicherort der Ausgabedatei. In diesem Beispiel ist dies/example/curl
. Diese Adresse speichert die Ausgabe des Auftrags unter/example/curl
im Standardspeicher des Clusters.
Sie können diese Dateien mithilfe der Azure-Befehlszeilenschnittstelle auflisten und herunterladen. Weitere Informationen zur Verwendung der Azure CLI für das Arbeiten mit Azure Blob Storage finden Sie unter Schnellstart: Erstellen, Herunterladen und Auflisten von Blobs mit der Azure-Befehlszeilenschnittstelle.
Nächste Schritte
Informationen zu anderen Möglichkeiten, wie Sie mit Hadoop in HDInsight arbeiten können:
- Verwenden von MapReduce mit Apache Hadoop in HDInsight
- Verwenden von Apache Hive mit Apache Hadoop in HDInsight
Weitere Informationen zur REST-Schnittstelle, die in diesem Artikel verwendet wird, finden Sie in der WebHCat-Referenz.