Spouštění dotazů Apache Hivu pomocí PowerShellu

Tento dokument obsahuje příklad použití Azure PowerShell ke spouštění dotazů Apache Hive v clusteru Apache Hadoop v clusteru HDInsight.

Poznámka

Tento dokument neposkytuje podrobný popis toho, co příkazy HiveQL použité v příkladech dělají. Informace o HiveQL použité v tomto příkladu najdete v tématu Použití Apache Hivu s Apache Hadoopem ve službě HDInsight.

Požadavky

Spuštění dotazu Hive

Azure PowerShell poskytuje rutiny, které umožňují vzdálené spouštění dotazů Hive ve službě HDInsight. Rutiny interně volání REST WebHCat v clusteru HDInsight.

Při spouštění dotazů Hive ve vzdáleném clusteru HDInsight se používají následující rutiny:

  • Connect-AzAccount: Ověřuje Azure PowerShell ve vašem předplatném Azure.
  • New-AzHDInsightHiveJobDefinition: Vytvoří definici úlohy pomocí zadaných příkazů HiveQL.
  • Start-AzHDInsightJob: Odešle definici úlohy do služby HDInsight a spustí úlohu. Vrátí se objekt úlohy .
  • Wait-AzHDInsightJob: Použije objekt úlohy ke kontrole stavu úlohy. Čeká na dokončení úlohy nebo na překročení doby čekání.
  • Get-AzHDInsightJobOutput: Slouží k načtení výstupu úlohy.
  • Invoke-AzHDInsightHiveJob: Slouží ke spouštění příkazů HiveQL. Tato rutina zablokuje dokončení dotazu a pak vrátí výsledky.
  • Use-AzHDInsightCluster: Nastaví aktuální cluster, který se má použít pro Invoke-AzHDInsightHiveJob příkaz .

Následující kroky ukazují, jak pomocí těchto rutin spustit úlohu v clusteru HDInsight:

  1. Pomocí editoru uložte následující kód jako 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. Otevřete nový příkazový řádek Azure PowerShell. Změňte adresáře na umístění hivejob.ps1 souboru a pak pomocí následujícího příkazu spusťte skript:

    .\hivejob.ps1
    

    Po spuštění skriptu se zobrazí výzva k zadání názvu clusteru a přihlašovacích údajů účtu HTTPS/Cluster Správa. Může se také zobrazit výzva k přihlášení k předplatnému Azure.

  3. Po dokončení úlohy se vrátí informace podobné následujícímu textu:

    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. Jak už bylo zmíněno dříve, Invoke-Hive můžete ho použít ke spuštění dotazu a čekání na odpověď. Pomocí následujícího skriptu zjistíte, jak Invoke-Hive funguje:

    # 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
    

    Výstup vypadá jako následující 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
    

    Poznámka

    Pro delší dotazy HiveQL můžete použít Azure PowerShell rutinu Here-Strings nebo soubory skriptu HiveQL. Následující fragment kódu ukazuje, jak pomocí rutiny Invoke-Hive spustit soubor skriptu HiveQL. Soubor skriptu HiveQL se musí nahrát do wasbs://.

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

    Další informace o Here-Strings najdete v tématu HERE-STRINGS.

Řešení potíží

Pokud se po dokončení úlohy nevrátí žádné informace, prohlédněte si protokoly chyb. Pokud chcete zobrazit informace o chybě pro tuto úlohu, přidejte na konec hivejob.ps1 souboru následující kód, uložte ho a spusťte ho znovu.

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

Tato rutina vrátí informace, které jsou zapsány do STDERR během zpracování úlohy.

Souhrn

Jak vidíte, Azure PowerShell poskytuje snadný způsob spouštění dotazů Hive v clusteru HDInsight, monitorování stavu úlohy a načtení výstupu.

Další kroky

Obecné informace o Hivu ve službě HDInsight:

Informace o dalších způsobech práce s Hadoopem ve službě HDInsight: