Executar consultas do Apache Hive com o PowerShell
Este documento fornece um exemplo de utilização de Azure PowerShell para executar consultas do Apache Hive num cluster do Apache Hadoop no HDInsight.
Nota
Este documento não fornece uma descrição detalhada do que fazem as instruções do HiveQL utilizadas nos exemplos. Para obter informações sobre o HiveQL utilizado neste exemplo, veja Utilizar o Apache Hive com o Apache Hadoop no HDInsight.
Pré-requisitos
Um cluster do Apache Hadoop no HDInsight. Veja Introdução ao HDInsight no Linux.
O Módulo do Az do PowerShell instalado.
Executar uma consulta do Hive
Azure PowerShell fornece cmdlets que lhe permitem executar remotamente consultas do Hive no HDInsight. Internamente, os cmdlets fazem chamadas REST para WebHCat no cluster do HDInsight.
Os seguintes cmdlets são utilizados ao executar consultas do Hive num cluster remoto do HDInsight:
-
Connect-AzAccount
: autentica Azure PowerShell na sua subscrição do Azure. -
New-AzHDInsightHiveJobDefinition
: cria uma definição de tarefa com as instruções do HiveQL especificadas. -
Start-AzHDInsightJob
: envia a definição da tarefa para o HDInsight e inicia a tarefa. É devolvido um objeto de tarefa . -
Wait-AzHDInsightJob
: utiliza o objeto de tarefa para verificar o estado da tarefa. Aguarda até que a tarefa seja concluída ou o tempo de espera seja excedido. -
Get-AzHDInsightJobOutput
: utilizado para obter a saída da tarefa. -
Invoke-AzHDInsightHiveJob
: utilizado para executar instruções do HiveQL. Este cmdlet bloqueia a conclusão da consulta e, em seguida, devolve os resultados. -
Use-AzHDInsightCluster
: define o cluster atual a utilizar para oInvoke-AzHDInsightHiveJob
comando .
Os passos seguintes demonstram como utilizar estes cmdlets para executar uma tarefa no cluster do HDInsight:
Com um editor, guarde o seguinte código como
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
Abra uma nova linha de comandos Azure PowerShell. Altere os diretórios para a localização do
hivejob.ps1
ficheiro e, em seguida, utilize o seguinte comando para executar o script:.\hivejob.ps1
Quando o script for executado, ser-lhe-á pedido que introduza o nome do cluster e as credenciais de conta https/cluster Administração. Também poderá ser-lhe pedido para iniciar sessão na sua subscrição do Azure.
Quando a tarefa for concluída, devolve informações semelhantes ao seguinte texto:
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
Conforme mencionado anteriormente,
Invoke-Hive
pode ser utilizado para executar uma consulta e aguardar pela resposta. Utilize o seguinte script para ver como funciona o 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
O resultado é semelhante ao seguinte texto:
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
Para consultas mais longas do HiveQL, pode utilizar o cmdlet Here-Strings do Azure PowerShell ficheiros de script do HiveQL ou do HiveQL. O fragmento seguinte mostra como utilizar o
Invoke-Hive
cmdlet para executar um ficheiro de script hiveQL. O ficheiro de script do HiveQL tem de ser carregado para wasbs://.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"
Para obter mais informações sobre Here-Strings, consulte HERE-STRINGS.
Resolução de problemas
Se não forem devolvidas informações quando a tarefa for concluída, veja os registos de erros. Para ver as informações de erro desta tarefa, adicione o seguinte ao final do ficheiro, guarde-o e, em seguida, execute-o hivejob.ps1
novamente.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
Este cmdlet devolve as informações escritas em STDERR durante o processamento da tarefa.
Resumo
Como pode ver, Azure PowerShell fornece uma forma fácil de executar consultas do Hive num cluster do HDInsight, monitorizar o estado da tarefa e obter o resultado.
Passos seguintes
Para obter informações gerais sobre o Hive no HDInsight:
Para obter informações sobre outras formas de trabalhar com o Hadoop no HDInsight: