قم بتشغيل استعلامات Apache Hive باستخدام PowerShell

يوفر هذا المستند مثالًا على استخدام Azure PowerShell لتشغيل استعلامات Apache Hive في Apache Hadoop على مجموعة HDInsight.

ملاحظة

لا يقدم هذا المستند وصفًا تفصيليًا لما تفعله عبارات HiveQL المستخدمة في الأمثلة. للحصول على معلومات حول HiveQL المستخدمة في هذا المثال، راجع استخدام Apache Hive مع Apache Hadoop على HDInsight .

المتطلبات الأساسية

قم بتشغيل استعلام 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 الخاصة بك:

  1. باستخدام محرر، احفظ الكود التالي باسم 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. افتح موجه أوامر Azure PowerShell جديدًا. غيّر الدلائل إلى موقع ملف hivejob.ps1، ثم استخدم الأمر التالي لتشغيل البرنامج النصي:

    .\hivejob.ps1
    

    عند تشغيل البرنامج النصي، ستتم مطالبتك بإدخال اسم المجموعة وبيانات اعتماد حساب HTTPS / Cluster Admin. قد يُطلب منك أيضًا تسجيل الدخول إلى اشتراك Azure الخاص بك.

  3. عند اكتمال الوظيفة، تقوم بإرجاع معلومات مشابهة للنص التالي:

    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. كما ذكرنا سابقًا، يمكن استخدام 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: