Köra MapReduce-jobb med Apache Hadoop på HDInsight med HJÄLP av REST
Lär dig hur du använder Apache Hive WebHCat REST API för att köra MapReduce-jobb på ett Apache Hadoop på HDInsight-kluster. Curl används för att visa hur du kan interagera med HDInsight med hjälp av råa HTTP-begäranden för att köra MapReduce-jobb.
Anteckning
Om du redan är bekant med att använda Linux-baserade Hadoop-servrar, men du är nybörjare på HDInsight, kan du läsa dokumentet Vad du behöver veta om Linux-baserade Apache Hadoop i HDInsight .
Förutsättningar
- Ett Apache Hadoop-kluster i HDInsight. Se Skapa Apache Hadoop-kluster med hjälp av Azure Portal.
Antingen:
Köra ett MapReduce-jobb
Anteckning
När du använder Curl eller någon annan REST-kommunikation med WebHCat måste du autentisera begäranden genom att ange användarnamn och lösenord för HDInsight-klusteradministratören. Du måste använda klusternamnet som en del av den URI som används för att skicka begäranden till servern.
REST-API:et skyddas med grundläggande åtkomstautentisering. Du bör alltid göra begäranden med HTTPS för att säkerställa att dina autentiseringsuppgifter skickas på ett säkert sätt till servern.
Curl
För enkel användning anger du variablerna nedan. Det här exemplet baseras på en Windows-miljö och revideras efter behov för din miljö.
set CLUSTERNAME= set PASSWORD=
Använd följande kommando från en kommandorad för att verifiera att du kan ansluta till ditt HDInsight-kluster:
curl -u admin:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
De parametrar som används i det här kommandot är följande:
- -u: Anger användarnamnet och lösenordet som används för att autentisera begäran
- -G: Anger att den här åtgärden är en GET-begäran
Början av URI:n,
https://CLUSTERNAME.azurehdinsight.net/templeton/v1
, är densamma för alla begäranden.Du får ett svar som liknar följande JSON:
{"version":"v1","status":"ok"}
Om du vill skicka ett MapReduce-jobb använder du följande kommando. Ändra sökvägen till jq efter behov.
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
Slutet på URI:n (/mapreduce/jar) meddelar WebHCat att den här begäran startar ett MapReduce-jobb från en klass i en jar-fil. De parametrar som används i det här kommandot är följande:
-
-d:
-G
används inte, så begäran är standard för POST-metoden.-d
anger de datavärden som skickas med begäran.- user.name: Användaren som kör kommandot
- jar: Platsen för jar-filen som innehåller klassen som ska köras
- klass: Klassen som innehåller MapReduce-logiken
- arg: Argumenten som ska skickas till MapReduce-jobbet. I det här fallet indatatextfilen och katalogen som används för utdata
Det här kommandot ska returnera ett jobb-ID som kan användas för att kontrollera jobbets status:
job_1415651640909_0026
.-
-d:
Använd följande kommando för att kontrollera jobbets status. Ersätt värdet för
JOBID
med det faktiska värdet som returnerades i föregående steg. Ändra jq-platsen efter behov.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
För enkel användning anger du variablerna nedan. Ersätt
CLUSTERNAME
med ditt faktiska klusternamn. Kör kommandot och ange lösenordet för klusterinloggning när du uppmanas att göra det.$clusterName="CLUSTERNAME" $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
Använd följande kommando för att kontrollera att du kan ansluta till ditt HDInsight-kluster:
$resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" ` -Credential $creds ` -UseBasicParsing $resp.Content
Du får ett svar som liknar följande JSON:
{"version":"v1","status":"ok"}
Om du vill skicka ett MapReduce-jobb använder du följande kommando:
$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
Slutet på URI:n (/mapreduce/jar) meddelar WebHCat att den här begäran startar ett MapReduce-jobb från en klass i en jar-fil. De parametrar som används i det här kommandot är följande:
- user.name: Användaren som kör kommandot
- jar: Platsen för jar-filen som innehåller klassen som ska köras
- klass: Klassen som innehåller MapReduce-logiken
- arg: Argumenten som ska skickas till MapReduce-jobbet. I det här fallet indatatextfilen och katalogen som används för utdata
Det här kommandot ska returnera ett jobb-ID som kan användas för att kontrollera jobbets status:
job_1415651640909_0026
.Om du vill kontrollera jobbets status använder du följande kommando:
$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
Båda metoderna
Om jobbet är klart är
SUCCEEDED
tillståndet som returneras .När jobbets tillstånd har ändrats till
SUCCEEDED
kan du hämta resultatet av jobbet från Azure Blob Storage. Parameternstatusdir
som skickas med frågan innehåller platsen för utdatafilen. I det här exemplet är/example/curl
platsen . Den här adressen lagrar jobbets utdata i klustrens standardlagring på/example/curl
.
Du kan lista och ladda ned dessa filer med hjälp av Azure CLI. Mer information om hur du använder Azure CLI för att arbeta med Azure Blob Storage finns i Snabbstart: Skapa, ladda ned och lista blobar med Azure CLI.
Nästa steg
Information om andra sätt att arbeta med Hadoop på HDInsight:
Mer information om REST-gränssnittet som används i den här artikeln finns i WebHCat-referensen.