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

Dowiedz się, jak używać interfejsu API REST usługi 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 to nazwa klastra. W nazwach klastrów w identyfikatorach URI jest rozróżniana wielkość liter. Nazwa klastra w w pełni kwalifikowanej części nazwy domeny (FQDN) identyfikatora URI (CLUSTERNAME.azurehdinsight.net) nie uwzględnia wielkości liter, ale w innych wystąpieniach w identyfikatorze URI jest uwzględniana wielkość liter.

Authentication

W przypadku korzystania z programu cURL lub innej komunikacji REST z serwerem WebHCat należy uwierzytelnić żądania, podając nazwę użytkownika i hasło dla 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.

A. 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"

Identyfikowanie nazwy klastra o prawidłowym przypadku

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 ciąg 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/v1jest 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. Aby utworzyć tabelę o nazwie log4jLogs, wykonaj następujące czynności:

    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 wraz z żądaniem:

    • user.name — użytkownik, który uruchamia polecenie.
    • execute - Instrukcje HiveQL do wykonania.
    • statusdir — katalog, do którego jest zapisywany 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 + w przypadku użycia z narzędziem Curl. W cudzysłów wartości, które zawierają spację, na przykład ogranicznik, nie należy zastępować znakiem +.

      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. Po zmianie stanu zadania na SUCCEEDED możesz pobrać wyniki zadania z usługi Azure Blob Storage. Parametr statusdir przekazany z zapytaniem 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 na temat korzystania z interfejsu wiersza polecenia platformy Azure z usługą Azure Storage, zobacz dokument Korzystanie z 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 .