Uruchamianie zapytań apache Hive przy użyciu programu PowerShell
Ten dokument zawiera przykład użycia Azure PowerShell do uruchamiania zapytań apache Hive w klastrze usługi HDInsight w usłudze Apache Hadoop.
Uwaga
Ten dokument nie zawiera szczegółowego opisu instrukcji HiveQL używanych w przykładach. Aby uzyskać informacje na temat biblioteki HiveQL używanej w tym przykładzie, zobacz Use Apache Hive with Apache Hadoop on HDInsight (Używanie programu Apache Hive z usługą Apache Hadoop w usłudze HDInsight).
Wymagania wstępne
Klaster Apache Hadoop w usłudze HDInsight. Zobacz Wprowadzenie do usługi HDInsight w systemie Linux.
Zainstalowany moduł Az programu PowerShell.
Uruchomienie zapytania programu Hive
Azure PowerShell udostępnia polecenia cmdlet, które umożliwiają zdalne uruchamianie zapytań Hive w usłudze HDInsight. Wewnętrznie polecenia cmdlet tworzą wywołania REST do serwera WebHCat w klastrze usługi HDInsight.
Następujące polecenia cmdlet są używane podczas uruchamiania zapytań Hive w zdalnym klastrze usługi HDInsight:
-
Connect-AzAccount
: uwierzytelnia Azure PowerShell do subskrypcji platformy Azure. -
New-AzHDInsightHiveJobDefinition
: Tworzy definicję zadania przy użyciu określonych instrukcji HiveQL. -
Start-AzHDInsightJob
: wysyła definicję zadania do usługi HDInsight i uruchamia zadanie. Zwracany jest obiekt zadania . -
Wait-AzHDInsightJob
: używa obiektu zadania, aby sprawdzić stan zadania. Czeka na ukończenie zadania lub przekroczenie czasu oczekiwania. -
Get-AzHDInsightJobOutput
: służy do pobierania danych wyjściowych zadania. -
Invoke-AzHDInsightHiveJob
: służy do uruchamiania instrukcji HiveQL. To polecenie cmdlet blokuje ukończenie zapytania, a następnie zwraca wyniki. -
Use-AzHDInsightCluster
: ustawia bieżący klaster do użycia dlaInvoke-AzHDInsightHiveJob
polecenia .
W poniższych krokach pokazano, jak używać tych poleceń cmdlet do uruchamiania zadania w klastrze usługi HDInsight:
Za pomocą edytora zapisz następujący kod jako
hivejob.ps1
.# Login to your Azure subscription $context = Get-AzContext if ($context -eq $null) { Connect-AzAccount } $context #Get cluster info $clusterName = Read-Host -Prompt "Enter the HDInsight cluster name" $creds=Get-Credential -Message "Enter the login for the cluster" #HiveQL #Note: set hive.execution.engine=tez; is not required for # Linux-based HDInsight $queryString = "set hive.execution.engine=tez;" + "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 'wasbs:///example/data/';" + "SELECT * FROM log4jLogs WHERE t4 = '[ERROR]';" #Create an HDInsight Hive job definition $hiveJobDefinition = New-AzHDInsightHiveJobDefinition -Query $queryString #Submit the job to the cluster Write-Host "Start the Hive job..." -ForegroundColor Green $hiveJob = Start-AzHDInsightJob -ClusterName $clusterName -JobDefinition $hiveJobDefinition -ClusterCredential $creds #Wait for the Hive job to complete Write-Host "Wait for the job to complete..." -ForegroundColor Green Wait-AzHDInsightJob -ClusterName $clusterName -JobId $hiveJob.JobId -ClusterCredential $creds # Print the output Write-Host "Display the standard output..." -ForegroundColor Green Get-AzHDInsightJobOutput ` -Clustername $clusterName ` -JobId $hiveJob.JobId ` -HttpCredential $creds
Otwórz nowy wiersz polecenia Azure PowerShell. Zmień katalogi na lokalizację
hivejob.ps1
pliku, a następnie użyj następującego polecenia, aby uruchomić skrypt:.\hivejob.ps1
Po uruchomieniu skryptu zostanie wyświetlony monit o wprowadzenie nazwy klastra i poświadczeń konta https/klastra Administracja. Może zostać również wyświetlony monit o zalogowanie się do subskrypcji platformy Azure.
Po zakończeniu zadania zwraca informacje podobne do następującego tekstu:
Display the standard output... 2012-02-03 18:35:34 SampleClass0 [ERROR] incorrect id 2012-02-03 18:55:54 SampleClass1 [ERROR] incorrect id 2012-02-03 19:25:27 SampleClass4 [ERROR] incorrect id
Jak wspomniano wcześniej,
Invoke-Hive
można użyć do uruchomienia zapytania i oczekiwania na odpowiedź. Użyj następującego skryptu, aby zobaczyć, jak działa Invoke-Hive:# Login to your Azure subscription $context = Get-AzContext if ($context -eq $null) { Connect-AzAccount } $context #Get cluster info $clusterName = Read-Host -Prompt "Enter the HDInsight cluster name" $creds=Get-Credential -Message "Enter the login for the cluster" # Set the cluster to use Use-AzHDInsightCluster -ClusterName $clusterName -HttpCredential $creds $queryString = "set hive.execution.engine=tez;" + "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 * FROM log4jLogs WHERE t4 = '[ERROR]';" Invoke-AzHDInsightHiveJob ` -StatusFolder "statusout" ` -Query $queryString
Dane wyjściowe wyglądają następująco:
2012-02-03 18:35:34 SampleClass0 [ERROR] incorrect id 2012-02-03 18:55:54 SampleClass1 [ERROR] incorrect id 2012-02-03 19:25:27 SampleClass4 [ERROR] incorrect id
Uwaga
W przypadku dłuższych zapytań HiveQL można użyć polecenia cmdlet Azure PowerShell Here-Strings lub plików skryptów HiveQL. Poniższy fragment kodu pokazuje, jak użyć polecenia cmdlet do uruchomienia pliku skryptu
Invoke-Hive
HiveQL. Plik skryptu HiveQL musi zostać przekazany do wasbs://.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"
Aby uzyskać więcej informacji na temat ciągów here-string, zobacz HERE-STRINGS.
Rozwiązywanie problemów
Jeśli po zakończeniu zadania nie zostaną zwrócone żadne informacje, wyświetl dzienniki błędów. Aby wyświetlić informacje o błędzie dla tego zadania, dodaj następujący kod na końcu hivejob.ps1
pliku, zapisz go, a następnie uruchom go ponownie.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
To polecenie cmdlet zwraca informacje zapisywane w usłudze STDERR podczas przetwarzania zadań.
Podsumowanie
Jak widać, Azure PowerShell zapewnia łatwy sposób uruchamiania zapytań Hive w klastrze usługi HDInsight, monitorowania stanu zadania i pobierania danych wyjściowych.
Następne kroki
Aby uzyskać ogólne informacje na temat programu Hive w usłudze HDInsight:
Aby uzyskać informacje o innych sposobach pracy z usługą Hadoop w usłudze HDInsight: