Uruchamianie zadań MapReduce z usługą Apache Hadoop w usłudze HDInsight przy użyciu interfejsu REST

Dowiedz się, jak używać interfejsu API REST usługi Apache Hive WebHCat do uruchamiania zadań MapReduce w klastrze apache Hadoop w klastrze usługi HDInsight. Program Curl służy do zademonstrowania sposobu interakcji z usługą HDInsight przy użyciu nieprzetworzonych żądań HTTP do uruchamiania zadań MapReduce.

Uwaga

Jeśli wiesz już, jak używać serwerów Hadoop opartych na systemie Linux, ale dopiero zaczynasz korzystać z usługi HDInsight, zapoznaj się z dokumentem Co musisz wiedzieć o platformie Apache Hadoop opartej na systemie Linux w usłudze HDInsight .

Wymagania wstępne

Dowolny z następujących elementów:

  • Windows PowerShell lub,
  • Curl z jq

Uruchamianie zadania MapReduce

Uwaga

W przypadku korzystania z programu Curl lub innej komunikacji REST z usługą WebHCat należy uwierzytelnić żądania, podając nazwę użytkownika i hasło administratora klastra usługi HDInsight. Należy użyć nazwy klastra w ramach identyfikatora URI, który jest używany do wysyłania żądań do serwera.

Interfejs API REST jest zabezpieczony przy użyciu uwierzytelniania podstawowego dostępu. Zawsze należy wysyłać żądania przy użyciu protokołu HTTPS, aby upewnić się, że poświadczenia są bezpiecznie wysyłane do serwera.

Narzędzie Curl

  1. Aby ułatwić korzystanie, ustaw poniższe zmienne. Ten przykład jest oparty na środowisku systemu Windows, popraw je zgodnie z potrzebami dla danego środowiska.

    set CLUSTERNAME=
    set PASSWORD=
    
  2. W wierszu polecenia wpisz następujące polecenie, aby sprawdzić możliwość nawiązania połączenia z klastrem usługi HDInsight:

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

    W tym poleceniu są używane następujące parametry:

    • -u: wskazuje nazwę użytkownika i hasło używane do uwierzytelniania żądania
    • -G: Wskazuje, że ta operacja jest żądaniem GET

    Początek identyfikatora URI , https://CLUSTERNAME.azurehdinsight.net/templeton/v1jest taki sam dla wszystkich żądań.

    Otrzymasz odpowiedź podobną do następującego kodu JSON:

    {"version":"v1","status":"ok"}
    
  3. Aby przesłać zadanie MapReduce, użyj następującego polecenia. Zmodyfikuj ścieżkę do pliku jq zgodnie z potrzebami.

    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
    

    Koniec identyfikatora URI (/mapreduce/jar) informuje webHCat, że to żądanie uruchamia zadanie MapReduce z klasy w pliku jar. W tym poleceniu są używane następujące parametry:

    • -d: -G nie jest używany, więc żądanie jest domyślne dla metody POST. -d określa wartości danych, które są wysyłane z żądaniem.
      • user.name: użytkownik, który uruchamia polecenie
      • jar: lokalizacja pliku jar zawierającego klasę do uruchomienia
      • class: klasa zawierająca logikę MapReduce
      • arg: argumenty, które mają zostać przekazane do zadania MapReduce. W tym przypadku wejściowy plik tekstowy i katalog, który są używane dla danych wyjściowych

    To polecenie powinno zwrócić identyfikator zadania, którego można użyć do sprawdzenia stanu zadania: job_1415651640909_0026.

  4. Aby sprawdzić stan zadania, użyj następującego polecenia. Zastąp wartość wartością JOBIDrzeczywistą zwróconą w poprzednim kroku. Popraw lokalizację jq zgodnie z potrzebami.

    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. Aby ułatwić korzystanie, ustaw poniższe zmienne. Zastąp CLUSTERNAME element rzeczywistą nazwą klastra. Wykonaj polecenie i wprowadź hasło logowania klastra po wyświetleniu monitu.

    $clusterName="CLUSTERNAME"
    $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
    
  2. Użyj następującego polecenia, aby sprawdzić, czy można nawiązać połączenie z klastrem usługi HDInsight:

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

    Otrzymasz odpowiedź podobną do następującego kodu JSON:

    {"version":"v1","status":"ok"}
    
  3. Aby przesłać zadanie MapReduce, użyj następującego polecenia:

    $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
    

    Koniec identyfikatora URI (/mapreduce/jar) informuje webHCat, że to żądanie uruchamia zadanie MapReduce z klasy w pliku jar. W tym poleceniu są używane następujące parametry:

    • user.name: użytkownik, który uruchamia polecenie
    • jar: lokalizacja pliku jar zawierającego klasę do uruchomienia
    • class: klasa zawierająca logikę MapReduce
    • arg: argumenty, które mają zostać przekazane do zadania MapReduce. W tym przypadku wejściowy plik tekstowy i katalog, który są używane dla danych wyjściowych

    To polecenie powinno zwrócić identyfikator zadania, którego można użyć do sprawdzenia stanu zadania: job_1415651640909_0026.

  4. Aby sprawdzić stan zadania, użyj następującego polecenia:

    $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
    

Obie metody

  1. Jeśli zadanie zostanie ukończone, zwrócony stan to SUCCEEDED.

  2. Gdy stan zadania uległ zmianie na SUCCEEDED, możesz pobrać wyniki zadania z usługi Azure Blob Storage. Parametr statusdir przekazywany za pomocą zapytania zawiera lokalizację pliku wyjściowego. W tym przykładzie lokalizacja to /example/curl. Ten adres przechowuje dane wyjściowe zadania w domyślnym magazynie klastrów pod adresem /example/curl.

Możesz wyświetlić listę i pobrać te pliki przy użyciu interfejsu wiersza polecenia platformy Azure. Aby uzyskać więcej informacji na temat pracy z usługą Azure Blob Storage przy użyciu interfejsu wiersza polecenia platformy Azure, zobacz Szybki start: tworzenie, pobieranie i wyświetlanie listy obiektów blob za pomocą interfejsu wiersza polecenia platformy Azure.

Następne kroki

Aby uzyskać informacje o innych sposobach pracy z usługą Hadoop w usłudze HDInsight:

Aby uzyskać więcej informacji na temat interfejsu REST używanego w tym artykule, zobacz Dokumentację serwera WebHCat.