آشنایی و بررسی فاز میانی Combine در مُدل Map Reduce

مراحل مدل Map Reduce در دو گره موجود در کلاستر به صورت توزیع شده
مراحل مدل Map Reduce در دو گره موجود در کلاستر به صورت توزیع شده


در این مقاله که در دنیای بیگ دیتا منتشر شده است با هم با فاز میانی Combine در مُدل برنامه نویسی Map Reduce آشنا میشیم و می بینیم کجاها میشه از فاز Combine استفاده کرد و کجاها بهتره از این فاز استفاده نکنیم.

آشنایی با Combiner

کامباینر، که از آن به Semi-reducer یا Mini-Reducer هم تعبیر می گردد، یک کلاس اختیاری است که عملیات پذیرش ورودی از کلاس مپ و سپس پاس دادن زوج کلیدمقدار خروجی به کلاس ردیوسر را بر عهده دارد.

وظیفه اصلی یک کامباینر، خلاصه سازی رکوردهای خروجی کلاس مپ با کلید یکسان است. خروجی کامباینر(مجموعه ای از کلیدمقدارها) بر بستر شبکه، به عنوان ورودی به کلاس ردیوسر ارسال می گردد. نکته مهم اینکه نوع ورودی زوج کلیدمقدار و نوع خروجی زوج کلیدمقدار می بایست یکسان باشند.

مزیت کلدی کامباینر اینست که به تفکیک داده ها در چندین گروه مجزی برای فاز ردیوس کمک می کند، چرا که در اینصورت پردازش را بیش از پیش آسان تر می کند.

اما قرار نیست همیشه و همه جا این گام استفاده شود. سوالی که مطرح می شود این است که فاز کامباین چه زمانی استفاده نمی شود؟

همیشه حضور Combiner ضروری نیست

مثال موردی: توییتر. یک فایل دیتای حجیم شامل توییت های کاربران ایران با هشتگ اینترنت در HDFS داریم. هدف این است سری زمانی تعداد تکرار کلمه قطعی در بازه های زمانی مختلف توسط کاربران بررسی شود. فاز Map برای هر Node تعداد تکرار کلمه ضرر را تاریخ های مختلف مشخص می کند. اگر در مرحله Combine تعداد تکرار در تاریخ های مختلف با هم ترکیب گردد رابطه زمانی دیتاها حذف می شود. در این تیپ مسائل نیازی به فاز کامباین نداریم.

  1. نکته ای که باید مدنظر قرارگیرد اینست که کامباینر تضمین نمی کند که همیشه روی همه دیتا اعمال شود.
  2. بهتر هست کامباینر برای توابعی نظیر SUM استفاده شود، اما توابعی هم هستند که فاز کامباین نمی تواند همیشه روی آنها اعمال گردند، نظیر AVG.
  3. وقتی نیازی نیست که دیتا روی دیسک ریخته شود مپ ردیوس فاز کامباین را اعمال نمی کند.
  4. وقتی که نوع ورودی دیتاهای زوج کلیدمقدار یکسان نباشند، مپ ردیوس فاز کامباین را اعمال نمی کند.
  5. در صورت عدم استفاده از کامباین شاهد افت محسوس ترافیک انتقال دیتا در شبکه هستیم.

نکته : اگر کامباینر برای تسک مدنظرمان Set شود، هدوپ خود تصمیم می گیرد با توجه به دیتای موردنظر، کامباینر را اجرا کند یا خیر!

فاز کامباین چه زمانی استفاده می شود؟

اما حالا که موارد عدم استفاده فاز کامباین را ذکر کردیم، باید ذکر کنیم فاز کامباین چه زمانی استفاده می شود؟

  1. کامباین تنها زمانی می تواند استفاده شود که تابع ردیوس هم بصورت commutative ظاهر می شود و هم بصورت associative.Commutative: ترتیب عملوندها تاثیری در نتیجه عبارت ندارند. مثال : 10+11+12=12+11+10
    Associative: ترتیب عملوندها تاثیری در نتیجه عبارت ندارند. مثال: (10+11)+12=12+(11+10)
  2. مورد دیگر زمانی که فاز مپ دیتاهای فوق العاده حجیمی را در برابر کلیدهای یکسان تولید می کند.(شمارش کلمات)
  3. نکته: برای کاهش ترافیک شبکه ، توصیه می شود تا کامباین را Set کنیم.
  4. وقتی که نوع ورودی دیتاهای زوج کلیدمقدار یکسان باشند، مپ ردیوس فاز کامباین را اعمال می کند.
  5. هنگامی که Buffer نیاز به Flush داشته باشد، کامباین همیشه فراخوانی می گردد.

نکته مهم: توابع کامباین از پیش نوشته شده نیستند و توسط توسعه دهنده ها نوشته می شوند.