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
- Cluster Apache Hadoop ve službě HDInsight. Viz Vytváření clusterů Apache Hadoop pomocí Azure Portal.
Jednu z těchto možností:
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
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=
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"}
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
.-
-d:
Pokud chcete zkontrolovat stav úlohy, použijte následující příkaz. Nahraďte hodnotu pro
JOBID
skuteč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
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"
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"}
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
.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
Pokud je úloha dokončená, vrátí se stav
SUCCEEDED
.Když se stav úlohy změní na
SUCCEEDED
, můžete načíst výsledky úlohy ze služby Azure Blob Storage. Parametrstatusdir
předaný s dotazem obsahuje umístění výstupního souboru. V tomto příkladu je/example/curl
umí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:
- Použití MapReduce s Apache Hadoopem ve službě HDInsight
- Použití Apache Hivu s Apache 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.