Sdílet prostřednictvím


Spouštění úloh MapReduce pomocí Apache Hadoopu ve službě HDInsight pomocí REST

Naučte se používat rozhraní REST API Apache Hive WebHCat ke spouštění úloh MapReduce v clusteru Apache Hadoop v clusteru HDInsight. Curl se používá k předvedení toho, jak můžete pracovat se službou HDInsight pomocí nezpracovaných požadavků HTTP ke spouštění úloh MapReduce.

Poznámka:

Pokud už znáte použití linuxových serverů Hadoop, ale s HDInsight začínáte, přečtěte si, co potřebujete vědět o Apache Hadoopu založeném na Linuxu v dokumentu HDInsight .

Požadavky

Buď:

  • Windows PowerShell nebo
  • Curl s jq

Spuštění úlohy MapReduce

Poznámka:

Pokud používáte Curl nebo jakoukoli jinou komunikaci REST s WebHCat, musíte požadavky ověřit zadáním uživatelského jména a hesla správce clusteru HDInsight. Název clusteru musíte použít jako součást identifikátoru URI, který se používá k odesílání požadavků na server.

Rozhraní REST API je zabezpečené pomocí základního ověřování přístupu. Vždy byste měli posílat žádosti pomocí protokolu HTTPS, abyste zajistili, že se vaše přihlašovací údaje bezpečně posílají na server.

Curl

  1. Pro usnadnění použití nastavte níže uvedené proměnné. Tento příklad je založený na prostředí Systému Windows, podle potřeby revidujte ho pro vaše prostředí.

    set CLUSTERNAME=
    set PASSWORD=
    
  2. Z příkazového řádku pomocí následujícího příkazu ověřte, že se můžete připojit ke clusteru HDInsight:

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

    Parametry použité v tomto příkazu jsou následující:

    • -u: Označuje uživatelské jméno a heslo použité k ověření žádosti.
    • -G: Označuje, že tato operace je požadavkem GET.

    Začátek identifikátoru URI https://CLUSTERNAME.azurehdinsight.net/templeton/v1je stejný pro všechny požadavky.

    Obdržíte odpověď podobnou následujícímu formátu JSON:

    {"version":"v1","status":"ok"}
    
  3. K odeslání úlohy MapReduce použijte následující příkaz. Podle potřeby upravte cestu na 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
    

    Konec identifikátoru URI (/mapreduce/jar) informuje WebHCat, že tento požadavek spustí úlohu MapReduce z třídy v souboru JAR. Parametry použité v tomto příkazu jsou následující:

    • -d: -G nepoužívá se, takže požadavek se použije jako výchozí pro metodu POST. -d určuje datové hodnoty, které se odesílají s požadavkem.
      • user.name: Uživatel, který spouští příkaz
      • jar: Umístění souboru JAR obsahujícího třídu, která se má spustit.
      • třída: Třída, která obsahuje logiku MapReduce
      • arg: Argumenty, které mají být předány do úlohy MapReduce. V tomto případě vstupní textový soubor a adresář, které se používají pro výstup.

    Tento příkaz by měl vrátit ID úlohy, které lze použít ke kontrole stavu úlohy: job_1415651640909_0026.

  4. Pokud chcete zkontrolovat stav úlohy, použijte následující příkaz. Nahraďte hodnotu JOBIDskutečnou hodnotou vrácenou v předchozím kroku. Podle potřeby upravte umístění jq .

    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. Pro usnadnění použití nastavte níže uvedené proměnné. Nahraďte CLUSTERNAME skutečným názvem clusteru. Po zobrazení výzvy spusťte příkaz a zadejte přihlašovací heslo clusteru.

    $clusterName="CLUSTERNAME"
    $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
    
  2. Pomocí následujícího příkazu ověřte, že se můžete připojit ke clusteru HDInsight:

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

    Obdržíte odpověď podobnou následujícímu formátu JSON:

    {"version":"v1","status":"ok"}
    
  3. Pokud chcete odeslat úlohu MapReduce, použijte následující příkaz:

    $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
    

    Konec identifikátoru URI (/mapreduce/jar) informuje WebHCat, že tento požadavek spustí úlohu MapReduce z třídy v souboru JAR. Parametry použité v tomto příkazu jsou následující:

    • user.name: Uživatel, který spouští příkaz
    • jar: Umístění souboru JAR obsahujícího třídu, která se má spustit.
    • třída: Třída, která obsahuje logiku MapReduce
    • arg: Argumenty, které mají být předány do úlohy MapReduce. V tomto případě vstupní textový soubor a adresář, které se používají pro výstup.

    Tento příkaz by měl vrátit ID úlohy, které lze použít ke kontrole stavu úlohy: job_1415651640909_0026.

  4. Pokud chcete zkontrolovat stav úlohy, použijte následující příkaz:

    $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
    

Obě metody

  1. Pokud je úloha dokončená, vrácený stav je SUCCEEDED.

  2. Když se stav úlohy změní na SUCCEEDED, můžete načíst výsledky úlohy z úložiště objektů blob v Azure. Parametr statusdir předaný s dotazem obsahuje umístění výstupního souboru. V tomto příkladu je umístění /example/curl. Tato adresa ukládá výstup úlohy do výchozího úložiště clusterů na /example/curladrese .

Tyto soubory můžete vypsat a stáhnout pomocí Azure CLI. Další informace o práci se službou Azure Blob Storage pomocí Azure CLI najdete v rychlém startu: Vytvoření, stažení a výpis objektů blob pomocí Azure CLI.

Další kroky

Informace o dalších způsobech práce se systémem Hadoop ve službě HDInsight:

Další informace o rozhraní REST, které se používá v tomto článku, naleznete v tématu WebHCat Reference.