Spouštění dotazů Apache Hivu pomocí Apache Hadoopu ve službě HDInsight pomocí REST
Naučte se používat rozhraní REST API WebHCat ke spouštění dotazů Apache Hive pomocí Apache Hadoopu v clusteru Azure HDInsight.
Požadavky
Cluster Apache Hadoop ve službě HDInsight. Viz Začínáme se službou HDInsight v Linuxu.
Klient REST. Tento dokument používá Invoke-WebRequest ve Windows PowerShellu a Curl v prostředí Bash.
Pokud používáte Bash, budete také potřebovat procesor JSON příkazového řádku jq. Viz třída https://stedolan.github.io/jq/.
Základní identifikátor URI pro rozhraní REST API
Základní identifikátor URI (Uniform Resource Identifier) pro rozhraní REST API ve službě HDInsight je https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME
, kde CLUSTERNAME
je název vašeho clusteru. Názvy clusterů v identifikátorech URI rozlišují malá a velká písmena. Zatímco název clusteru v plně kvalifikovaném názvu domény (FQDN) části identifikátoru URI (CLUSTERNAME.azurehdinsight.net
) nerozlišuje malá a velká písmena, ostatní výskyty v identifikátoru URI rozlišují malá a velká písmena.
Ověřování
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 pro správce clusteru HDInsight. Rozhraní API REST je zabezpečeno pomocí základního ověřování. Aby se zajistilo, že se vaše přihlašovací údaje bezpečně posílají na server, vždy odešlete požadavky pomocí protokolu HTTPS (Secure HTTP).
Nastavení (zachování přihlašovacích údajů)
Zachovejte své přihlašovací údaje, abyste se vyhnuli jejich opětovnému zadávání pro každý příklad. Název clusteru se zachová v samostatném kroku.
A. Bash
Upravte následující skript nahrazením PASSWORD
skutečným heslem. Pak zadejte příkaz.
export PASSWORD='PASSWORD'
B. PowerShell Spusťte následující kód a zadejte své přihlašovací údaje v automaticky otevíraných otevíraných oknech:
$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"
Identifikace názvu clusteru s správnými písmeny
Skutečná velikost výskytu názvu clusteru se může lišit od očekávání podle toho, jak byl cluster vytvořen. Zde uvedené kroky zobrazí skutečné velikostí a pak je uloží do proměnné pro všechny pozdější příklady.
Upravte níže uvedené skripty a nahraďte CLUSTERNAME
ho názvem vašeho clusteru. Pak zadejte příkaz. (Název clusteru pro plně kvalifikovaný název domény nerozlišuje malá a velká písmena.)
export CLUSTER_NAME=$(curl -u admin:$PASSWORD -sS -G "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" | jq -r '.items[].Clusters.cluster_name')
echo $CLUSTER_NAME
# Identify properly cased cluster name
$resp = Invoke-WebRequest -Uri "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" `
-Credential $creds -UseBasicParsing
$clusterName = (ConvertFrom-Json $resp.Content).items.Clusters.cluster_name;
# Show cluster name
$clusterName
Spuštění dotazu Hive
Pokud chcete ověřit, že se můžete připojit ke clusteru HDInsight, použijte jeden z následujících příkazů:
curl -u admin:$PASSWORD -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/status
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/status" ` -Credential $creds ` -UseBasicParsing $resp.Content
Obdržíte odpověď podobnou následujícímu textu:
{"status":"ok","version":"v1"}
Parametry použité v tomto příkazu jsou následující:
-u
– Uživatelské jméno a heslo použité k ověření požadavku.-G
– Označuje, že tento požadavek je operace GET.
Začátek adresy URL je
https://$CLUSTERNAME.azurehdinsight.net/templeton/v1
stejný pro všechny požadavky. Cesta označuje,/status
že požadavek je vrátit stav WebHCat (označovaný také jako Templeton) pro server. Verzi Hivu můžete také požádat pomocí následujícího příkazu:curl -u admin:$PASSWORD -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/version/hive
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/version/hive" ` -Credential $creds ` -UseBasicParsing $resp.Content
Tento požadavek vrátí odpověď podobnou následujícímu textu:
{"module":"hive","version":"1.2.1000.2.6.5.3008-11"}
Pomocí následujícího příkazu vytvořte tabulku s názvem log4jLogs:
JOB_ID=$(curl -s -u admin:$PASSWORD -d user.name=admin -d execute="DROP+TABLE+log4jLogs;CREATE+EXTERNAL+TABLE+log4jLogs(t1+string,t2+string,t3+string,t4+string,t5+string,t6+string,t7+string)+ROW+FORMAT+DELIMITED+FIELDS+TERMINATED+BY+' '+STORED+AS+TEXTFILE+LOCATION+'/example/data/';SELECT+t4+AS+sev,COUNT(*)+AS+count+FROM+log4jLogs+WHERE+t4+=+'[ERROR]'+AND+INPUT__FILE__NAME+LIKE+'%25.log'+GROUP+BY+t4;" -d statusdir="/example/rest" https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/hive | jq -r .id) echo $JOB_ID
$reqParams = @{"user.name"="admin";"execute"="DROP TABLE log4jLogs;CREATE EXTERNAL TABLE log4jLogs(t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) ROW FORMAT DELIMITED BY ' ' STORED AS TEXTFILE LOCATION '/example/data/;SELECT t4 AS sev,COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' GROUP BY t4;";"statusdir"="/example/rest"} $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/hive" ` -Credential $creds ` -Body $reqParams ` -Method POST ` -UseBasicParsing $jobID = (ConvertFrom-Json $resp.Content).id $jobID
Tento požadavek používá metodu POST, která odesílá data jako součást požadavku do rozhraní REST API. S požadavkem se odesílají následující datové hodnoty:
user.name
– Uživatel, který spouští příkaz.execute
– Příkazy HiveQL, které se mají provést.statusdir
- Adresář, do kterého je zapsán stav této úlohy.
Tyto příkazy provádějí následující akce:
DROP TABLE
– Pokud už tabulka existuje, odstraní se.CREATE EXTERNAL TABLE
– Vytvoří novou externí tabulku v Hive. Externí tabulky ukládají pouze definici tabulky v Hivu. Data zůstanou v původním umístění.Poznámka:
Externí tabulky by se měly použít, když očekáváte, že se podkladová data aktualizují externím zdrojem. Například automatizovaný proces nahrávání dat nebo jiná operace MapReduce.
Vyřazení externí tabulky neodstraní data, pouze definici tabulky.
ROW FORMAT
- Jak jsou data formátována. Pole v každém protokolu jsou oddělena mezerou.STORED AS TEXTFILE LOCATION
– Kde jsou data uložená (například/adresář dat) a že jsou uložená jako text.SELECT
– Vybere počet všech řádků, ve kterých sloupec t4 obsahuje hodnotu [ERROR].. Tento příkaz vrátí hodnotu 3 , protože existují tři řádky, které tuto hodnotu obsahují.Poznámka:
Všimněte si, že mezery mezi příkazy HiveQL se při použití s curl nahradí znakem
+
. Hodnoty v uvozových číslech, které obsahují mezeru, jako je oddělovač, by neměly být nahrazeny znakem+
.Tento příkaz vrátí ID úlohy, které lze použít ke kontrole stavu úlohy.
Pokud chcete zkontrolovat stav úlohy, použijte následující příkaz:
curl -u admin:$PASSWORD -d user.name=admin -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/jobs/$jobid | jq .status.state
$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
Pokud se úloha dokončila, stav JE ÚSPĚŠNÝ.
Jakmile se stav úlohy změní na ÚSPĚCH, můžete načíst výsledky úlohy ze služby Azure Blob Storage. Parametr
statusdir
předaný dotazem obsahuje umístění výstupního souboru, v tomto případě/example/rest
. Tato adresa ukládá výstup v adresáři veexample/curl
výchozím úložišti clusterů.Tyto soubory můžete vypsat a stáhnout pomocí Azure CLI. Další informace najdete v tématu Použití Azure CLI se službou Azure Storage.
Další kroky
Informace o dalších způsobech práce se systémem Hadoop ve službě HDInsight:
- Použití Apache Hivu s Apache Hadoopem ve službě HDInsight
- Použití MapReduce s Apache Hadoopem ve službě HDInsight
Další informace o rozhraní REST API použitém v tomto dokumentu najdete v referenčním dokumentu WebHCat.