Partilhar via


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

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

Os passos seguintes demonstram como utilizar estes cmdlets para executar uma tarefa no cluster do HDInsight:

  1. 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
    
  2. 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.

  3. 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
    
  4. 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: