Spouštění dotazů Apache Hivu pomocí PowerShellu
Tento dokument obsahuje příklad použití Azure PowerShell ke spouštění dotazů Apache Hive v clusteru Apache Hadoop v clusteru HDInsight.
Poznámka
Tento dokument neposkytuje podrobný popis toho, co příkazy HiveQL použité v příkladech dělají. Informace o HiveQL použité v tomto příkladu najdete v tématu Použití Apache Hivu s Apache Hadoopem ve službě HDInsight.
Požadavky
Cluster Apache Hadoop ve službě HDInsight. Viz Začínáme se službou HDInsight v Linuxu.
Nainstalovaný powershellový modul Az .
Spuštění dotazu Hive
Azure PowerShell poskytuje rutiny, které umožňují vzdálené spouštění dotazů Hive ve službě HDInsight. Rutiny interně volání REST WebHCat v clusteru HDInsight.
Při spouštění dotazů Hive ve vzdáleném clusteru HDInsight se používají následující rutiny:
-
Connect-AzAccount
: Ověřuje Azure PowerShell ve vašem předplatném Azure. -
New-AzHDInsightHiveJobDefinition
: Vytvoří definici úlohy pomocí zadaných příkazů HiveQL. -
Start-AzHDInsightJob
: Odešle definici úlohy do služby HDInsight a spustí úlohu. Vrátí se objekt úlohy . -
Wait-AzHDInsightJob
: Použije objekt úlohy ke kontrole stavu úlohy. Čeká na dokončení úlohy nebo na překročení doby čekání. -
Get-AzHDInsightJobOutput
: Slouží k načtení výstupu úlohy. -
Invoke-AzHDInsightHiveJob
: Slouží ke spouštění příkazů HiveQL. Tato rutina zablokuje dokončení dotazu a pak vrátí výsledky. -
Use-AzHDInsightCluster
: Nastaví aktuální cluster, který se má použít proInvoke-AzHDInsightHiveJob
příkaz .
Následující kroky ukazují, jak pomocí těchto rutin spustit úlohu v clusteru HDInsight:
Pomocí editoru uložte následující kód 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
Otevřete nový příkazový řádek Azure PowerShell. Změňte adresáře na umístění
hivejob.ps1
souboru a pak pomocí následujícího příkazu spusťte skript:.\hivejob.ps1
Po spuštění skriptu se zobrazí výzva k zadání názvu clusteru a přihlašovacích údajů účtu HTTPS/Cluster Správa. Může se také zobrazit výzva k přihlášení k předplatnému Azure.
Po dokončení úlohy se vrátí informace podobné následujícímu textu:
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 už bylo zmíněno dříve,
Invoke-Hive
můžete ho použít ke spuštění dotazu a čekání na odpověď. Pomocí následujícího skriptu zjistíte, jak Invoke-Hive funguje:# 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
Výstup vypadá jako následující text:
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
Poznámka
Pro delší dotazy HiveQL můžete použít Azure PowerShell rutinu Here-Strings nebo soubory skriptu HiveQL. Následující fragment kódu ukazuje, jak pomocí rutiny
Invoke-Hive
spustit soubor skriptu HiveQL. Soubor skriptu HiveQL se musí nahrát do wasbs://.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"
Další informace o Here-Strings najdete v tématu HERE-STRINGS.
Řešení potíží
Pokud se po dokončení úlohy nevrátí žádné informace, prohlédněte si protokoly chyb. Pokud chcete zobrazit informace o chybě pro tuto úlohu, přidejte na konec hivejob.ps1
souboru následující kód, uložte ho a spusťte ho znovu.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
Tato rutina vrátí informace, které jsou zapsány do STDERR během zpracování úlohy.
Souhrn
Jak vidíte, Azure PowerShell poskytuje snadný způsob spouštění dotazů Hive v clusteru HDInsight, monitorování stavu úlohy a načtení výstupu.
Další kroky
Obecné informace o Hivu ve službě HDInsight:
Informace o dalších způsobech práce s Hadoopem ve službě HDInsight: