Executar consultas do Apache Hive usando o PowerShell
Este documento fornece um exemplo do uso do Azure PowerShell para executar consultar do Apache Hive em um Apache Hadoop no cluster HDInsight.
Observação
Esse documento não fornece uma descrição detalhada do que as instruções HiveQL que usadas nos exemplos fazem. Para obter informações sobre o HiveQL usado neste exemplo, veja Usar o Apache Hive com o Apache Hadoop no HDInsight.
Pré-requisitos
Um cluster do Apache Hadoop no HDInsight. Consulte Introdução ao HDInsight no Linux.
O Módulo Az do PowerShell instalado.
Executar um trabalho do Hive
O PowerShell do Azure fornece cmdlets que lhe permitem executar remotamente as consultas Hive no HDInsight. Internamente, os cmdlets fazem chamadas REST a WebHCat no cluster HDInsight.
Os cmdlets a seguir são usados ao executar consultas do Hive em um cluster HDInsight remoto:
-
Connect-AzAccount
: autentica o Azure PowerShell para a sua assinatura do Azure. -
New-AzHDInsightHiveJobDefinition
: cria uma definição de trabalho usando as instruções HiveQL especificadas. -
Start-AzHDInsightJob
: envia a definição do trabalho para HDInsight e inicia o trabalho. Um objeto job é retornado. -
Wait-AzHDInsightJob
: usa o objeto de trabalho para verificar o status do trabalho. Ele aguarda até que o trabalho seja concluído ou o tempo de espera seja excedido. -
Get-AzHDInsightJobOutput
: usado para recuperar a saída do trabalho. -
Invoke-AzHDInsightHiveJob
: usado para executar instruções de HiveQL. Esse cmdlet bloqueia a consulta até que ela seja concluída e, em seguida, retorna os resultados. -
Use-AzHDInsightCluster
: define o cluster atual para usar o comandoInvoke-AzHDInsightHiveJob
.
As etapas a seguir demonstram como usar esses cmdlets para executar um trabalho no seu cluster HDInsight:
Usando um editor, salve o código a seguir 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 um novo prompt de comando do PowerShell do Azure . Altere os diretórios para o local do arquivo
hivejob.ps1
e use o seguinte comando para executar o script:.\hivejob.ps1
Quando o script é executado, você é solicitado a inserir o nome do cluster e as credenciais da conta de administrador de HTTPS/Cluster. Também receberá uma solicitação para se conectar à sua assinatura do Azure.
Quando o trabalho for concluído, ele deverá retornar 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
Como mencionado anteriormente,
Invoke-Hive
pode ser usado para executar uma consulta e aguardar a resposta. Use o script a seguir 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
A saída se parece com o 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
Observação
Para consultas HiveQL mais longas, é possível usar o cmdlet Here-Strings do PowerShell do Azure ou arquivos de script HiveQL. O snippet a seguir mostram como usar o cmdlet
Invoke-Hive
para executar um arquivo de script HiveQL. O arquivo de script HiveQL deve ser carregado em wasbs://.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"
Para obter mais informações sobre as Here-Strings, consulte HERE-STRINGS.
Solução de problemas
Se nenhuma informação for retornada quando o trabalho for concluído, exiba os logs de erro. Para exibir informações de erro para esse trabalho, adicione o seguinte ao final do arquivo hivejob.ps1
, salve-o e execute-o novamente.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
Esse cmdlet retorna as informações gravadas em STDERR durante o processamento do trabalho.
Resumo
Como você pode ver, o PowerShell do Azure fornece uma maneira fácil de executar consultas do Hive em um cluster HDInsight, monitorar o status do trabalho e recuperar a saída.
Próximas etapas
Para obter informações gerais sobre o Hive no HDInsight:
Para obter informações sobre outros modos possíveis de trabalhar com Hadoop no HDInsight: