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
HDInsight üzerinde bir Apache Hadoop kümesi. Bkz. Linux üzerinde HDInsight ile çalışmaya başlama.
PowerShell Az Modülü yüklendi.
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 iş 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ümeyiInvoke-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:
Düzenleyici kullanarak aşağıdaki kodu olarak
hivejob.ps1
kaydedin.# 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
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.
İş 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
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: