قم بتشغيل استعلامات Apache Hive باستخدام PowerShell
يوفر هذا المستند مثالًا على استخدام Azure PowerShell لتشغيل استعلامات Apache Hive في Apache Hadoop على مجموعة HDInsight.
ملاحظة
لا يقدم هذا المستند وصفًا تفصيليًا لما تفعله عبارات HiveQL المستخدمة في الأمثلة. للحصول على معلومات حول HiveQL المستخدمة في هذا المثال، راجع استخدام Apache Hive مع Apache Hadoop على HDInsight .
المتطلبات الأساسية
مجموعة Apache Hadoop على HDInsight. راجع بدء استخدام HDInsight على Linux .
تم تثبيت PowerShell Az Module .
قم بتشغيل استعلام Hive
يوفر Azure PowerShell أوامر cmdlets التي تتيح لك تشغيل استعلامات Hive عن بُعد على HDInsight. داخليًا، تقوم أوامر cmdlets بإجراء مكالمات REST إلى WebHCat على مجموعة HDInsight.
يتم استخدام أوامر cmdlets التالية عند تشغيل استعلامات Hive في مجموعة HDInsight عن بعد:
-
Connect-AzAccount
: يصادق Azure PowerShell على اشتراكك في Azure. -
New-AzHDInsightHiveJobDefinition
: إنشاء تعريف الوظيفة باستخدام عبارات HiveQL المحددة. -
Start-AzHDInsightJob
: يرسل تعريف الوظيفة إلى HDInsight ويبدأ المهمة. تم إرجاع كائن الوظيفة. -
Wait-AzHDInsightJob
: يستخدم كائن الوظيفة للتحقق من حالة الوظيفة. ينتظر حتى تكتمل المهمة أو يتم تجاوز وقت الانتظار. -
Get-AzHDInsightJobOutput
: يستخدم لاسترداد مخرجات الوظيفة. -
Invoke-AzHDInsightHiveJob
: يستخدم لتشغيل عبارات HiveQL. يؤدي هذا الأمر cmdlet إلى حظر اكتمال الاستعلام، ثم إرجاع النتائج. -
Use-AzHDInsightCluster
: تعيين المجموعة الحالية لاستخدامها للأمرInvoke-AzHDInsightHiveJob
.
توضح الخطوات التالية كيفية استخدام أوامر cmdlets هذه لتشغيل مهمة في مجموعة HDInsight الخاصة بك:
باستخدام محرر، احفظ الكود التالي باسم
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
افتح موجه أوامر Azure PowerShell جديدًا. غيّر الدلائل إلى موقع ملف
hivejob.ps1
، ثم استخدم الأمر التالي لتشغيل البرنامج النصي:.\hivejob.ps1
عند تشغيل البرنامج النصي، ستتم مطالبتك بإدخال اسم المجموعة وبيانات اعتماد حساب HTTPS / Cluster Admin. قد يُطلب منك أيضًا تسجيل الدخول إلى اشتراك Azure الخاص بك.
عند اكتمال الوظيفة، تقوم بإرجاع معلومات مشابهة للنص التالي:
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
كما ذكرنا سابقًا، يمكن استخدام
Invoke-Hive
لتشغيل استعلام وانتظار الاستجابة. استخدم البرنامج النصي التالي لمعرفة كيفية عمل 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
يبدو الإخراج مثل النص التالي:
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
ملاحظة
لاستعلامات HiveQL الأطول، يمكنك استخدام ملفات cmdlet أو ملفات HiveQL البرمجية لـAzure PowerShell Here-Strings. يوضح المقتطف التالي كيفية استخدام
Invoke-Hive
cmdlet لتشغيل ملف نصي HiveQL. يجب تحميل ملف البرنامج النصي HiveQL على wasbs: //.Invoke-AzHDInsightHiveJob -File "wasbs://<ContainerName>@<StorageAccountName>/<Path>/query.hql"
لمزيد من المعلومات حول Here-Strings، راجع HERE-STRINGS .
استكشاف الأخطاء وإصلاحها
إذا لم يتم إرجاع أي معلومات عند اكتمال المهمة، فقم بعرض سجلات الأخطاء. لعرض معلومات الخطأ لهذه المهمة، أضف ما يلي إلى نهاية ملف hivejob.ps1
، واحفظه، ثم قم بتشغيله مرة أخرى.
# Print the output of the Hive job.
Get-AzHDInsightJobOutput `
-Clustername $clusterName `
-JobId $job.JobId `
-HttpCredential $creds `
-DisplayOutputType StandardError
يُرجع هذا الأمر cmdlet المعلومات المكتوبة إلى STDERR أثناء معالجة المهمة.
الملخص
كما ترى، يوفر Azure PowerShell طريقة سهلة لتشغيل استعلامات Hive في مجموعة HDInsight ومراقبة حالة المهمة واسترداد المخرجات.
الخطوات التالية
للحصول على معلومات عامة حول Hive في HDInsight:
للحصول على معلومات حول الطرق الأخرى التي يمكنك من خلالها العمل مع Hadoop على HDInsight: