Uruchamianie zapytań apache Hive przy użyciu programu PowerShell

Ten dokument zawiera przykład użycia Azure PowerShell do uruchamiania zapytań apache Hive w klastrze usługi HDInsight w usłudze Apache Hadoop.

Uwaga

Ten dokument nie zawiera szczegółowego opisu instrukcji HiveQL używanych w przykładach. Aby uzyskać informacje na temat biblioteki HiveQL używanej w tym przykładzie, zobacz Use Apache Hive with Apache Hadoop on HDInsight (Używanie programu Apache Hive z usługą Apache Hadoop w usłudze HDInsight).

Wymagania wstępne

Uruchomienie zapytania programu Hive

Azure PowerShell udostępnia polecenia cmdlet, które umożliwiają zdalne uruchamianie zapytań Hive w usłudze HDInsight. Wewnętrznie polecenia cmdlet tworzą wywołania REST do serwera WebHCat w klastrze usługi HDInsight.

Następujące polecenia cmdlet są używane podczas uruchamiania zapytań Hive w zdalnym klastrze usługi HDInsight:

  • Connect-AzAccount: uwierzytelnia Azure PowerShell do subskrypcji platformy Azure.
  • New-AzHDInsightHiveJobDefinition: Tworzy definicję zadania przy użyciu określonych instrukcji HiveQL.
  • Start-AzHDInsightJob: wysyła definicję zadania do usługi HDInsight i uruchamia zadanie. Zwracany jest obiekt zadania .
  • Wait-AzHDInsightJob: używa obiektu zadania, aby sprawdzić stan zadania. Czeka na ukończenie zadania lub przekroczenie czasu oczekiwania.
  • Get-AzHDInsightJobOutput: służy do pobierania danych wyjściowych zadania.
  • Invoke-AzHDInsightHiveJob: służy do uruchamiania instrukcji HiveQL. To polecenie cmdlet blokuje ukończenie zapytania, a następnie zwraca wyniki.
  • Use-AzHDInsightCluster: ustawia bieżący klaster do użycia dla Invoke-AzHDInsightHiveJob polecenia .

W poniższych krokach pokazano, jak używać tych poleceń cmdlet do uruchamiania zadania w klastrze usługi HDInsight:

  1. Za pomocą edytora zapisz następujący kod 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. Otwórz nowy wiersz polecenia Azure PowerShell. Zmień katalogi na lokalizację hivejob.ps1 pliku, a następnie użyj następującego polecenia, aby uruchomić skrypt:

    .\hivejob.ps1
    

    Po uruchomieniu skryptu zostanie wyświetlony monit o wprowadzenie nazwy klastra i poświadczeń konta administratora klastra/klastra. Może zostać również wyświetlony monit o zalogowanie się do subskrypcji platformy Azure.

  3. Po zakończeniu zadania zwraca informacje podobne do następującego tekstu:

    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 wspomniano wcześniej, Invoke-Hive można użyć do uruchomienia zapytania i oczekiwania na odpowiedź. Użyj następującego skryptu, aby zobaczyć, jak działa 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
    

    Dane wyjściowe wyglądają następująco:

    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
    

    Uwaga

    W przypadku dłuższych zapytań HiveQL można użyć polecenia cmdlet Azure PowerShell Here-Strings lub plików skryptów HiveQL. Poniższy fragment kodu pokazuje, jak użyć polecenia cmdlet do uruchomienia pliku skryptu Invoke-Hive HiveQL. Plik skryptu HiveQL musi zostać przekazany do wasbs://.

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

    Aby uzyskać więcej informacji na temat ciągów here-string, zobacz HERE-STRINGS.

Rozwiązywanie problemów

Jeśli po zakończeniu zadania nie zostaną zwrócone żadne informacje, wyświetl dzienniki błędów. Aby wyświetlić informacje o błędzie dla tego zadania, dodaj następujący kod na końcu hivejob.ps1 pliku, zapisz go, a następnie uruchom go ponownie.

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

To polecenie cmdlet zwraca informacje zapisywane w usłudze STDERR podczas przetwarzania zadań.

Podsumowanie

Jak widać, Azure PowerShell zapewnia łatwy sposób uruchamiania zapytań Hive w klastrze usługi HDInsight, monitorowania stanu zadania i pobierania danych wyjściowych.

Następne kroki

Aby uzyskać ogólne informacje na temat programu Hive w usłudze HDInsight:

Aby uzyskać informacje o innych sposobach pracy z usługą Hadoop w usłudze HDInsight: