Dela via


Köra Apache Hive-frågor med PowerShell

Det här dokumentet innehåller ett exempel på hur du använder Azure PowerShell för att köra Apache Hive-frågor i ett Apache Hadoop på HDInsight-kluster.

Anteckning

Det här dokumentet innehåller ingen detaljerad beskrivning av vad HiveQL-instruktioner som används i exemplen gör. Information om HiveQL som används i det här exemplet finns i Använda Apache Hive med Apache Hadoop i HDInsight.

Förutsättningar

Köra en Hive-fråga

Azure PowerShell tillhandahåller cmdletar som gör att du kan fjärrköra Hive-frågor i HDInsight. Internt gör cmdletarna REST-anrop till WebHCat i HDInsight-klustret.

Följande cmdletar används när du kör Hive-frågor i ett fjärranslutet HDInsight-kluster:

  • Connect-AzAccount: Autentiserar Azure PowerShell till din Azure-prenumeration.
  • New-AzHDInsightHiveJobDefinition: Skapar en jobbdefinition med hjälp av angivna HiveQL-instruktioner.
  • Start-AzHDInsightJob: Skickar jobbdefinitionen till HDInsight och startar jobbet. Ett jobbobjekt returneras.
  • Wait-AzHDInsightJob: Använder jobbobjektet för att kontrollera jobbets status. Det väntar tills jobbet har slutförts eller väntetiden har överskridits.
  • Get-AzHDInsightJobOutput: Används för att hämta utdata för jobbet.
  • Invoke-AzHDInsightHiveJob: Används för att köra HiveQL-instruktioner. Den här cmdleten blockerar frågan och returnerar sedan resultatet.
  • Use-AzHDInsightCluster: Anger det aktuella klustret som ska användas för Invoke-AzHDInsightHiveJob kommandot.

Följande steg visar hur du använder dessa cmdletar för att köra ett jobb i ditt HDInsight-kluster:

  1. Använd en redigerare och spara följande kod som 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. Öppna en ny Azure PowerShell kommandotolk. Ändra kataloger till platsen för hivejob.ps1 filen och använd sedan följande kommando för att köra skriptet:

    .\hivejob.ps1
    

    När skriptet körs uppmanas du att ange klusternamnet och autentiseringsuppgifterna för HTTPS/Kluster Admin konto. Du kan också uppmanas att logga in på din Azure-prenumeration.

  3. När jobbet är klart returneras information som liknar följande text:

    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. Som tidigare Invoke-Hive nämnts kan användas för att köra en fråga och vänta på svaret. Använd följande skript för att se hur Invoke-Hive fungerar:

    # 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
    

    Utdata ser ut som följande text:

    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
    

    Anteckning

    För längre HiveQL-frågor kan du använda cmdleten Azure PowerShell Here-Strings eller HiveQL-skriptfiler. Följande kodfragment visar hur du använder cmdleten Invoke-Hive för att köra en HiveQL-skriptfil. HiveQL-skriptfilen måste laddas upp till wasbs://.

    Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"

    Mer information om Here-Strings finnsi HERE-STRINGS.

Felsökning

Om ingen information returneras när jobbet är klart visar du felloggarna. Om du vill visa felinformation för det här jobbet lägger du till följande i slutet av filen, sparar den hivejob.ps1 och kör den sedan igen.

# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
        -Clustername $clusterName `
        -JobId $job.JobId `
        -HttpCredential $creds `
        -DisplayOutputType StandardError

Den här cmdleten returnerar den information som skrivs till STDERR under jobbbearbetningen.

Sammanfattning

Som du ser är Azure PowerShell ett enkelt sätt att köra Hive-frågor i ett HDInsight-kluster, övervaka jobbstatusen och hämta utdata.

Nästa steg

Allmän information om Hive i HDInsight:

Information om andra sätt att arbeta med Hadoop på HDInsight: