Partilhar via


Executar consultas do Apache Hive usando o PowerShell

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

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 o Invoke-AzHDInsightHiveJob comando.

As etapas a seguir demonstram como usar esses cmdlets para executar um trabalho no cluster HDInsight:

  1. 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
    
  2. Abra um novo prompt de comando do Azure PowerShell . Altere os diretórios para o local do hivejob.ps1 arquivo 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 HTTPS/Administrador do Cluster. Você também pode ser solicitado a entrar em sua assinatura do Azure.

  3. 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       id
    
  4. Como mencionado anteriormente, Invoke-Hive pode 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 $queryString
    

    A 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    id
    

    Observaçã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-Hive cmdlet 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: