Apache Hive-query's uitvoeren met PowerShell

Dit document bevat een voorbeeld van het gebruik van Azure PowerShell om Apache Hive-query's uit te voeren in een Apache Hadoop in HDInsight-cluster.

Notitie

Dit document bevat geen gedetailleerde beschrijving van de HiveQL-instructies die in de voorbeelden worden gebruikt. Zie Apache Hive gebruiken met Apache Hadoop in HDInsight voor informatie over de HiveQL die in dit voorbeeld wordt gebruikt.

Vereisten

Een Hive-query uitvoeren

Azure PowerShell biedt cmdlets waarmee u op afstand Hive-query's kunt uitvoeren in HDInsight. Intern maken de cmdlets REST-aanroepen naar WebHCat in het HDInsight-cluster.

De volgende cmdlets worden gebruikt bij het uitvoeren van Hive-query's in een extern HDInsight-cluster:

  • Connect-AzAccount: verifieert Azure PowerShell met uw Azure-abonnement.
  • New-AzHDInsightHiveJobDefinition: Maakt een taakdefinitie met behulp van de opgegeven HiveQL-instructies.
  • Start-AzHDInsightJob: verzendt de taakdefinitie naar HDInsight en start de taak. Er wordt een taakobject geretourneerd.
  • Wait-AzHDInsightJob: gebruikt het taakobject om de status van de taak te controleren. Er wordt gewacht totdat de taak is voltooid of de wachttijd is overschreden.
  • Get-AzHDInsightJobOutput: wordt gebruikt om de uitvoer van de taak op te halen.
  • Invoke-AzHDInsightHiveJob: wordt gebruikt om HiveQL-instructies uit te voeren. Deze cmdlet blokkeert dat de query wordt voltooid en retourneert vervolgens de resultaten.
  • Use-AzHDInsightCluster: Hiermee stelt u het huidige cluster in dat moet worden gebruikt voor de Invoke-AzHDInsightHiveJob opdracht .

De volgende stappen laten zien hoe u deze cmdlets gebruikt om een taak uit te voeren in uw HDInsight-cluster:

  1. Sla met behulp van een editor de volgende code op als 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. Open een nieuwe Azure PowerShell opdrachtprompt. Wijzig mappen in de locatie van het hivejob.ps1 bestand en gebruik vervolgens de volgende opdracht om het script uit te voeren:

    .\hivejob.ps1
    

    Wanneer het script wordt uitgevoerd, wordt u gevraagd om de clusternaam en de HTTPS/Cluster-Beheer accountreferenties in te voeren. Mogelijk wordt u ook gevraagd om u aan te melden bij uw Azure-abonnement.

  3. Wanneer de taak is voltooid, wordt informatie geretourneerd die vergelijkbaar is met de volgende tekst:

    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. Zoals eerder vermeld, Invoke-Hive kan worden gebruikt om een query uit te voeren en te wachten op het antwoord. Gebruik het volgende script om te zien hoe Invoke-Hive werkt:

    # 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
    

    De uitvoer ziet eruit als de volgende tekst:

    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
    

    Notitie

    Voor langere HiveQL-query's kunt u de cmdlet Azure PowerShell Here-Strings of HiveQL-scriptbestanden gebruiken. Het volgende codefragment laat zien hoe u de Invoke-Hive cmdlet gebruikt om een HiveQL-scriptbestand uit te voeren. Het HiveQL-scriptbestand moet worden geüpload naar wasbs://.

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

    Zie HERE-STRINGS voor meer informatie over Here-Strings.

Problemen oplossen

Als er geen informatie wordt geretourneerd wanneer de taak is voltooid, bekijkt u de foutenlogboeken. Als u foutinformatie voor deze taak wilt weergeven, voegt u het volgende toe aan het einde van het bestand, slaat u het hivejob.ps1 bestand op en voert u het opnieuw uit.

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

Deze cmdlet retourneert de informatie die tijdens de taakverwerking naar STDERR wordt geschreven.

Samenvatting

Zoals u ziet, biedt Azure PowerShell een eenvoudige manier om Hive-query's uit te voeren in een HDInsight-cluster, de taakstatus te bewaken en de uitvoer op te halen.

Volgende stappen

Voor algemene informatie over Hive in HDInsight:

Voor informatie over andere manieren waarop u met Hadoop in HDInsight kunt werken: