Sdílet prostřednictvím


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

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

  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í požadavku.
    • -G – Označuje, že tento požadavek je operace GET.
  2. Začátek adresy URL je https://$CLUSTERNAME.azurehdinsight.net/templeton/v1stejný 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"}
    
  3. 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.

  4. 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Ý.

  5. 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 ve example/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:

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