عناوین
هادوپ یک چارچوب نرمافزاری منبعباز است که پردازش توزیعشده دادههای بزرگ را بر روی خوشههایی از سرورها ممکن میسازد. این چارچوب که به زبان جاوا نوشته شده است، برای انجام پردازش توزیع شده بر روی هزاران ماشین با تحملپذیری خطای بالا طراحی شده است. به جای تکیه بر سختافزارهای گرانقیمت، تحملپذیری در مقابل خطا در این خوشهها از توانایی نرمافزاری در تشخیص و ادارهی خرابی در لایه کاربرد میآید. استفادهکنندگان برجسته هادوپ، فیسبوک و یاهو هستند.
هسته اصلی هادوپ از یک بخش ذخیرهسازی (سیستم فایل توزیع شده هادوپ یا HDFS) و یک بخش پردازش (Map/Reduce) تشکیل شده است. هادوپ فایلها را به بلوکهای بزرگ شکسته و آنها را بین نودهای یک خوشه توزیع میکند. برای پردازش داده، بخش Map/Reduce بسته کدی را برای نودها ارسال میکند تا پردازش را به صورت موازی انجام دهند. این رویکرد از محلیت داده بهره میبرد (نودها بر روی بخشی از داده کار میکنند که در دسترشان قرار دارد). بدین ترتیب دادهها سریعتر و کاراتر از وقتی که از یک معماری متکی بر ابر-رایانه که از سیستم فایل موازی استفاده کرده و محاسبه و داده را از طریق یک شبکه پر سرعت به هم وصل میکند، پردازش میشوند.
چارچوب اصلی هادوپ از ماژولهای زیر تشکیل شده است:
- بخش مشترکات هادوپ: شامل کتابخانهها و utilityهای لازم توسط دیگر ماژولهای هادوپ است.
- سیستم فایل توزیع شده هادوپ (HDFS): یک سیستم فایل توزیع شده است که داده را بر روی ماشینهای خوشه ذخیره کرده و پهنای باند وسیعی را به وجود میآورد.
- YARN هادوپ: یک پلتفرم مدیریت منابع که مسئول مدیریت منابع محاسباتی در خوشهها است.
- Map/Reduce هادوپ: یک مدل برنامهنویسی برای پردازش داده در مقیاسهای بالا است.
در واقع هادوپ یک سیستم فایل توزیع شده تهیه میکند که میتواند داده را بر روی هزاران سرور ذخیره کند، و تسک (وظیفه) را بر روی این ماشینها پخش کرده (کارهای Map/Reduce)، و کار را در کنار داده انجام میدهد.
Map/Reduce هادوپ
Map/Reduce یک نمونه برنامهنویسی است که یک محاسبه بزرگ توزیع شده را به صورت دنبالهای از عملیات توزیع شده بر روی مجموعه دادهای از زوجهای کلید/مقدار بیان میکند. چارچوب Map/Reduce هادوپ، یک خوشه از ماشینها را به اختیار خود گرفته و کارهای Map/Reduce تعریف شده توسط کاربر را بر روی نودهای این خوشه اجرا میکند. محاسبات Map/Reduce دو فاز دارد: فاز map (نگاشت) و فاز reduce (کاهش). ورودی این محاسبه، مجموعه دادهای از جفتهای کلید/مقدار است.
در فاز map، چارچوب، داده ورودی را به تعداد زیادی قطعه تقسیم کرده و هر قطعه به یک تسک map تخصیص مییابد. چارچوب همچنین تسکهای map (که تعداد زیادی دارند) را بین گرههای یک خوشه برای اجرا توزیع میکند. هر تسک map از زوج کلید/مقدار بخش تخصیص یافتهاش استفاده کرده و مجموعهای از زوجهای میانی کلید/مقدار را تولید میکند. برای هر زوج کلید/مقدار (K, V)، تسک map یک تابع map تعریف شده توسط کاربر را احضار میکند که ورودی را به زوج کلید/مقدار متفاوتی تبدیل میکند(‘K’,V).
به دنبال فاز map، چارچوب، دادههای میانی را با توجه به کلید مرتبسازی میکند و مجموعهای از چندتاییهای (*’K’,V) تولید میکند تا تمام مقادیر مربوط به یک کلید مشخص، با هم نشان داده شوند. چارچوب همچنین مجموعه چندتاییها را به چندین قطعه برابر با تعداد تسکهای reduce تقسیم میکند.
در فاز reduce، هر تسک reduce قطعه شامل چندتایی (*’K’,V) اختصاص داده شده به خود را مصرف میکند. برای هر چندتایی، هر تسک reduce یک تابع reduce تعریف شده توسط کاربر را احضار میکند که چندتایی را به یک خروجی زوج کلید/مقدار (K, V) تبدیل میکند. یک بار دیگر، چارچوب تسکهای reduce فراوانی را بر روی گرههای خوشه توزیع کرده و قطعه مناسب داده میانی را به هر تسک reduce منتقل میکند.
تسکها در هر فاز به صورت تحملپذیر در مقابل خطا اجرا میشوند؛ اگر گرهای در بین محاسبه دچار خرابی شود، تسک تخصیص یافته به آن در بین گرههای باقیمانده باز-توزیع میشود. داشتن تسکهای زیاد map و reduce باعث توزیع مناسب بار شده و اجازه میدهد تا تسکهای ناموفق با سربار زمانی کم دوباره اجرا شوند.
معماری:
چارچوب Map/Reduce هادوپ دارای یک معماری master/slave (ارباب/برده) است. این چارچوب دارای یک سرور ارباب به نام jobtracker (دنبالکننده کار) و سرورهای برده متعدد به نام tasktracker (دنبالکننده تسک یا وظیفه)، به ازای هر گره در خوشه است. Jobtracker نقطه تعامل بین کاربران و چارچوب است. کاربران کارهای map/reduce را به jobtracker تحویل میدهند، که jobtracker این کارها را در یک صف از کارهای معلق قرار داده و آنها را بر اساس اصل first come/first service (هر که سریعتر آمده، سریعتر اجرا میشود) اجرا میکند. jobtracker تخصیص تسکهای map و reduce به tasktrackerها را مدیریت میکند. tasktrackerها، تسکها را بر اساس دستورالعمل jobtracker اجرا کرده و همچنین مسئولیت حرکت داده بین فازهای map و reduce را بر عهده میگیرند.
HDFS هادوپ
سیستم فایل توزیع شده هادوپ برای ذخیره مطمئن فایلهای بسیار بزرگ بر روی ماشینهای یک خوشه بزرگ طراحی شده است. این فایل سیستم الهام گرفته شده از فایل سیستم گوگل میباشد. HDFS هر فایل را به صورت یک دنباله از بلوکها ذخیره میکند، که تمام بلوکهای موجود در یک فایل به غیر از آخرین بلوک هم اندازه هستند. از بلوکهای متعلق به یک فایل برای تحملپذیری در برابر خطا، نسخه کپی تهیه میشود (replication). اندازه بلوک و فاکتور تهیه کپی، در هر فایل قابل تنظیم است. فایلهای موجود در HDFS همه “wrire once” هستند و تنها یک نویسنده در هر زمان دارند.
معماری:
همچون Map/Reduce هادوپ، HDFS دارای یک معماری ارباب/برده است. ساختار HDFS شامل یک Namenode (گره نام) است که یک سرور ارباب بوده و فضای نام فایل سیستم را مدیریت کرده و دسترسی به فایلها توسط کلاینتها را تنظیم میکند. به علاوه، تعدادی Datanode (گره داده) نیز وجود دارد، یکی به ازای هر گره در خوشه، که مخزن اختصاصی به گرهها که بر روی آن اجرا میشوند را مدیریت میکند. namenodeها عملیاتی همچون باز کردن، بستن، و تغییر نام فایلها و دایرکتوریها را از طریق یک واسط RPC برای فضای نام فایل سیستم ممکن میکنند و همچنین نگاشت بلوکها را به datanodeها معین میکنند. Datanodeها مسئول انجام خدمات مربوط به درخواستهای خواندن و نوشتن رسیده از طرف کلاینتهای فایل سیستم هستند. همچنین تولید، حذف و ایجاد کپی از بلوکها را بر حسب دستورالعمل Namenode انجام میدهند.