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

تم تعيين الإعدادات الافتراضية لتوفير أداء جيد عبر العديد من حالات الاستخدام المختلفة. بالنسبة للاستعلامات المكثفة الإدخال/إخراج، يمكن ضبط Apache Hive للحصول على أداء أفضل مع Azure Data Lake Storage Gen1.

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

المعلمات

فيما يلي أهم الإعدادات التي يجب ضبطها لتحسين أداء Data Lake Storage Gen1:

  • hive.tez.container.size – مقدار الذاكرة المستخدمة من قبل كل مهام

  • tez.grouping.min-size – الحد الأدنى لحجم كل معين

  • tez.grouping.max الحجم – الحد الأقصى لحجم كل معين

  • hive.exec.reducer.bytes.per.reducer – حجم كل مخفض

hive.tez.container.size - يحدد حجم الحاوية مقدار الذاكرة المتوفرة لكل مهمة. هذا هو الإدخال الرئيسي للتحكم في التزامن في Apache Hive.

tez.grouping.min-size – تسمح لك هذه المعلمة بتعيين الحد الأدنى لحجم كل معين. إذا كان عدد المعينين الذين يختارهم Tez أصغر من قيمة هذه المعلمة، فسيستخدم Tez القيمة المعينة هنا.

tez.grouping.max الحجم - تسمح لك المعلمة بتعيين الحد الأقصى لحجم كل معين. إذا كان عدد المعينين الذين يختارهم Tez أكبر من قيمة هذه المعلمة، فسيستخدم Tez القيمة التي تم تعيينها هنا.

hive.exec.reducer.bytes.per.reducer – تحدد هذه المعلمة حجم كل مخفض. بشكل افتراضي، كل مخفض هو 256 ميغابايت.

الإرشاد

تعيين hive.exec.reducer.bytes.per.reducer - تعمل القيمة الافتراضية بشكل جيد عندما تكون البيانات غير مضغوطة. بالنسبة للبيانات المضغوطة، يجب تقليل حجم المخفض.

تعيين hive.tez.container.size - في كل عقدة، يتم تحديد الذاكرة بواسطة yarn.nodemanager.resource.memory-mb ويجب تعيينها بشكل صحيح على مجموعة HDI بشكل افتراضي. للحصول على معلومات إضافية حول تعيين الذاكرة المناسبة في YARN، راجع هذا المنشور.

يمكن أن تستفيد أحمال العمل المكثفة الإدخال/الإخراج من المزيد من التوازي عن طريق تقليل حجم حاوية Tez. وهذا يعطي المستخدم المزيد من الحاويات التي تزيد من التزامن. ومع ذلك، تتطلب بعض استعلامات Apache Hive قدرا كبيرا من الذاكرة (على سبيل المثال MapJoin). إذا لم يكن للمهمة ذاكرة كافية، فستحصل على استثناء نفاد الذاكرة أثناء وقت التشغيل. إذا تلقيت استثناءات نفاد الذاكرة، فيجب عليك زيادة الذاكرة.

سيتم ربط العدد المتزامن للمهام قيد التشغيل أو التوازي بإجمالي ذاكرة YARN. سيملي عدد حاويات YARN عدد المهام المتزامنة التي يمكن تشغيلها. للعثور على ذاكرة YARN لكل عقدة، يمكنك الانتقال إلى Ambari. انتقل إلى YARN واعرض علامة التبويب Configs. يتم عرض ذاكرة YARN في هذه النافذة.

إجمالي ذاكرة YARN = العقد * ذاكرة YARN لكل عقدة عدد حاويات YARN = إجمالي ذاكرة YARN / حجم حاوية Tez

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

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

لنفترض أن لديك نظام مجموعة D14 عقدة 8.

إجمالي ذاكرة YARN = العقد * ذاكرة YARN لكل عقدة إجمالي ذاكرة YARN = 8 عقد * 96 غيغابايت = 768 غيغابايت عدد حاويات YARN = 768 غيغابايت / 3072 ميغابايت = 256

التقييدات

Data Lake Storage Gen1 التقييد

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

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

  1. ضع الخاصية التالية في خصائص log4j في تكوين Hive. يمكن القيام بذلك من طريقة عرض Ambari: log4j.logger.com.microsoft.azure.datalake.store=DEBUG إعادة تشغيل جميع العقد/الخدمة حتى يصبح التكوين ساري المفعول.

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

مزيد من المعلومات حول ضبط Hive

فيما يلي بعض المدونات التي ستساعد في ضبط استعلامات Apache Hive: