استخدم دوال #C التي يحددها المستخدم مع Apache Hive وApache Pig على Apache Hadoop في HDInsight

تعرّف على كيفية استخدام وظائف #C المعرفة (UDF) مع Apache Hive وApache Pig على HDInsight.

هام

تعمل الخطوات الواردة في هذا المستند مع مجموعات HDInsight المستندة إلى Linux. Linux هو نظام التشغيل الوحيد المستخدم على HDInsight الإصدار 3.4 أو أعلى. لمزيدٍ من المعلومات، راجع تعيين إصدارات مكون HDInsight.

يمكن لكلٍّ من Apache Hive وPig تمرير البيانات إلى تطبيقات خارجية للمعالجة. تُعرف هذه العملية باسم التدفق. عند استخدام تطبيق.NET، يتم تمرير البيانات إلى التطبيق على STDIN، ويقوم التطبيق بإرجاع النتائج على STDOUT. للقراءة والكتابة من STDIN وSTDOUT، يمكنك استخدام Console.ReadLine() and Console.WriteLine() من تطبيق وحدة التحكم.

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

  • الإلمام بكتابة وبناء التعليمة البرمجية #C الذي يستهدف.NET Framework 4.5.

    استخدم أي IDE تريده. نوصي باستخدام Visual Studio أو Visual Studio Code. تستخدم الخطوات الواردة في هذا المستند Visual Studio 2019.

  • طريقة لتحميل ملفات exe. إلى المجموعة وتشغيل مهام Pig and Apache Hive. نوصي باستخدام Data Lake Tools لـ Visual Studioو Azure PowerShellو Azure CLI. تستخدم الخطوات في هذا المستند Data Lake Tools for Visual Studio لتحميل الملفات وتشغيل نموذج استعلام Apache Hive.

    للحصول على معلومات حول الطرق الأخرى لتشغيل استعلامات Hive، راجع ما هي Apache Hive وHiveQL على Azure HDInsight؟.

  • A Hadoop على مجموعة HDInsight. لمزيدٍ من المعلومات حول إنشاء مجموعة، راجع إنشاء مجموعات HDInsight.

NET على HDInsight

تستخدم مجموعات HDInsightالمستندة إلى Linux Mono (https://mono-project.com) لتشغيل تطبيقات.NET. يتم تضمين إصدار Mono 4.2.1 مع HDInsight الإصدار 3.6.

لمزيدٍ من المعلومات حول التوافق الأحادي مع إصدارات.NET Framework، راجع التوافق الأحادي.

لمزيدٍ من المعلومات حول إصدار.NET Framework وMono المضمن في إصدارات HDInsight، راجع إصدارات مكونات HDInsight.

إنشاء مشاريع #C

تصف الأقسام التالية كيفية إنشاء مشروع #C في Visual Studio لوحدة Apache Hive UDF وApache Pig UDF.

Apache Hive UDF

لإنشاء مشروع #C لـ Apache Hive UDF:

  1. قم بتشغيل Visual Studio.

  2. حدد إنشاء مشروع جديد.

  3. في نافذة Create a new project، اختر القالب تطبيق Console (.NET Framework) (الإصدار #C). بعد ذلك حدد التالي.

  4. في نافذة Configure your new project، أدخل Project name لـ HiveCSharp، وانتقل إلى أو أنشئ موقعاً لحفظ مشروع في. وبعد ذلك، حدد إنشاء.

  5. في Visual Studio IDE، استبدل محتويات Program.cs بالتعليمات البرمجية التالية:

    using System;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace HiveCSharp
    {
        class Program
        {
            static void Main(string[] args)
            {
                string line;
                // Read stdin in a loop
                while ((line = Console.ReadLine()) != null)
                {
                    // Parse the string, trimming line feeds
                    // and splitting fields at tabs
                    line = line.TrimEnd('\n');
                    string[] field = line.Split('\t');
                    string phoneLabel = field[1] + ' ' + field[2];
                    // Emit new data to stdout, delimited by tabs
                    Console.WriteLine("{0}\t{1}\t{2}", field[0], phoneLabel, GetMD5Hash(phoneLabel));
                }
            }
            /// <summary>
            /// Returns an MD5 hash for the given string
            /// </summary>
            /// <param name="input">string value</param>
            /// <returns>an MD5 hash</returns>
            static string GetMD5Hash(string input)
            {
                // Step 1, calculate MD5 hash from input
                MD5 md5 = System.Security.Cryptography.MD5.Create();
                byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
                byte[] hash = md5.ComputeHash(inputBytes);
    
                // Step 2, convert byte array to hex string
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < hash.Length; i++)
                {
                    sb.Append(hash[i].ToString("x2"));
                }
                return sb.ToString();
            }
        }
    }
    
  6. من شريط القائمة، حدد Build>Build Solution لإنشاء المشروع.

  7. أغلق الحل.

Apache خنزير UDF

لإنشاء مشروع #C لـ Apache Hive UDF:

  1. افتح Visual Studio.

  2. من نافذة Start، اختر Create a new project.

  3. في نافذة Create a new project، اختر القالب تطبيق Console (.NET Framework) (الإصدار #C). بعد ذلك حدد التالي.

  4. في نافذة Configure your new project، أدخل Project name لـ PigUDF، وانتقل إلى Location أو أنشئه لحفظ مشروع في. وبعد ذلك، حدد إنشاء.

  5. في Visual Studio IDE، استبدل محتويات Program.cs بالتعليمات البرمجية التالية:

    using System;
    
    namespace PigUDF
    {
        class Program
        {
            static void Main(string[] args)
            {
                string line;
                // Read stdin in a loop
                while ((line = Console.ReadLine()) != null)
                {
                    // Fix formatting on lines that begin with an exception
                    if(line.StartsWith("java.lang.Exception"))
                    {
                        // Trim the error info off the beginning and add a note to the end of the line
                        line = line.Remove(0, 21) + " - java.lang.Exception";
                    }
                    // Split the fields apart at tab characters
                    string[] field = line.Split('\t');
                    // Put fields back together for writing
                    Console.WriteLine(String.Join("\t",field));
                }
            }
        }
    }
    

    يوزع هذا الرمز الأسطر المرسلة من Pig ويعيد تنسيق الأسطر التي تبدأ بـ java.lang.Exception.

  6. من شريط القائمة، اختر Build>Build Solution لإنشاء المشروع.

  7. اترك الحل مفتوحاً.

تحميل إلى التخزين

بعد ذلك، قم بتحميل تطبيقات Apache Hive وPig UDF للتخزين على مجموعة HDInsight.

  1. في Visual Studio، انتقل إلى View>Server Explorer.

  2. من Server Explorer، انقر بزر الماوس الأيمن فوق Azure، وحدد الاتصال باشتراك Microsoft Azure، وأكمل عملية تسجيل الدخول.

  3. قم بتوسيع مجموعة HDInsight التي ترغب في نشر هذا التطبيق عليها. تم إدراج إدخال بالنص (حساب التخزين الافتراضي).

    Default storage account, HDInsight cluster, Server Explorer.

    • إذا كان من الممكن توسيع هذا الإدخال، فأنت تستخدم حساب تخزين Azure كتخزين افتراضي للمجموعة. لعرض الملفات على وحدة التخزين الافتراضية للمجموعة، قم بتوسيع الإدخال ثم انقر نقراً مزدوجاً فوق (الحاوية الافتراضية).

    • إذا تعذر توسيع هذا الإدخال، فأنت تستخدم Azure Data Lake Storage كتخزين افتراضي للمجموعة. لعرض الملفات على وحدة التخزين الافتراضية للمجموعة، انقر نقراً مزدوجاً فوق الإدخال (حساب التخزين الافتراضي).

  4. لتحميل ملفات exe.، استخدم إحدى الطرق التالية:

    • إذا كنت تستخدم حساب تخزين Azure، فحدد رمز تحميل Blob.

      HDInsight upload icon for new project.

      في مربع الحوار Upload New File، ضمن File name، حدد Browse. في مربع الحوار تحميل Blob، انتقل إلى المجلد bin \ debug لمشروع HiveCSharp، ثم اختر HiveCSharp.exe ملف. أخيراً، حدد Open ثم OK لإكمال التحميل.

    • إذا كنت تستخدم Azure Data Lake Storage، فانقر بزر الماوس الأيمن فوق منطقة فارغة في قائمة الملف، ثم حدد Upload. أخيراً، اختر ملف HiveCSharp.exe وحدد فتح.

    بمخزون انتهاء تحميل HiveCSharp.exe، كرر عملية التحميل لملف PigUDF.exe.

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

يمكنك الآن تشغيل استعلام Apache Hive الذي يستخدم تطبيق Apache Hive UDF الخاص بك.

  1. في Visual Studio، انتقل إلى View>Server Explorer.

  2. قم بتوسيع Azure، ثم قم بتوسيع HDInsight.

  3. انقر بزر الماوس الأيمن فوق المجموعة التي قمت بنشر تطبيق Apache HiveCSharp عليها، ثم حدد Write a Apache Hive Query.

  4. استخدم النص التالي لاستعلام Apache Hive:

    -- Uncomment the following if you are using Azure Storage
    -- add file wasbs:///HiveCSharp.exe;
    -- Uncomment the following if you are using Azure Data Lake Storage Gen1
    -- add file adl:///HiveCSharp.exe;
    -- Uncomment the following if you are using Azure Data Lake Storage Gen2
    -- add file abfs:///HiveCSharp.exe;
    
    SELECT TRANSFORM (clientid, devicemake, devicemodel)
    USING 'HiveCSharp.exe' AS
    (clientid string, phoneLabel string, phoneHash string)
    FROM hivesampletable
    ORDER BY clientid LIMIT 50;
    

    هام

    قم بإلغاء التعليق على العبارة add file التي تطابق نوع التخزين الافتراضي المستخدم للمجموعة الخاصة بك.

    يقوم هذا الاستعلام بتحديد الحقول clientidو devicemakeو devicemodel من hivesampletable، ثم يقوم بتمرير الحقول إلى تطبيق HiveCSharp.exe. يتوقع الاستعلام أن يقوم التطبيق بإرجاع ثلاثة حقول يتم تخزينها كـ clientidو phoneLabelو phoneHash. يتوقع الاستعلام أيضاً العثور على HiveCSharp.exe في جذر حاوية التخزين الافتراضية.

  5. بدّل الافتراضي Interactive إلى Batch، ثم حدد إرسال لإرسال المهمة إلى مجموعة HDInsight. تفتح نافذة Hive Job Summary.

  6. حدد Refresh لتحديث الملخص حتى تتغير Job Status إلى Completed. لعرض مخرجات المهمة، حدد Job Output.

قم بتشغيل مهمة Apache Pig

يمكنك أيضاً تشغيل وظيفة Pig التي تستخدم تطبيق Pig UDF الخاص بك.

  1. استخدم SSH للاتصال بمجموعة HDInsight الخاصة بك. (على سبيل المثال، قم بتشغيل الأمر ssh sshuser@<clustername>-ssh.azurehdinsight.net.) لمزيدٍ من المعلومات، راجع استخدام SSH withHDInsight.

  2. استخدم الأمر التالي لبدء سطر أوامر Pig:

    pig
    

    يتم عرض موجه grunt>.

  3. أدخل ما يلي لتشغيل مهمة Pig التي تستخدم تطبيق.NET Framework:

    DEFINE streamer `PigUDF.exe` CACHE('/PigUDF.exe');
    LOGS = LOAD '/example/data/sample.log' as (LINE:chararray);
    LOG = FILTER LOGS by LINE is not null;
    DETAILS = STREAM LOG through streamer as (col1, col2, col3, col4, col5);
    DUMP DETAILS;
    

    تُنشئ العبارة DEFINE اسماً مستعاراً لـ streamer تطبيق PigUDF.exe، وتحميله CACHE من التخزين الافتراضي للمجموعة. في وقت لاحق، تم استخدام streameris used with the STREAM لمعالجة الأسطر المفردة الموجودة في LOG وإرجاع البيانات كسلسلة من الأعمدة.

    إشعار

    يجب أن يكون اسم التطبيق المستخدم للبث محاطا بالحرف ` (backtick) عند تسميته بالاسم المستعار، وحرف ' (علامة اقتباس مفردة) عند استخدامه مع SHIP.

  4. يجب أن تبدأ الوظيفة بعد إدخال السطر الأخير. تقوم بإرجاع إخراج مشابه للنص التالي:

    (2019-07-15 16:43:25 SampleClass5 [WARN] problem finding id 1358451042 - java.lang.Exception)
    (2019-07-15 16:43:25 SampleClass5 [DEBUG] detail for id 1976092771)
    (2019-07-15 16:43:25 SampleClass5 [TRACE] verbose detail for id 1317358561)
    (2019-07-15 16:43:25 SampleClass5 [TRACE] verbose detail for id 1737534798)
    (2019-07-15 16:43:25 SampleClass7 [DEBUG] detail for id 1475865947)
    
  5. استخدم exit للخروج من pig.

الخطوات التالية

في هذا المستند، تعلمت كيفية استخدام تطبيق.NET Framework من Hive and Pig على HDInsight. إذا كنت ترغب في معرفة كيفية استخدام Python مع Hive and Pig، راجع استخدام Python مع Apache Hive وApache Pig في HDInsight.

للحصول على طرق أخرى لاستخدام Apache Hive، ولمعرفة المزيد حول استخدام MapReduce، راجع المقالات التالية: