میشه باهاتون آشنا بشم ؟؟ (قسمت دوم آپاچی هدوپ)

سلام ابی هستم :)این قسمت قراره در مورد یه فیل زرد دوست داشتنی یعنی آپاچی هدوپ حرف بزنیم و باهاش آشنا بشیم.دختر سازنده هدوپ یک عروسکی به همین اسم داشت. نگاشت و کاهش (Map Reduce)فرض کنید ما میخوایم کتاب ۸ جلدی هری پاتر رو برداریم و بشماریم که در تمام این صفحات چندبار کلمه هری پاتر تکرار شده!! این کار خیلی سختیه و اگر بگیم که میخوایم این کار رو کمتر از چند ثانیه انجام بدیم تقریبا غیر ممکن بنظر میرسه. اما برای این انجام این کار راه حلی وجود داره که در ادامه به اون میپردازیم.راه اول :‌ ما باید تنهایی خط به خط این کتاب هارو بخونیم و تعداد دفعاتی که کلمه هری پاتر تکرار شده رو بشماریم و در کاغذی یادداشت کنیم. در نهایت همه این اعداد رو باید با هم جمع کنیم تا به جواب برسیم.راه دوم :‌ به تعداد صفحات این کتاب ها (۴۱۰۰ صفحه) نیرو استخدام کنیم و هر صفحه از کتاب رو به یک نفر بدیم تا تعداد کلمات هر صفحه رو بشماره و به ما اعلام کنه. در نهایت ما تعداد کلمات اعلام شده رو با هم جمع میکنیم و به نتیجه میرسیم.راه اول کار خیلی خیلی طولانی و پر زحمتی است. در مقابل، راه دوم پر هزینه ولی سریعه. حالا فرض کنید بجای این آدم ها که استخدام کردید سرور بزاریم و تعداد این کلمات توسط سرور شمرده بشه و نتیجه پردازش توسط این سرور ها به شما برگرده.نگاشت (Map) : مپ کردن یعنی تقسیم کردن یک کار خیلی بزرگ و پخش کردن این قسمت ها به سرور های مجزا برای پردازش. در مثال کتاب هری پاتر، ما یک کتاب حجیم(کار بزرگ) رو به صفحات کوچک تقسیم کردیم و هر صفحه رو به آدمهای جدا برای پردازش(شمردن تعداد کلمات) مپ کردیم.کاهش (Reduce) : در نهایت هم شما باید نتیجه تمام سرور ها رو باهم تجمیع کنید تا خروجی رو تولید کنید که به این کار میگن Reduce کردن.مراحل Map Reduce برای پردازش ساده ی شمارش کلمات در تصویر بالا دو مرحله دیگه هم به چشم میخوره به نام Splitting و Shuffling. در مرحله دوم یعنی Splitting ما ورودی خود را به قسمت های برابر تقسیم میکنیم تا برای مپ کردن آماده بشن. در مرحله چهارم یعنی Shuffling ما خروجی های یکسان رو در دسته بندی های جداگانه قرار میدیم تا در مرحله Reduce تعداد اعضای هر دسته رو بشمریم و خروجی رو تولید کنیم.هدوپ بر می خیزد ...در سال ۲۰۰۴ دو نفر بنام های Doug Cutting و Mike Cafarella داشتن یک موتور جست و جو میساختن که با چالش مقیاس پذیری مواجه شدن.مقیاس پذیری یعنی آمادگی سیستم برای افزایش میزان بار و ترافیک. همینطور که این دو نفر درگیر حل این چالش بودند گوگل مقاله Map Reduce خودش رو منتشر میکنه و در اون مقاله توضیح میده که چطور گوگل از طریق Map Reduce چالش مقیاس پذیری رو حل میکنه. این دونفر فهمیدند که باید فریم ورک مخصوص به خودشون رو برای این موتور جست و جو مبنی برMap Reduce بسازند. چند سال بعد این فریم وورک هدوپ نام گرفت و در سال ۲۰۰۷ آماده دانلود شد و در صدر پروژه های Apache قرار گرفت. هدوپ چطوری کار میکنه ؟؟دو معماری مهم از هدوپ بنام هدوپ ۱ و هدوپ ۲ وجود داره که هر کدوم رو بررسی میکنیم. اما قبلش باید با معماری کلی هدوپ آشنا بشیم.در هدوپ Map Reduce با استفاده فایل سیستم هدوپ یا HDFS انجام میشه. این فایل سیستم، امکان ذخیره سازی بصورت توزیع شده رو فراهم میکنه.چهار ابزار مهم هدوپ و وظایف آنها:ا - Job Tracker : از اونجایی که هدوپ بصورت توزیع شده کار میکنه باید ابزاری باشه که درخواست کاربر رو بگیره و اون رو به بهترین node در کلاستر برای پردازش برسونه. بهترین node اونی هست که اطلاعات مورد نظر کاربر رو داره یا اینکه حداقل اون node و محل قرار گیری اطلاعات مورد نظر در یک Rack قرار گرفته باشند.اا - Task Tracker : این node درخواست ها رو از Job Tracker میگیره و مراحل Map Reduce و Shuffle رو روی اونها انجام میده.ااا - Name Node : این node محل قرار گیری دقیق تمام اطلاعات رو در سراسر کلاستر میدونه. مثلا وقتی یکی بخواد یک دیتا رو از فایل سیستم بخونه باید از Name node آدرس دقیق اون رو بپرسه. Name node فقط جای اطلاعات رو میدونه و خودش اونها رو ذخیره نمیکنه. Job Tracker هم با کمک از Name node بهترین سرور رو مبنی بر نزدیک یا دور بودن از اطلاعات انتخاب میکنه. اگر Name node در دسترس نباشه تبدیل میشه به پاشنه آشیل هدوپ و هیچ درخواستی از کاربر پردازش نمیشه. بنابراین باید دو Name node جدا از هم درست کنیم و هر کدوم رو روی یک سرور جدا نگه داریم تا در صورت از کار افتادن یکی از اونها یک Name node دیگه برای جواب دادن به کاربران در دسترس باشه.اااا - Data Node : این node وظیفه داره تا اطلاعات رو در فایل سیستم ذخیره کنه. در یک فایل سیستم معمولا خیلی بیشتر از یک Data Node وجود داره تا وقتی اطلاعات جدید در سیستم ذخیره میشه اونها رو در چند node جدا ذخیره کنه.این کار برای اینکه اگر یک Data node از بین رفت اطلاعات از دست نره و در دو Data node دیگه از اونها back up داشته باشیم. هدوپ ۱در هدوپ۱ وقتی درخواست به هدوپ داده میشه مراحل زیر طی میشه:۱. بخش 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 وجود داره.بطور کلی مراحل پردازش در هدوپ ۲ بصورت زیر است : درخواست کاربر توسط Resource manager گرفته میشه سپس Resource manager با تمام node ها صحبت میکنه تا ببینه کدوم node از نظر سخت افزاری منابع کافی در اختیار داره. سپس Resource manager برای مدیریت پردازش در node مناسب یک Application Manager ایجاد میکنه.در نهایت Application Manager تمام کارهایی که باید انجام شوند رو با هم هماهنگ میکنه تا پردازش در node انجام بشه.قسمت اول (لاراول)⬅️