إرشادات ضبط الأداء ل MapReduce على HDInsight و Azure Data Lake Storage Gen1
المتطلبات الأساسية
- اشتراك Azure. راجع الحصول على الإصدار التجريبي المجاني من Azure .
- حساب Azure Data Lake Storage Gen1. للحصول على إرشادات حول كيفية إنشاء واحد، راجع بدء استخدام Azure Data Lake Storage Gen1
- نظام مجموعة Azure HDInsight مع الوصول إلى حساب Data Lake Storage Gen1. راجع إنشاء مجموعة HDInsight باستخدام Data Lake Storage Gen1. تأكد من تمكين سطح المكتب البعيد للكتلة.
- استخدام MapReduce على HDInsight. لمزيد من المعلومات، راجع استخدام MapReduce في Hadoop على HDInsight
- راجع إرشادات ضبط الأداء Data Lake Storage Gen1. للحصول على مفاهيم الأداء العامة، راجع 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 بتعيين حدود النطاق الترددي على مستوى الحساب. إذا وصلت إلى هذه الحدود، فستبدأ في رؤية حالات فشل المهام. يمكن تحديد هذا عن طريق مراقبة أخطاء التقييد في سجلات المهام. إذا كنت بحاجة إلى المزيد من النطاق الترددي لوظيفتك، فالرجاء الاتصال بنا.
للتحقق مما إذا كنت قيد التقييد، تحتاج إلى تمكين تسجيل تتبع الأخطاء على جانب العميل. إليك كيفية القيام بذلك:
ضع الخاصية التالية في خصائص log4j في Ambari > YARN > Config > Advanced yarn-log4j: log4j.logger.com.microsoft.azure.datalake.store=DEBUG
أعد تشغيل جميع العقد/الخدمة حتى يدخل التكوين حيز التنفيذ.
إذا كنت مقيدا، فسترى رمز الخطأ 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