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

Antingen:

  • Windows PowerShell eller,
  • Curl med jq

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

  1. 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=
    
  2. 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"}
    
  3. 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.

  4. 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

  1. 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"
    
  2. 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"}
    
  3. 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.

  4. 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

  1. Om jobbet är klart är SUCCEEDEDtillståndet som returneras .

  2. När jobbets tillstånd har ändrats till SUCCEEDEDkan du hämta resultatet av jobbet från Azure Blob Storage. Parametern statusdir som skickas med frågan innehåller platsen för utdatafilen. I det här exemplet är /example/curlplatsen . 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.