Udostępnij za pośrednictwem


Uruchamianie zapytań apache Hive przy użyciu usługi Apache Hadoop w usłudze HDInsight przy użyciu interfejsu REST

Dowiedz się, jak używać interfejsu API REST webHCat do uruchamiania zapytań Apache Hive za pomocą usługi Apache Hadoop w klastrze usługi Azure HDInsight.

Wymagania wstępne

Podstawowy identyfikator URI dla interfejsu API REST

Podstawowy identyfikator URI (Uniform Resource Identifier) dla interfejsu API REST w usłudze HDInsight to https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME, gdzie CLUSTERNAME jest nazwą klastra. W nazwach klastrów w identyfikatorach URI jest rozróżniana wielkość liter. Podczas gdy nazwa klastra w w pełni kwalifikowanej części nazwy domeny (FQDN) identyfikatora URI (CLUSTERNAME.azurehdinsight.net) jest bez uwzględniania wielkości liter, inne wystąpienia w identyfikatorze URI są uwzględniane wielkości liter.

Uwierzytelnianie

W przypadku korzystania z biblioteki cURL lub innej komunikacji REST z serwerem WebHCat należy uwierzytelnić żądania, podając nazwę użytkownika i hasło administratora klastra usługi HDInsight. Interfejs API REST jest zabezpieczony za pomocą uwierzytelniania podstawowego. Aby zapewnić bezpieczne wysyłanie poświadczeń do serwera, zawsze wysyłaj żądania przy użyciu protokołu Secure HTTP (HTTPS).

Konfiguracja (zachowywanie poświadczeń)

Zachowaj poświadczenia, aby uniknąć ponownego wprowadzania ich dla każdego przykładu. Nazwa klastra zostanie zachowana w osobnym kroku.

Odp. Bash
Zmodyfikuj poniższy skrypt, zastępując PASSWORD element rzeczywistym hasłem. Następnie wprowadź polecenie .

export PASSWORD='PASSWORD'

B. PowerShell Wykonaj poniższy kod i wprowadź swoje poświadczenia w oknie podręcznym:

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

Zidentyfikuj poprawnie przypadek nazwy klastra

Rzeczywista wielkość liter nazwy klastra może być inna niż oczekiwano, w zależności od sposobu utworzenia klastra. Kroki opisane w tym miejscu przedstawiają rzeczywistą wielkość liter, a następnie przechowują ją w zmiennej dla wszystkich późniejszych przykładów.

Zmodyfikuj poniższe skrypty, aby zastąpić CLUSTERNAME nazwą klastra. Następnie wprowadź polecenie . (Nazwa klastra nazwy FQDN nie uwzględnia wielkości liter).

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

Uruchomienie zapytania programu Hive

  1. Aby sprawdzić, czy możesz nawiązać połączenie z klastrem usługi HDInsight, użyj jednego z następujących poleceń:

    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
    

    Otrzymasz odpowiedź podobną do następującego tekstu:

    {"status":"ok","version":"v1"}
    

    W tym poleceniu są używane następujące parametry:

    • -u — Nazwa użytkownika i hasło używane do uwierzytelniania żądania.
    • -G — Wskazuje, że to żądanie jest operacją GET.
  2. Początek adresu URL https://$CLUSTERNAME.azurehdinsight.net/templeton/v1, jest taki sam dla wszystkich żądań. Ścieżka , wskazuje, /statusże żądanie ma zwrócić stan WebHCat (znany również jako Templeton) dla serwera. Możesz również zażądać wersji programu Hive przy użyciu następującego polecenia:

    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
    

    To żądanie zwraca odpowiedź podobną do następującego tekstu:

    {"module":"hive","version":"1.2.1000.2.6.5.3008-11"}
    
  3. Użyj poniższej instrukcji, aby utworzyć tabelę o nazwie 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
    

    To żądanie używa metody POST, która wysyła dane w ramach żądania do interfejsu API REST. Następujące wartości danych są wysyłane z żądaniem:

    • user.name — użytkownik, który uruchamia polecenie.
    • execute - Instrukcje HiveQL do wykonania.
    • statusdir — katalog, do którego jest zapisany stan tego zadania.

    Te instrukcje wykonują następujące akcje:

    • DROP TABLE — Jeśli tabela już istnieje, zostanie usunięta.

    • CREATE EXTERNAL TABLE - Tworzy nową tabelę "zewnętrzną" w programie Hive. Tabele zewnętrzne przechowują tylko definicję tabeli w programie Hive. Dane pozostają w oryginalnej lokalizacji.

      Uwaga

      Tabele zewnętrzne powinny być używane, gdy oczekujesz, że dane bazowe zostaną zaktualizowane przez źródło zewnętrzne. Na przykład zautomatyzowany proces przekazywania danych lub inna operacja MapReduce.

      Usunięcie tabeli zewnętrznej nie powoduje usunięcia danych, tylko definicji tabeli.

    • ROW FORMAT - Sposób formatowania danych. Pola w każdym dzienniku są oddzielone spacją.

    • STORED AS TEXTFILE LOCATION — Gdzie dane są przechowywane (przykład/katalog danych) i że są przechowywane jako tekst.

    • SELECT— Wybiera liczbę wszystkich wierszy, w których kolumna t4 zawiera wartość [ERROR]. Ta instrukcja zwraca wartość 3 , ponieważ istnieją trzy wiersze zawierające tę wartość.

      Uwaga

      Zwróć uwagę, że spacje między instrukcjami HiveQL są zastępowane znakiem używanym w narzędziu + Curl. Wartości cytowane, które zawierają spację, taką jak ogranicznik, nie powinny być zastępowane przez +.

      To polecenie zwraca identyfikator zadania, którego można użyć do sprawdzenia stanu zadania.

  4. Aby sprawdzić stan zadania, użyj następującego polecenia:

    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
    

    Jeśli zadanie zostało zakończone, stan to POWODZENIE.

  5. Gdy stan zadania zmieni się na POWODZENIE, możesz pobrać wyniki zadania z usługi Azure Blob Storage. Parametr statusdir przekazany za pomocą zapytania zawiera lokalizację pliku wyjściowego; w tym przypadku /example/rest. Ten adres przechowuje dane wyjściowe w example/curl katalogu w domyślnym magazynie klastrów.

    Możesz wyświetlić listę i pobrać te pliki przy użyciu interfejsu wiersza polecenia platformy Azure. Aby uzyskać więcej informacji, zobacz Używanie interfejsu wiersza polecenia platformy Azure z usługą Azure Storage.

Następne kroki

Aby uzyskać informacje na temat innych sposobów pracy z usługą Hadoop w usłudze HDInsight:

Aby uzyskać więcej informacji na temat interfejsu API REST używanego w tym dokumencie, zobacz dokument referencyjny WebHCat.