Spouštění dotazů Apache Hivu s využitím Apache Hadoopu ve službě HDInsight s využitím REST

Naučte se používat rozhraní REST API WebHCat ke spouštění dotazů Apache Hive s využitím Apache Hadoopu v clusteru Azure HDInsight.

Požadavky

Základní identifikátor URI pro rozhraní REST API

Základní identifikátor URI (Uniform Resource Identifier) rozhraní REST API ve službě HDInsight je https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME, kde CLUSTERNAME je název vašeho clusteru. V názvech clusterů v identifikátorech URI se rozlišují velká a malá písmena. Zatímco název clusteru v části identifikátoru URI plně kvalifikovaného názvu domény (CLUSTERNAME.azurehdinsight.netFQDN) nerozlišuje velká a malá písmena, ostatní výskyty v identifikátoru URI rozlišují malá a velká písmena.

Authentication

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í. Abyste měli jistotu, že se vaše přihlašovací údaje posílají na server bezpečně, vždy proveďte požadavky pomocí protokolu HTTPS (Secure HTTP).

Nastavení (zachování přihlašovacích údajů)

Svoje přihlašovací údaje si zachovejte, abyste je nemuseli znovu zadávat u každého příkladu. Název clusteru se zachová v samostatném kroku.

A. Bash
Níže uvedený skript upravte tak, že nahradíte PASSWORD skutečným heslem. Pak zadejte příkaz .

export PASSWORD='PASSWORD'

B. PowerShell Spusťte následující kód a v automaticky otevírané okně zadejte své přihlašovací údaje:

$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"

Identifikace správně malých a malých písmen názvu clusteru

Skutečná velikost názvu clusteru se může lišit, než očekáváte, v závislosti na tom, jak byl cluster vytvořen. V těchto krocích se zobrazí skutečná velikost a velikost a pak se uloží do proměnné pro všechny pozdější příklady.

Upravte níže uvedené skripty a nahraďte CLUSTERNAME názvem vašeho clusteru. Pak zadejte příkaz . (Název clusteru pro plně kvalifikovaný název domény nerozlišuje velká a malá 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

  1. 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í žádosti.
    • -G – Označuje, že tento požadavek je operace GET.
  2. Začátek adresy URL https://$CLUSTERNAME.azurehdinsight.net/templeton/v1, je stejný pro všechny požadavky. Cesta značí, /statusže požadavek má vrátit stav WebHCat (také známý jako Templeton) pro server. O verzi Hivu můžete požádat také 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"}
    
  3. Pomocí následujícího postupu 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. Spolu s požadavkem se odešlou 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 se zapisuje 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 Hivu. V externích tabulkách se v Hivu ukládají jenom definice tabulky. Data zůstanou v původním umístění.

      Poznámka

      Externí tabulky by se měly používat, pokud očekáváte, že podkladová data budou aktualizována externím zdrojem. Například automatizovaný proces nahrávání dat nebo jiná operace MapReduce.

      Přetažením externí tabulky se neodstraní data, ale pouze definice tabulky.

    • ROW FORMAT – Jak se data formátují. Pole v každém protokolu jsou oddělená mezerou.

    • STORED AS TEXTFILE LOCATION – Kde jsou data uložená (příklad/adresář dat) a kde jsou uložená jako text.

    • SELECT– Vybere počet všech řádků, kde sloupec t4 obsahuje hodnotu [ERROR]. Tento příkaz vrátí hodnotu 3 , protože existují tři řádky, které obsahují tuto hodnotu.

      Poznámka

      Všimněte si, že mezery mezi příkazy HiveQL se při použití v curl nahradí + znakem . Hodnoty v uvozových číslech, které obsahují mezeru, například oddělovač, by neměly být nahrazeny hodnotou +.

      Tento příkaz vrátí ID úlohy, které lze použít ke kontrole stavu úlohy.

  4. Ke kontrole stavu ú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, je ve stavu ÚSPĚCH.

  5. Jakmile se stav úlohy změní na ÚSPĚCH, můžete výsledky úlohy načíst z úložiště objektů blob v Azure. Parametr statusdir předaný s dotazem obsahuje umístění výstupního souboru, /example/restv tomto případě . Tato adresa ukládá výstup do example/curl adresáře ve výchozím úložišti clusterů.

    Tyto soubory můžete vypsat a stáhnout pomocí Azure CLI. Další informace o používání Azure CLI se službou Azure Storage najdete v dokumentu Použití Azure CLI se službou Azure Storage .

Další kroky

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

Další informace o rozhraní REST API použitém v tomto dokumentu najdete v referenčním dokumentu WebHCat .