Köra Apache Hive-frågor med PowerShell
Det här dokumentet innehåller ett exempel på hur du använder Azure PowerShell för att köra Apache Hive-frågor i ett Apache Hadoop på HDInsight-kluster.
Anteckning
Det här dokumentet innehåller ingen detaljerad beskrivning av vad HiveQL-instruktioner som används i exemplen gör. Information om HiveQL som används i det här exemplet finns i Använda Apache Hive med Apache Hadoop i HDInsight.
Förutsättningar
Ett Apache Hadoop-kluster i HDInsight. Se Kom igång med HDInsight i Linux.
PowerShell Az-modulen har installerats.
Köra en Hive-fråga
Azure PowerShell tillhandahåller cmdletar som gör att du kan fjärrköra Hive-frågor i HDInsight. Internt gör cmdletarna REST-anrop till WebHCat i HDInsight-klustret.
Följande cmdletar används när du kör Hive-frågor i ett fjärranslutet HDInsight-kluster:
-
Connect-AzAccount
: Autentiserar Azure PowerShell till din Azure-prenumeration. -
New-AzHDInsightHiveJobDefinition
: Skapar en jobbdefinition med hjälp av angivna HiveQL-instruktioner. -
Start-AzHDInsightJob
: Skickar jobbdefinitionen till HDInsight och startar jobbet. Ett jobbobjekt returneras. -
Wait-AzHDInsightJob
: Använder jobbobjektet för att kontrollera jobbets status. Det väntar tills jobbet har slutförts eller väntetiden har överskridits. -
Get-AzHDInsightJobOutput
: Används för att hämta utdata för jobbet. -
Invoke-AzHDInsightHiveJob
: Används för att köra HiveQL-instruktioner. Den här cmdleten blockerar frågan och returnerar sedan resultatet. -
Use-AzHDInsightCluster
: Anger det aktuella klustret som ska användas förInvoke-AzHDInsightHiveJob
kommandot.
Följande steg visar hur du använder dessa cmdletar för att köra ett jobb i ditt HDInsight-kluster:
Använd en redigerare och spara följande kod som
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
Öppna en ny Azure PowerShell kommandotolk. Ändra kataloger till platsen för
hivejob.ps1
filen och använd sedan följande kommando för att köra skriptet:.\hivejob.ps1
När skriptet körs uppmanas du att ange klusternamnet och autentiseringsuppgifterna för HTTPS/Kluster Admin konto. Du kan också uppmanas att logga in på din Azure-prenumeration.
När jobbet är klart returneras information som liknar följande text:
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
Som tidigare
Invoke-Hive
nämnts kan användas för att köra en fråga och vänta på svaret. Använd följande skript för att se hur Invoke-Hive fungerar:# 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
Utdata ser ut som följande 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
Anteckning
För längre HiveQL-frågor kan du använda cmdleten Azure PowerShell Here-Strings eller HiveQL-skriptfiler. Följande kodfragment visar hur du använder cmdleten
Invoke-Hive
för att köra en HiveQL-skriptfil. HiveQL-skriptfilen måste laddas upp till wasbs://.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"
Mer information om Here-Strings finnsi HERE-STRINGS.
Felsökning
Om ingen information returneras när jobbet är klart visar du felloggarna. Om du vill visa felinformation för det här jobbet lägger du till följande i slutet av filen, sparar den hivejob.ps1
och kör den sedan igen.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
Den här cmdleten returnerar den information som skrivs till STDERR under jobbbearbetningen.
Sammanfattning
Som du ser är Azure PowerShell ett enkelt sätt att köra Hive-frågor i ett HDInsight-kluster, övervaka jobbstatusen och hämta utdata.
Nästa steg
Allmän information om Hive i HDInsight:
Information om andra sätt att arbeta med Hadoop på HDInsight: