Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Anmärkning
Det här dokumentet innehåller ingen detaljerad beskrivning av vad HiveQL-instruktioner som används i exemplen gör. För information om HiveQL som används i det här exemplet, se Använd Apache Hive med Apache Hadoop på HDInsight.
Förutsättningar
Ett Apache Hadoop-kluster i HDInsight. Se Kom igång med HDInsight i Linux.
PowerShell Az-modulen har installerats.
Kör en Hive-fråga
Azure PowerShell tillhandahåller cmdletar som gör att du kan fjärrköra Hive-frågor på 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 från jobbet. -
Invoke-AzHDInsightHiveJob: Används för att köra HiveQL-instruktioner. Den här cmdleten blockerar att frågan slutförs och returnerar sedan resultatet. -
Use-AzHDInsightCluster: Anger det aktuella klustret som ska användas för kommandotInvoke-AzHDInsightHiveJob.
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.ps1När skriptet körs uppmanas du att ange klusternamnet och autentiseringsuppgifterna för HTTPS-/klusteradministratörskontot. 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 idSom tidigare nämnts kan
Invoke-Hiveanvä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 $queryStringUtdata 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 idAnmärkning
För längre HiveQL-frågor kan du använda Skriptfilerna Azure PowerShell Here-Strings cmdlet eller HiveQL. Följande kodfragment visar hur du använder cmdleten
Invoke-Hivefö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-Stringsfinns i 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 hivejob.ps1-filen, sparar den 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
För allmän information om Hive i HDInsight:
För information om andra sätt att arbeta med Hadoop på HDInsight: