Apache Spark / دليل حلول تحريري

تشخيص المراحل البطيئة والتبادل وضغط الذاكرة

استخدم توزيع مهام التنفيذ وأدلة مستوى تفصيل البيانات لتمييز الذيل الطويل من نقص السعة العام.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى

قاعدة معرفة للقراءة فقط · بلا تعليقات عامة

تعرّف على الأعراض

تنتهي معظم المهام سريعاً، بينما تبقى مهام قليلة بطيئة، أويرتفع سكب بيانات التبادل، أويختفي منفذ، أوتبلغ المهام اللاحقة FetchFailedException. وقد يفشل المشغّل بعد collect رغم وجود ذاكرة غير مستخدمة عند المنفذين. احتفظ بأول إخفاق ذي صلة وهوية العملية التي وقع فيها، لا برسالة الوظيفة الأخيرة وحدها.

افهم الأسباب المحتملة

  • قد تركز المفاتيح الساخنة والسجلات الكبيرة وروابط المراجع المكررة وعمليات التبادل الواسعة غير اللازمة العمل. تختلف ميزانيات كومة JVM وعمال Python والبيانات المخزنة مؤقتاً والكلفة الإضافية للحاوية. وقد تؤدي زيادة المحاولات أوالذاكرة دون تحديد حدود البيانات والعملية إلى تكرار المشكلة أوتفاقمها.

اربط العرض بطبقة التنفيذ الصحيحة

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

استبعد مضاعفة الحقائق قبل ضبط التوزيع

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

python مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
enriched.explain(mode='formatted')
summary.explain(mode='cost')

يفترض DataFrames اصطناعية قائمة. يلزم إقران الخطة بالصحة وقياسات تشغيل مصرح بها.

فسر نموذج التفاوت كسؤال لا تشخيص نهائي

يحوي المثال المحلي وحدات عمل5 و5 و5 و45. المجموع60، وأكبر قسم يساوي ثلاثة أضعاف المتوسط المتوازن المثالي15. ليست هذه الوحدات مللي ثانية مقاسة. افحص هل يفسر الذيل الحقيقي موقع ساخن أوصفوف عريضة على نحو غير معتاد أوتوسع الربط. قد تخفض coalesce عدد الأقسام من دون توزيع المفتاح الساخن بالتساوي؛ ولا يضمن repartition بالمفتاح الساخن نفسه التوازن أيضاً. تتطلب salting صحيحة إعادة جمع صحيحة، بينما ينطبق علاج التفاوت المتكيف على خطط مدعومة فقط. ولا تستطيع زيادة المنفذين تقسيم مهمة واحدة غير قابلة للتقسيم في كل الأحوال.

json مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
{"work_units":[5,5,5,45],"total":60,"balanced_ideal":15,"largest":45,"scope":"local model, not task telemetry"}

يُفحص الحساب المحلي الدقيق فقط. يحتاج تشخيص التفاوت سجلات وبايتات ودليل مهام.

اختر تصحيحاً ضيقاً واحفظ التعافي

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

تحقق من نجاح الإصلاح

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

امنع تكرار المشكلة

  • احفظ أمثلة تراعي توزيع البيانات، وفحوص تفرّد المرجع، وحدود نتائج المشغّل، وأدلة أحمال محفوظة بإصدارات. أعد مراجعة التلميحات المعتمدة على الحجم بعد نمو البيانات، واحمِ بروتوكولات النشر من تكرار تنفيذ المهام.

المراجع الرسمية