در دروس ابتدایی دوره Map Reduce به این دیدگاه رسیدیم که مدل برنامه نویسی Map Reduce به درد چه مسائلی میخورد. همچنین یک مثال کاربردی را مشاهده کردیم و یک دید کلی از این مدل برنامه نویسی پیدا کردیم. حالا میخواهیم کمی عمیقتر به نحوه کارکرد یک سیستم، که از مدل Map Reduce استفاده میکند توجه کنیم و ببینیم سیستم هایی مانند Hadoop یا Spark که مناسب برای پیاده سازی مدل های Map Reduce هستند چه گونه کار میکنند؟
به شکل زیر نگاه کنید:
در این شکل دو عنصر اصلی وجود دارد. ۱. master یا همان گره کارفرما و ۲. Worker یا همان گره کارگر. در واقع workerها هستند که عملیات اصلی مانند Map یا Reduce را انجام میدهند. گره master در واقع عملیات مدیریت و کنترل خطاهای کلی سیستم را برعهده دارد. فرض کنید که گره (Node) در اینجا یک کامپیوتر مستقل است. یعنی گره master یک کامپیوتر مستقل است که عملیات کلی را مدیریت میکند. هر کدام از گرههای worker هم یک کامپیوتر مستقل هستند که میتوانند عملیات مختلف را مستقل از گرههای دیگر اجرا کنند. البته که همهی این گرهها بایستی تحت فرمان گره master باشند.
در واقع عملیاتی که در دروس قبل این دوره توضیح داده شد، همگی بایستی توسط گره Master مدیریت شوند. این گره فرمانهای اجرایی را به workerها میدهد و آنها طبق آن فرمان عملیات را انجام میدهند. برای مثال در قسمت سمت چپ، گره master به ۳گره worker دستور داده است که قسمتهایی از فایل را بخوانند و عملیات نگاشت یا همان Map را بر روی این قسمت از فایلها انجام دهند. حال هر گره worker عملیات نگاشت را انجام میدهد و پس از انجام، پیغام اتمام را به گره master ارسال میکند. وقتی گره مستر از اتمام کارها باخبر شد، حال به یک سری از گرههای worker دستور میدهد که عملیات کاهش یا همان Reduce را انجام دهند. این گرهها که میخواند عملیات Reduce را انجام دهند، توسط master، از فایلهای خروجی قسمت قبل (قسمت Map) آگاه هستند و پس از دریافت آنها، عملیات Reduce را بر روی آن قسمت از فایلها انجام داده و خروجی مورد نظر را میسازند.
حال اگر یک گره خراب شد چه کار باید بکنیم؟ اگر این گره، گره master باشد، بدترین اتفاق ممکن، اتفاق افتاده است. یعنی کل فرآیند بایستی دوباره انجام شود. در واقع گره master، یک گلوگاه یا همان Bottleneck برای این سیستم است. اما اگر هر یک از گرههای worker خراب شوند یا به هر دلیلی از کار بیفتند، گره master از این موضوع باخبر میشد، زیرا گره master مرتباً وضعیت گرههای worker را چک میکند تا از سلامت آنها مطمئن باشد. برای مثال اگر خرابی یک گره که عملیات map را انجام میداد، رخ دهد، آن عملیات توسط master به یک گره دیگر داده میشود تا به سلامت انجام شود.