Aracılığıyla paylaş


PowerShell kullanarak Apache Hive sorguları çalıştırma

Bu belge, HDInsight kümesindeki bir Apache Hadoop'ta Apache Hive sorgularını çalıştırmak için Azure PowerShell kullanma örneği sağlar.

Not

Bu belgede, örneklerde kullanılan HiveQL deyimlerinin ne yaptığıyla ilgili ayrıntılı bir açıklama sağlanmaz. Bu örnekte kullanılan HiveQL hakkında bilgi için bkz. HDInsight üzerinde Apache Hadoop ile Apache Hive kullanma.

Önkoşullar

Hive sorgusu çalıştırma

Azure PowerShell, HDInsight üzerinde Hive sorgularını uzaktan çalıştırmanıza olanak sağlayan cmdlet'ler sağlar. Cmdlet'ler dahili olarak HDInsight kümesinde WebHCat'e REST çağrıları yapar.

Aşağıdaki cmdlet'ler, bir uzak HDInsight kümesinde Hive sorguları çalıştırılırken kullanılır:

  • Connect-AzAccount: Azure aboneliğinizde Azure PowerShell kimliğini doğrular.
  • New-AzHDInsightHiveJobDefinition: Belirtilen HiveQL deyimlerini kullanarak bir iş tanımı oluşturur.
  • Start-AzHDInsightJob: İş tanımını HDInsight'a gönderir ve işi başlatır. bir nesnesi döndürülür.
  • Wait-AzHDInsightJob: İşin durumunu denetlemek için iş nesnesini kullanır. İş tamamlanana veya bekleme süresi aşılana kadar bekler.
  • Get-AzHDInsightJobOutput: İşin çıkışını almak için kullanılır.
  • Invoke-AzHDInsightHiveJob: HiveQL deyimlerini çalıştırmak için kullanılır. Bu cmdlet sorgunun tamamlanmasını engeller ve sonuçları döndürür.
  • Use-AzHDInsightCluster: Komut için kullanılacak geçerli kümeyi Invoke-AzHDInsightHiveJob ayarlar.

Aşağıdaki adımlar, HDInsight kümenizde bir iş çalıştırmak için bu cmdlet'lerin nasıl kullanılacağını gösterir:

  1. Düzenleyici kullanarak aşağıdaki kodu olarak hivejob.ps1kaydedin.

    # 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. Yeni bir Azure PowerShell komut istemi açın. Dizinleri dosyanın konumuna hivejob.ps1 değiştirin ve betiği çalıştırmak için aşağıdaki komutu kullanın:

    .\hivejob.ps1
    

    Betik çalıştırıldığında, küme adını ve HTTPS/Küme Yönetici hesabı kimlik bilgilerini girmeniz istenir. Azure aboneliğinizde oturum açmanız da istenebilir.

  3. İş tamamlandığında, aşağıdaki metne benzer bilgiler döndürür:

    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. Daha önce belirtildiği gibi, Invoke-Hive sorgu çalıştırmak ve yanıtı beklemek için kullanılabilir. Invoke-Hive nasıl çalıştığını görmek için aşağıdaki betiği kullanın:

    # 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
    

    Çıktı aşağıdaki metne benzer:

    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
    

    Not

    Daha uzun HiveQL sorguları için Azure PowerShell Here-Strings cmdlet'ini veya HiveQL betik dosyalarını kullanabilirsiniz. Aşağıdaki kod parçacığında bir HiveQL betik dosyasını çalıştırmak için cmdlet'in nasıl kullanılacağı Invoke-Hive gösterilmektedir. HiveQL betik dosyası wasbs:// yüklenmelidir.

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

    Here-Strings hakkında daha fazla bilgi için bkz. HERE-STRINGS.

Sorun giderme

İş tamamlandığında hiçbir bilgi döndürülmezse hata günlüklerini görüntüleyin. Bu işin hata bilgilerini görüntülemek için dosyanın sonuna hivejob.ps1 aşağıdakileri ekleyin, kaydedin ve sonra yeniden çalıştırın.

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

Bu cmdlet, iş işleme sırasında STDERR'ye yazılan bilgileri döndürür.

Özet

Gördüğünüz gibi Azure PowerShell bir HDInsight kümesinde Hive sorgularını çalıştırmak, iş durumunu izlemek ve çıkışı almak için kolay bir yol sağlar.

Sonraki adımlar

HDInsight'ta Hive hakkında genel bilgi için:

HDInsight üzerinde Hadoop ile çalışmanın diğer yolları hakkında bilgi için: