Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 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. I když název clusteru v části URI, která obsahuje plně kvalifikovaný název domény (FQDN) (CLUSTERNAME.azurehdinsight.net), nerozlišuje malá a velká písmena, ostatní části 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ém okně.
$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"
Identifikace názvu clusteru se správným použitím malých a velkých písmen
Skutečná velikost písmen názvu clusteru může být jiná, než očekáváte, podle toho, jak byl cluster vytvořen. Zde uvedené kroky zobrazí skutečnou velikost a poté ji 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 mezi velkými a malými písmeny.)
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
Spusťte dotaz 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.ContentObdrží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/v1stejný pro všechny požadavky. Cesta,/status, označuje, že požadavek má vrátit stav serveru WebHCat (označovaného také jako Templeton). Verzi Hive můžete také zjistit 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.ContentTento 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 $jobIDTento 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.statePokud 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
statusdirpř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/curlvý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.