Eseguire query Apache Hive usando PowerShell
Questo documento fornisce un esempio di uso di Azure PowerShell per eseguire query Apache Hive in un cluster Apache Hadoop in HDInsight.
Nota
Questo documento non fornisce una descrizione dettagliata delle operazioni eseguite dalle istruzioni HiveQL usate negli esempi. Per informazioni sul codice HiveQL usato in questo esempio, vedere Usare Apache Hive con Apache Hadoop in HDInsight.
Prerequisiti
Un cluster Apache Hadoop in HDInsight. Vedere Guida introduttiva: Introduzione ad Apache Hadoop e Apache Hive in Azure HDInsight usando il modello di Resource Manager.
Il modulo Az di PowerShell installato.
Eseguire una query Hive
Azure PowerShell fornisce cmdlet che consentono di eseguire in modalità remota query Hive in HDInsight. I cmdlet effettuano internamente chiamate REST a WebHCat sul cluster HDInsight.
Durante l'esecuzione di query Hive in un cluster HDInsight remoto, vengono usati i seguenti cmdlet:
-
Connect-AzAccount
: esegue l'autenticazione di Azure PowerShell nella sottoscrizione di Azure. -
New-AzHDInsightHiveJobDefinition
: crea una definizione del processo usando le istruzioni HiveQL specificate. -
Start-AzHDInsightJob
: invia la definizione del processo ad HDInsight e avvia il processo. Viene restituito un oggetto del processo. -
Wait-AzHDInsightJob
: usa l'oggetto processo per verificare lo stato del processo. Attende che il processo venga completato o che scada il periodo di attesa previsto. -
Get-AzHDInsightJobOutput
: usato per recuperare l'output del processo. -
Invoke-AzHDInsightHiveJob
: usato per eseguire le istruzioni HiveQL. Questo cmdlet blocca il completamento della query, quindi restituisce i risultati. -
Use-AzHDInsightCluster
: imposta il cluster corrente da usare per il comandoInvoke-AzHDInsightHiveJob
.
La seguente procedura illustra come usare questi cmdlet per eseguire un processo nel cluster HDInsight:
Usando un editor salvare il codice seguente come
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
Quindi, aprire un nuovo prompt dei comandi di Azure PowerShell . Passare alla directory del file
hivejob.ps1
e quindi usare il comando seguente per eseguire lo script:.\hivejob.ps1
Quando viene eseguito lo script, viene richiesto di immettere il nome del cluster e le credenziali dell'account https/cluster Amministrazione. Potrebbe anche essere richiesto di accedere alla sottoscrizione di Azure.
Al termine, il processo restituisce informazioni simili al testo seguente:
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
Come accennato in precedenza, è possibile usare
Invoke-Hive
per eseguire una query e attendere la risposta. Usare lo script seguente per verificare il funzionamento di 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
L'output ha un aspetto simile al testo seguente:
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
Nota
Per query HiveQL più lunghe, è possibile usare il cmdlet Here-Strings di Azure PowerShell o un file di script HiveQL. Il frammento di codice seguente illustra come usare il cmdlet
Invoke-Hive
per eseguire un file di script HiveQL. Il file di script HiveQL deve essere caricato in wasb://.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"
Per altre informazioni su Here-Strings, vedere HERE-STRINGS.
Risoluzione dei problemi
Se al termine del processo non viene restituita alcuna informazione, visualizzare i log degli errori. Per visualizzare le informazioni sugli errori relative a questo processo, aggiungere il codice seguente alla fine del file hivejob.ps1
, salvare il file e quindi eseguirlo nuovamente.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
Questo cmdlet restituisce le informazioni scritte in STDERR durante l'esecuzione del processo.
Riepilogo
Come è possibile notare, Azure PowerShell fornisce un modo semplice per eseguire query Hive in un cluster HDInsight, monitorare lo stato del processo e recuperare l'output.
Passaggi successivi
Per informazioni generali su Hive in HDInsight:
Per informazioni su altre modalità d'uso di Hadoop in HDInsight: