/تطوير تطبيق Hadoop Map-Reduce

تطوير تطبيق Hadoop Map-Reduce

في هذا المقال سوف ننظر إلى الجوانب العملية لتطوير تطبيق MapReduce في Hadoop.قبل ذلك أريدك أن تقرأ تلك الصفحة لتعلم قليلا عن Hadoop.

فى البداية دعونا نسترجع بعض المفاهيم الخاصة ب MapReduce والتى سوف تساعد قليلا فى فهم الأجزاء التالية من تلك المقالات:

  • الوظيفة [Job] هى عبارة عن تنفيذ كامل لدوال Map و Reduce على مجموعة من البيانات أو المعلومات.
  • المهمة [Task] هى تنفيذ جزء من وظيفة Map أو Reduce على شريحة من البيانات.
  • محاولة تنفيذ مهمة [Task Attempt] هى محاولة لتنفيذ المهمة, و التى يمكن أن تتم أو لا طبقا لظروف كثيرة سنقوم بذكرها لاحقا.

عندما تقوم بتشغيل برنامج لعد الكلمات “Word Count” على 20 ملفا مثلا, فهذه تعتبر وظيفة واحدة.عند إجراء عملية Mapping على ال 20 ملفا, هذا يولد 20 مهمة لعمل mapping و القليل من المهام لعمل reduce .على الأقل سيكون هناك 20 محاولة لتنفيذ المهام, ويمكن أن يزيد اعدد محاولات التنفيذ إذا كان هناك مشاكل أو تعطل[crash] للماكينة [machine or computer].

تتم محاولة تنفيذ المهمة على الأقل مرة, ولكن إذا تسبب نفس المدخل من المعلومات فى مشاكل أو تعطل للماكينة سيتم استبعاده من جدول مهام التنفيذ. يمكن أيضا أن تكون هناك محاولات كثيرة لتنفيذ مهمة ما بشكل متوازى, ولكن هذا يستلزم تشغيل التنفيذ الحذر, أو Speculative execution.

لنلق نظرة على كيفية عمل وظائف Map-Reduce بشكل أفضل.

تقوم الخلية الرئيسية [Master Node]  بتشغيل JobTracker والذى يعمل على ترتيب الوظائف بشكل ما و استقبال طلبات الوظائف لتنفيذها. ضع فى الاعتبار أن TaskTracker يقوم بتنفيذ عمليات منفصلة [Separate process] لكل وظيفة سيتم تنفيذها.


كتابة برنامج في MapReduce له تسلسل منطقى معين؛ فأنت تبدأ بكتابة دوال Map و Reduce ، من الناحية المثالية مع وحدات اختبار Unit Tests للتأكد من انها تفعل ما كنت تتوقع.ثم تقوم بكتابة برنامج تشغيل لتشغيل وظيفة ، والتي يمكن تشغيلها من بيئة تطوير متكاملة الخاص باستخدام فرعية صغيرة من البيانات للتأكد من أنها تعمل. مع هذه المعلومات ، يمكنك توسيع وحدة الاختبار الخاصة لتغطية هذه الحالة ، وتحسين التعامل مع هذه المدخلات بشكل صحيح.


عندما يتم تشغيل البرنامج كما هو متوقع ضد مجموعة البيانات صغيرة ، فستكون مستعدا لتشغيله على مجموعتك من الأجهزة[your cluster] أيا كان نوع المجموعة.
يوفر Hadoop بعض أدوات للمساعدة ، مثل IsolationRunner ، والذي يسمح لك بتشغيل مهمة على نفس المدخلات التي فشلت ، مع مصحح [Debugger] ، إذا لزم الأمر.

بعد أن يعمل البرنامج ، قد ترغب في القيام ببعض الضبط ، أولا عن طريق تشغيل خلال بعض الاختبارات القياسية لجعل البرامج MapReduce أسرع ومن ثم عن طريق القيام مهمة التنميط[Task Profiling].عملية تنميط البرامج الموزعة ليست تافهة ، ولكنها Hadoop يوفر بعض المساعدة لذلك.

قبل أن نبدأ في كتابة برنامج MapReduce ، نحن بحاجة إلى إعداد وتكوين بيئة العمل. وإلى ذلك ، نحن بحاجة الى ان نتعلم قليلا حول كيفية قيام Hadoop بعمل الإعدادات الخاصة به.

إعدادات Hadoop تأتى من واجهة برمجة التطبيقات[API] الخاصة ب Hadoop .تمثل الحزمة org.apache.hadoop.conf مجموعة من خصائص الاعدادات وقيمها. كل خاصية لها اسم،ونوع القيمة يمكن أن يكون واحدا من الأنواع الموجودة أصلا بالجافا, مثل boolean, int, long, float.

هذا مثلا ملف XML يبين أزواج كل منها به اسم و قيمة.لنسمى هذا الملف hadoop-configuration.xml

يمكننا الحصول على الخصائص بكتابة كود بسيط كالآتى:

يوجد شيئان يستلزم أخذهما فى الاعتبار, أن معلومات النوع لا يتم وضعها فى كود الـ XML , وأيضا أن دوال ()get تسمح لك بأن تضع قيمة افتراضية, والتى تستخدم إذا كانت الخاصية غير موجودة بكود الـ XML, مثل breadth هنا.
خواص الإعدادات يمكنها أن تعرف بمفردات من خصائص أخرى, مثل {size}$ و {weight}$ , فتلك الخصائص يتم التعويض عنها بالقيم الموجودة بملف الإعدادات مثل:
الآن سوف نقوم بتهيئة بيئة التطوير نفسها,للاختصار يمكنك قراءة تلك الصفحة لمعرفة كيفية إعداد بيئة العمل.
إذا كنت من مستخدمى eclipse ألق نظرة هنا.
بعد تهيئة بيئة العمل, عند تطوير تطبيقات Hadoop ، من الشائع للتبديل بين تشغيل التطبيق محليا[locally] والتي تعمل على مجموعة [cluster]. في الواقع قد يكون لديك عدة مجموعات فعلا للعمل عليها, أو يمكنك العمل على مجموعة افتراضية [Pseudo-cluster] والموجود تفاصيل كيفية إعدادها فى نفس الصفحة المشار إليها سابقا.
فى الجزء القادم سنتعلم كتابة وحدات اختبار Unit Test لبعض وظائف Map-Reduce.
عذرا إذا كان سياق المقال غير متناسق, ولكن فعلا كتابة مقالات تقنية بالعربية واحدة من التجارب الصعبة التى يمكن أن تخوضها فى حياتك!
TAGS: