إرشادات ضبط الأداء ل MapReduce على HDInsight و Azure Data Lake Storage Gen1

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

المعلمات

عند تشغيل مهام MapReduce، فيما يلي أهم المعلمات التي يمكنك تكوينها لزيادة الأداء على Data Lake Storage Gen1:

المعلمة الوصف
Mapreduce.map.memory.mb مقدار الذاكرة التي يجب تخصيصها لكل معين.
Mapreduce.job.maps عدد مهام الخريطة لكل وظيفة.
Mapreduce.reduce.memory.mb مقدار الذاكرة المراد تخصيصها لكل مخفض.
Mapreduce.job.reduces عدد مهام التقليل لكل وظيفة.

Mapreduce.map.memory / Mapreduce.reduce.memory

اضبط هذا الرقم استنادا إلى مقدار الذاكرة المطلوبة للمخطط و/أو مهمة التقليل. يمكنك عرض القيم الافتراضية ل mapreduce.map.memory و mapreduce.reduce.memory في Ambari عبر تكوين Yarn. في Ambari، انتقل إلى YARN واعرض علامة التبويب Configs . سيتم عرض ذاكرة YARN.

Mapreduce.job.maps / Mapreduce.job.reduces

يحدد هذا الحد الأقصى لعدد المعينين أو المخفضات المراد إنشاؤها. يحدد عدد التقسيمات عدد المعينين الذين تم إنشاؤهم لمهمة MapReduce. لذلك، قد تحصل على عدد معينات أقل مما طلبت إذا كان هناك تقسيمات أقل من عدد المعينين المطلوبين.

الإرشاد

الخطوة 1: تحديد عدد المهام قيد التشغيل

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

الخطوة 2: تعيين mapreduce.map.memory/mapreduce.reduce.memory

سيعتمد حجم الذاكرة لمهام الخريطة والتقليل على وظيفتك المحددة. يمكنك تقليل حجم الذاكرة إذا كنت تريد زيادة التزامن. يعتمد عدد المهام قيد التشغيل المتزامن على عدد الحاويات. من خلال تقليل مقدار الذاكرة لكل معين أو مخفض، يمكن إنشاء المزيد من الحاويات، ما يمكن المزيد من المعينين أو المخفضات من التشغيل بشكل متزامن. قد يؤدي تقليل مقدار الذاكرة أكثر من اللازم إلى نفاد الذاكرة في بعض العمليات. إذا تلقيت خطأ في كومة الذاكرة المؤقتة عند تشغيل وظيفتك، فقم بزيادة الذاكرة لكل معين أو مخفض. ضع في اعتبارك أن إضافة المزيد من الحاويات يضيف حملا إضافيا لكل حاوية إضافية، مما قد يؤدي إلى تدهور الأداء. بديل آخر هو الحصول على المزيد من الذاكرة باستخدام نظام مجموعة يحتوي على كميات أكبر من الذاكرة أو زيادة عدد العقد في نظام المجموعة الخاص بك. ستمكن ذاكرة إضافية من استخدام المزيد من الحاويات، مما يعني المزيد من التزامن.

الخطوة 3: تحديد إجمالي ذاكرة YARN

لضبط mapreduce.job.maps/mapreduce.job.reduces، ضع في اعتبارك مقدار إجمالي ذاكرة YARN المتاحة للاستخدام. تتوفر هذه المعلومات في Ambari. انتقل إلى YARN واعرض علامة التبويب Configs . يتم عرض ذاكرة YARN في هذه النافذة. اضرب ذاكرة YARN بعدد العقد في مجموعتك للحصول على إجمالي ذاكرة YARN.

Total YARN memory = nodes * YARN memory per node

إذا كنت تستخدم مجموعة فارغة، فيمكن أن تكون الذاكرة إجمالي ذاكرة YARN لنظام المجموعة الخاص بك. إذا كانت التطبيقات الأخرى تستخدم الذاكرة، فيمكنك اختيار استخدام جزء من ذاكرة نظام المجموعة فقط عن طريق تقليل عدد المعينين أو المخفضات إلى عدد الحاويات التي تريد استخدامها.

الخطوة 4: حساب عدد حاويات YARN

تحدد حاويات YARN مقدار التزامن المتاح للوظيفة. خذ إجمالي ذاكرة YARN وقسمها على mapreduce.map.memory.

# of YARN containers = total YARN memory / mapreduce.map.memory

الخطوة 5: تعيين mapreduce.job.maps/mapreduce.job.reduces

تعيين mapreduce.job.maps/mapreduce.job.reduces إلى عدد الحاويات المتوفرة على الأقل. يمكنك إجراء المزيد من التجربة عن طريق زيادة عدد المعينين والمخفضات لمعرفة ما إذا كنت تحصل على أداء أفضل. ضع في اعتبارك أن المزيد من المعينين سيكون لديهم حمل إضافي لذلك قد يؤدي وجود عدد كبير جدا من المعينين إلى تدهور الأداء.

يتم إيقاف تشغيل جدولة وحدة المعالجة المركزية وعزل وحدة المعالجة المركزية بشكل افتراضي بحيث يتم تقييد عدد حاويات YARN بواسطة الذاكرة.

مثال على الحساب

لنفترض أن لديك حاليا مجموعة مكونة من 8 عقد D14 وتريد تشغيل مهمة إدخال/إخراج مكثفة. فيما يلي العمليات الحسابية التي يجب عليك القيام بها:

الخطوة 1: تحديد عدد المهام قيد التشغيل

على سبيل المثال، نفترض أن عملنا هو الوحيد قيد التشغيل.

الخطوة 2: تعيين mapreduce.map.memory/mapreduce.reduce.memory

على سبيل المثال، تقوم بتشغيل مهمة إدخال/إخراج مكثفة وتقرر أن 3 غيغابايت من الذاكرة لمهام الخريطة كافية.

mapreduce.map.memory = 3GB

الخطوة 3: تحديد إجمالي ذاكرة YARN

total memory from the cluster is 8 nodes * 96GB of YARN memory for a D14 = 768GB

الخطوة 4: حساب عدد حاويات YARN

# of YARN containers = 768 GB of available memory / 3 GB of memory = 256

الخطوة 5: تعيين mapreduce.job.maps/mapreduce.job.reduces

mapreduce.map.jobs = 256

التقييدات

Data Lake Storage Gen1 التقييد

كخدمة متعددة المستأجرين، Data Lake Storage Gen1 بتعيين حدود النطاق الترددي على مستوى الحساب. إذا وصلت إلى هذه الحدود، فستبدأ في رؤية حالات فشل المهام. يمكن تحديد هذا عن طريق مراقبة أخطاء التقييد في سجلات المهام. إذا كنت بحاجة إلى المزيد من النطاق الترددي لوظيفتك، فالرجاء الاتصال بنا.

للتحقق مما إذا كنت قيد التقييد، تحتاج إلى تمكين تسجيل تتبع الأخطاء على جانب العميل. إليك كيفية القيام بذلك:

  1. ضع الخاصية التالية في خصائص log4j في Ambari > YARN > Config > Advanced yarn-log4j: log4j.logger.com.microsoft.azure.datalake.store=DEBUG

  2. أعد تشغيل جميع العقد/الخدمة حتى يدخل التكوين حيز التنفيذ.

  3. إذا كنت مقيدا، فسترى رمز الخطأ HTTP 429 في ملف سجل YARN. ملف سجل YARN في /tmp/<user>/yarn.log

أمثلة للتشغيل

لتوضيح كيفية تشغيل MapReduce على Data Lake Storage Gen1، فيما يلي بعض نماذج التعليمات البرمجية التي تم تشغيلها على نظام مجموعة بالإعدادات التالية:

  • 16 عقدة D14v2
  • نظام مجموعة Hadoop الذي يشغل HDI 3.6

للحصول على نقطة بداية، فيما يلي بعض أمثلة الأوامر لتشغيل MapReduce Teragen وTerasort وTeravalidate. يمكنك ضبط هذه الأوامر استنادا إلى مواردك.

تيرجين

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 10000000000 adl://example/data/1TB-sort-input

تيراسورت

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar terasort -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 -Dmapreduce.job.reduces=512 -Dmapreduce.reduce.memory.mb=3072 adl://example/data/1TB-sort-input adl://example/data/1TB-sort-output

Teravalidate

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teravalidate -Dmapreduce.job.maps=512 -Dmapreduce.map.memory.mb=3072 adl://example/data/1TB-sort-output adl://example/data/1TB-sort-validate