Mohammad Nazari
Mohammad Nazari
خواندن ۱ دقیقه·۴ سال پیش

Combiner در Map-Reduce

کامباینر (Combiner) چیست؟

کامباینر (Combiner) که با نام‌های Mini-Reducer یا Semi-reducer نیز شناخته می‌شود، خروجی‌های مپ را با استفاده از کلید یکسان خلاصه سازی می‌کند و آن را به ردیوسر انتقال می‌دهد.

هنگام انجام یک کار در Map-Reduce روی یک مجموعه داده عظیم، مپ‌ها تکه‌های عظیمی از مجموعه داده‌های میانی تولید می‌کنند. سپس با توجه به چهارچوب موجود این دیتا‌ها را به ردیوسرها منتقل می‌کنند. این امر موجب ازدحام شدید شبکه می‌شود. بنابراین تابع Combiner معرفی شده که از بار شبکه کم کند.

کامباینر یک کلاس اختیاری است که بعد از مپ و قبل از ردیوسر قرار دارد که وظیفه اصلی آن خلاصه سازی خروجی مپ با کلید یکسان و ارسال آن به ردیوسر است. باید به این نکته توجه داشت که نوع ورودی و خروجی زوج کلید-مقدار در آن می‌بایست یکسان باشد.

اما وجود کامباینر در همه جا ممکن نیست و استفاده از آن مزیت‌ها و معایبی دارد که در ادامه به آن‌ها اشاره می‌کنیم.


چگونه کار می‌کند؟

هانطور که در نمودار زیر می‌بینید هیچ کامباینری وجود ندارد. دیتاها بین دو مپ تقسیم می‌شوند. بعد از انجام عملیات مپ ما ۹ عدد دیتای میانی (زوج کلید مقدار داریم). سپس این مقادیر را مستقیم به ردیوسرها ارسال می‌کند و از پهنای باند شبکه استفاده می‌کند و اگر داده‌ها زیاد باشند این امر زمانبر می‌شود.

مپ ردیوس بدون Combiner
مپ ردیوس بدون Combiner


حال اگر از کامباینر استفاده کنیم تعداد ۹ عدد زوج میانی ما به ۴ عدد کاهش پیدا کرده، بنابراین عملکرد کلی افزایش پیدا می‌کند.

مپ ردیوس با Combiner
مپ ردیوس با Combiner


مزایا

  • زمان مورد نیاز برای انتقال داده‌ها بین مپرها و ردیوسرها را کاهش می‌دهد.
  • عملکرد کلی ردیوسرها را افزایش می‌دهد (مقدار داده‌هایی را که ردیوسرها باید پردازش کنند را کاهش می‌دهد)

معایب

  • ذخیره کردن زوج کلید-مقدار درون دیسک محلی و اجرا کردن کامباینر روی آن باعث افزایش IO دیسک می‌شود.
  • همیشه تضمین نمی‌کند که روی دیتا اعمال شود.



نویسنده محمد نظری

مپردیوسcombinermapreduce
محمد نظری | MN76
شاید از این پست‌ها خوشتان بیاید