سلام ابی هستم :)
این قسمت قراره در مورد یه فیل زرد دوست داشتنی یعنی آپاچی هدوپ حرف بزنیم و باهاش آشنا بشیم.
فرض کنید ما میخوایم کتاب ۸ جلدی هری پاتر رو برداریم و بشماریم که در تمام این صفحات چندبار کلمه هری پاتر تکرار شده!! این کار خیلی سختیه و اگر بگیم که میخوایم این کار رو کمتر از چند ثانیه انجام بدیم تقریبا غیر ممکن بنظر میرسه. اما برای این انجام این کار راه حلی وجود داره که در ادامه به اون میپردازیم.
راه اول کار خیلی خیلی طولانی و پر زحمتی است. در مقابل، راه دوم پر هزینه ولی سریعه. حالا فرض کنید بجای این آدم ها که استخدام کردید سرور بزاریم و تعداد این کلمات توسط سرور شمرده بشه و نتیجه پردازش توسط این سرور ها به شما برگرده.
نگاشت (Map) : مپ کردن یعنی تقسیم کردن یک کار خیلی بزرگ و پخش کردن این قسمت ها به سرور های مجزا برای پردازش. در مثال کتاب هری پاتر، ما یک کتاب حجیم(کار بزرگ) رو به صفحات کوچک تقسیم کردیم و هر صفحه رو به آدمهای جدا برای پردازش(شمردن تعداد کلمات) مپ کردیم.
کاهش (Reduce) : در نهایت هم شما باید نتیجه تمام سرور ها رو باهم تجمیع کنید تا خروجی رو تولید کنید که به این کار میگن Reduce کردن.
در تصویر بالا دو مرحله دیگه هم به چشم میخوره به نام Splitting و Shuffling.
در مرحله دوم یعنی Splitting ما ورودی خود را به قسمت های برابر تقسیم میکنیم تا برای مپ کردن آماده بشن. در مرحله چهارم یعنی Shuffling ما خروجی های یکسان رو در دسته بندی های جداگانه قرار میدیم تا در مرحله Reduce تعداد اعضای هر دسته رو بشمریم و خروجی رو تولید کنیم.
در سال ۲۰۰۴ دو نفر بنام های Doug Cutting و Mike Cafarella داشتن یک موتور جست و جو میساختن که با چالش مقیاس پذیری مواجه شدن.مقیاس پذیری یعنی آمادگی سیستم برای افزایش میزان بار و ترافیک. همینطور که این دو نفر درگیر حل این چالش بودند گوگل مقاله Map Reduce خودش رو منتشر میکنه و در اون مقاله توضیح میده که چطور گوگل از طریق Map Reduce چالش مقیاس پذیری رو حل میکنه. این دونفر فهمیدند که باید فریم ورک مخصوص به خودشون رو برای این موتور جست و جو مبنی برMap Reduce بسازند. چند سال بعد این فریم وورک هدوپ نام گرفت و در سال ۲۰۰۷ آماده دانلود شد و در صدر پروژه های Apache قرار گرفت.
دو معماری مهم از هدوپ بنام هدوپ ۱ و هدوپ ۲ وجود داره که هر کدوم رو بررسی میکنیم. اما قبلش باید با معماری کلی هدوپ آشنا بشیم.
در هدوپ۱ وقتی درخواست به هدوپ داده میشه مراحل زیر طی میشه:
۱. بخش Job Tracker با Name Node صحبت میکنه و محل قرار گیری دیتا رو میفهمه.
۲. سپس Job Tracker محل قرار گیری Task Tracker رو مبنی بر محل دیتا انتخاب میکنه.
۳. بعد از انتخاب، Job Tracker درخواست رو به Task Tracker ارسال میکنه. Task Tracker در طول مدت پردازش تحت نظر قرار داره و اگر در زمان مناسب به درخواست های Job Tracker پاسخ نده Task Tracker از کار افتاده تلقی میشه و Job Tracker پردازش رو به یک Task Tracker میسپاره.
۴. وقتی پردازش به تموم میشه Job Tracker وضعیت اون درخواست رو به موفقیت آمیز تغییر میده.
۵. کاربر حالا میتونه نتیجه پردازش رو از Job Tracker برداشت کنه.
در هدوپ ۲، Yarnبا تقسیم کردن وظایف Task Tracker به دو بخش انعظاف پذیری و مقیاس پذیری رو افزایش میده. یکی از این بخش ها در Task Tracker وظیفه مدیریت منابع سخت افزاری (CPU, Ram , ... ) رو داره که بهش میگن Resource manager و یک بخش دیگه که وظیفه نظارت بر نحوه پردازش رو داره که بهش میگن Application Manager. به تعداد هر درخواست برای پردازش یک Application manager وجود داره.
بطور کلی مراحل پردازش در هدوپ ۲ بصورت زیر است :
در نهایت Application Manager تمام کارهایی که باید انجام شوند رو با هم هماهنگ میکنه تا پردازش در node انجام بشه.