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
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 Windows PowerShell i curl w powłoce Bash.
Jeśli używasz powłoki Bash, będziesz również potrzebować procesora JSON wiersza polecenia. Zobacz: .
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
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"}
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.
-
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.
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 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 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:
- Korzystanie z technologii 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 .
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla