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ž jste obeznámeni s používáním serverů Hadoop založených na Linuxu, ale se službou HDInsight začínáte, přečtěte si dokument Co potřebujete vědět o Apache Hadoopu založeném na Linuxu ve službě HDInsight .

Požadavky

Jednu z těchto možností:

  • 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í ověřování základního přístupu. Vždy byste měli provádět požadavky pomocí protokolu HTTPS, abyste zajistili, že se vaše přihlašovací údaje bezpečně odesílají na server.

Curl

  1. Pokud chcete snadno používat, nastavte níže uvedené proměnné. Tento příklad je založený na prostředí Windows a podle potřeby ho revidujte.

    set CLUSTERNAME=
    set PASSWORD=
    
  2. Z příkazového řádku použijte následující příkaz k ověření, zda 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í požadavku.
    • -G: Označuje, že tato operace je požadavek GET.

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

    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. 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 se nepoužívá, takže požadavek jako výchozí použije metodu POST. -d určuje hodnoty dat, které se odesílají spolu s požadavkem.
      • user.name: Uživatel, který spouští příkaz
      • jar: Umístění souboru JAR, který obsahuje třídu, která se má spustit
      • class: 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žívá 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 pro 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. Pokud chcete snadno používat, nastavte níže uvedené proměnné. Nahraďte CLUSTERNAME skutečným názvem clusteru. Spusťte příkaz a po zobrazení výzvy 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, který obsahuje třídu, která se má spustit
    • class: 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žívá 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. Ke kontrole stavu ú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átí se stav SUCCEEDED.

  2. Když se stav úlohy změní na SUCCEEDED, můžete načíst výsledky úlohy ze služby Azure Blob Storage. Parametr statusdir předaný s dotazem obsahuje umístění výstupního souboru. V tomto příkladu je /example/curlumístění . Tato adresa ukládá výstup úlohy ve výchozím úložišti clusterů na adrese /example/curl.

Tyto soubory můžete vypsat a stáhnout pomocí Azure CLI. Další informace o použití Azure CLI k práci se službou Azure Blob Storage najdete v tématu Rychlý start: Vytváření, stahování a výpis objektů blob pomocí Azure CLI.

Další kroky

Informace o dalších způsobech práce s Hadoopem ve službě HDInsight:

Další informace o rozhraní REST, které se používá v tomto článku, najdete v referenčních informacích k WebHCat.