Apache Hive-query's uitvoeren met PowerShell
Dit document bevat een voorbeeld van het gebruik van Azure PowerShell om Apache Hive-query's uit te voeren in een Apache Hadoop in HDInsight-cluster.
Notitie
Dit document bevat geen gedetailleerde beschrijving van de HiveQL-instructies die in de voorbeelden worden gebruikt. Zie Apache Hive gebruiken met Apache Hadoop in HDInsight voor informatie over de HiveQL die in dit voorbeeld wordt gebruikt.
Vereisten
Een Apache Hadoop-cluster in HDInsight. Zie Aan de slag met HDInsight in Linux.
De Az-module van PowerShell geïnstalleerd.
Een Hive-query uitvoeren
Azure PowerShell biedt cmdlets waarmee u op afstand Hive-query's kunt uitvoeren in HDInsight. Intern maken de cmdlets REST-aanroepen naar WebHCat in het HDInsight-cluster.
De volgende cmdlets worden gebruikt bij het uitvoeren van Hive-query's in een extern HDInsight-cluster:
-
Connect-AzAccount
: verifieert Azure PowerShell met uw Azure-abonnement. -
New-AzHDInsightHiveJobDefinition
: Maakt een taakdefinitie met behulp van de opgegeven HiveQL-instructies. -
Start-AzHDInsightJob
: verzendt de taakdefinitie naar HDInsight en start de taak. Er wordt een taakobject geretourneerd. -
Wait-AzHDInsightJob
: gebruikt het taakobject om de status van de taak te controleren. Er wordt gewacht totdat de taak is voltooid of de wachttijd is overschreden. -
Get-AzHDInsightJobOutput
: wordt gebruikt om de uitvoer van de taak op te halen. -
Invoke-AzHDInsightHiveJob
: wordt gebruikt om HiveQL-instructies uit te voeren. Deze cmdlet blokkeert dat de query wordt voltooid en retourneert vervolgens de resultaten. -
Use-AzHDInsightCluster
: Hiermee stelt u het huidige cluster in dat moet worden gebruikt voor deInvoke-AzHDInsightHiveJob
opdracht .
De volgende stappen laten zien hoe u deze cmdlets gebruikt om een taak uit te voeren in uw HDInsight-cluster:
Sla met behulp van een editor de volgende code op als
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
Open een nieuwe Azure PowerShell opdrachtprompt. Wijzig mappen in de locatie van het
hivejob.ps1
bestand en gebruik vervolgens de volgende opdracht om het script uit te voeren:.\hivejob.ps1
Wanneer het script wordt uitgevoerd, wordt u gevraagd om de clusternaam en de HTTPS/Cluster-Beheer accountreferenties in te voeren. Mogelijk wordt u ook gevraagd om u aan te melden bij uw Azure-abonnement.
Wanneer de taak is voltooid, wordt informatie geretourneerd die vergelijkbaar is met de volgende tekst:
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
Zoals eerder vermeld,
Invoke-Hive
kan worden gebruikt om een query uit te voeren en te wachten op het antwoord. Gebruik het volgende script om te zien hoe Invoke-Hive werkt:# 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
De uitvoer ziet eruit als de volgende tekst:
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
Notitie
Voor langere HiveQL-query's kunt u de cmdlet Azure PowerShell Here-Strings of HiveQL-scriptbestanden gebruiken. Het volgende codefragment laat zien hoe u de
Invoke-Hive
cmdlet gebruikt om een HiveQL-scriptbestand uit te voeren. Het HiveQL-scriptbestand moet worden geüpload naar wasbs://.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"
Zie HERE-STRINGS voor meer informatie over Here-Strings.
Problemen oplossen
Als er geen informatie wordt geretourneerd wanneer de taak is voltooid, bekijkt u de foutenlogboeken. Als u foutinformatie voor deze taak wilt weergeven, voegt u het volgende toe aan het einde van het bestand, slaat u het hivejob.ps1
bestand op en voert u het opnieuw uit.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
Deze cmdlet retourneert de informatie die tijdens de taakverwerking naar STDERR wordt geschreven.
Samenvatting
Zoals u ziet, biedt Azure PowerShell een eenvoudige manier om Hive-query's uit te voeren in een HDInsight-cluster, de taakstatus te bewaken en de uitvoer op te halen.
Volgende stappen
Voor algemene informatie over Hive in HDInsight:
Voor informatie over andere manieren waarop u met Hadoop in HDInsight kunt werken: