Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este documento fornece um exemplo de como usar o Azure PowerShell para executar consultas do Apache Hive em um cluster Apache Hadoop no HDInsight.
Observação
Este documento não fornece uma descrição detalhada do que fazem as instruções HiveQL usadas nos exemplos. Para obter informações sobre o HiveQL usado neste exemplo, consulte Usar o Apache Hive com o Apache Hadoop no HDInsight.
Pré-requisitos
Um cluster Apache Hadoop em HDInsight. Consulte Introdução ao HDInsight no Linux.
O módulo Az do PowerShell está instalado.
Executar uma consulta do Hive
O Azure PowerShell fornece cmdlets que permitem executar remotamente consultas do Hive no HDInsight. Internamente, os cmdlets fazem chamadas REST para 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 na sua assinatura do Azure. -
New-AzHDInsightHiveJobDefinition: Cria uma definição de trabalho usando as instruções HiveQL especificadas. -
Start-AzHDInsightJob: Envia a definição de trabalho para o HDInsight e inicia o trabalho. Um objeto de trabalho é retornado. -
Wait-AzHDInsightJob: Usa o objeto de trabalho para verificar o status do trabalho. Aguarda até que o trabalho seja concluído ou o tempo de espera seja excedido. -
Get-AzHDInsightJobOutput: Utilizado para obter o resultado do trabalho. -
Invoke-AzHDInsightHiveJob: Usado para executar instruções HiveQL. Este cmdlet bloqueia a conclusão da consulta e, em seguida, retorna os resultados. -
Use-AzHDInsightCluster: Define o cluster atual a ser usado para oInvoke-AzHDInsightHiveJobcomando.
As etapas a seguir demonstram como usar esses cmdlets para executar um trabalho no 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 $credsAbra um novo prompt de comando do Azure PowerShell . Altere os diretórios para o local do
hivejob.ps1arquivo e use o seguinte comando para executar o script:.\hivejob.ps1Quando o script é executado, você é solicitado a inserir o nome do cluster e as credenciais da conta HTTPS/Administrador do Cluster. Você também pode ser solicitado a entrar em sua assinatura do Azure.
Quando o trabalho é concluído, ele retorna 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 idComo mencionado anteriormente,
Invoke-Hivepode ser usado para executar uma consulta e aguardar a resposta. Use o seguinte script para ver como Invoke-Hive funciona:# 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 $queryStringA saída é 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 idObservação
Para consultas HiveQL mais longas, você pode usar o cmdlet Here-Strings do Azure PowerShell ou arquivos de script HiveQL. O trecho a seguir mostra como usar o
Invoke-Hivecmdlet para executar um arquivo de script HiveQL. O arquivo de script HiveQL deve ser carregado para wasbs://.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"Para obter mais informações sobre 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 este trabalho, adicione o seguinte ao final do arquivo, salve-o hivejob.ps1 e execute-o novamente.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
Este cmdlet retorna as informações gravadas no STDERR durante o processamento do trabalho.
Resumo
Como você pode ver, o Azure PowerShell 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óximos passos
Para obter informações gerais sobre o Hive no HDInsight:
Para obter informações sobre outras maneiras de trabalhar com o Hadoop no HDInsight: