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
Klaster Apache Hadoop w usłudze HDInsight. Zobacz Wprowadzenie do usługi HDInsight w systemie Linux.
Klient REST. W tym dokumencie użyto polecenia Invoke-WebRequest w programie Windows PowerShell i programie Curl w powłoce Bash.
Jeśli używasz powłoki Bash, będziesz również potrzebować procesora JSON wiersza polecenia. Zobacz: https://stedolan.github.io/jq/.
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
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.
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"}
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.
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.
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 wexample/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:
- Korzystanie z programu Apache Hive z usługą Apache Hadoop w usłudze HDInsight
- Korzystanie z technologii MapReduce z usługą Apache Hadoop w usłudze HDInsight
Aby uzyskać więcej informacji na temat interfejsu API REST używanego w tym dokumencie, zobacz dokument referencyjny WebHCat.