پروژه آپاچی Yarn یکی از پروژههای اکوسیستم هدوپ میباشد. هدف اصلی این پروژه مدیریت بهینه منابع پردازشی یک کلاستر میباشد. در این مقاله قصد داریم به بررسی مولفههای تشکیل دهنده این پروژه، معماری و ویژگیهای آن بپردازیم. شاید در ابتدا مناسب باشد مقالههای “آپاچی هدوپ” و “اکوسیستم هدوپ: ابزارهایی که هدوپ برای پردازش سریع کلان دادهها استفاده میکند – قسمت اول” را مطالعه کنید تا یک دید کلی نسبت به این ابزار داشته باشید.
مروری بر مولفههای آپاچی YARN
YARN مسئولیتهای مولفه JR[1] در هدوپ نسخه 1 را به اجزای مستقلی تقسیم میکند که هر یک وظیفه خاصی را انجام میدهند. در هدوپ نسخه 1، JR مسئولیت مدیریت منابع، زمانبندی اجرای کار و کنترل روند اجرای کار را بر عهده دارد. YARN این وظایف JR را به [2]RM و AM[3] تقسیم میکند. به جای TR[4]، از [5]NM به منظور اجرای وظایف در گرههای ماشین کارگر استفاده میکند. RM و NM چهارچوب محاسباتی را برای YARN ایجاد میکنند و AM نیز یک سرویس کاربردی به منظور مدیریت برنامههای اجرا شونده بروی Yarn میباشد.
ResourceManager
RM سرویسی به ازای هر کلاستر است که وظیفه مدیریت زمانبندی منابع پردازشی برنامهها را بر عهده دارد. این بخش استفاده از کلاستر را از نظر حافظه، هستههای پردازنده، منصفانه بودن[6]زمانبندی و SLAها بهینهسازی میکند. به منظور ایجاد سیاستهای مختلفی برای زمانبندی، این مولفه دارای الگوریتمهای زمانبندی نظیر Fair و Capacity است (که قابلیت جابجایی با یکدیگر را دارند) که استفاده از آنها منجر به نوع خاصی از تخصیص منابع میگردد. RM دو بخش اصلی دارد:
- سرویس زمانبند[7]: این بخش مسئولیت تخصیص منابع به برنامههای ارسال شده به کلاستر، اعمال محدودیتهای ظرفیت و زمانبندی آنها را بر عهده دارد. سرویس زمانبند هیچ تضمینی برای اتمام برنامه یا کنترل روند اجرای آن ارائه نداده و صرفا منابع مورد نیاز برنامه را که تحت تاثیر ماهیت کار و نیازمندیهای آن است را به برنامه اختصاص میدهد.
- AsM[8]: سرویسی برای مدیریت سرویسهای AM در کلاستر است که مسئول پذیرش برنامههای ارسال شده، فراهم آوردن منابع مورد نیاز برای آغاز سرویسهای AM، کنترل پیشرفت برنامهها و همچنین مسئول آغاز مجدد برنامهها در صورت بروز مشکل میباشد.
NodeManager
NM سرویسی به ازای هر گره در ماشین کارگر است که مسئولیت اجرای کانتینرها بر اساس ظرفیت گره را بر عهده دارد. ظرفیت گره بر اساس حافظه گره و تعداد هسته های پردازنده محاسبه میشود. سرویس NM سیگنال Heartbeat را به منظور اعلام سلامت به RM ارسال میکند. سرویس NM همانند سرویس TR موجود در هدوپ نسخه 1 میباشد. NM همچنین وضعیت خود را به RM ارسال میکند که این وضعیت شامل وضعیت گرهای است که بر روی آن در حال اجرا بوده و همچنین وضعیت برنامههایی است که بر روی آن در حال اجرا هستند.
ApplicationMaster
AM یک کتابخانه مبتنی بر چهارچوب کاربردی خاصی (نظیر نگاشت/کاهش، اسپارک، استورم و …) است که به مدیریت هر نمونه از برنامههای اجرایی در YARN میپردازد. AM توسط YARN به عنوان یک واسط قلمداد میشود که مسئولیت درخواست کردن منابع از سرویس زمانبند RM را برعهده داشته و با NM به منظور اجرای تسکها تعامل میکند. RM کانتینرها را به AM اختصاص داده و این کانتینرها به منظور اجرای پردازشهای [یا فرایندهای] خاص برنامه به کار برده میشوند. AM همچنین به پیگیری وضعیت برنامه پرداخته و پیشرفت کانتینرها را کنترل میکند. زمانی که اجرای یک کانتینر کامل میشود، AM کانتینر را آزاد میکند و بعد از اتمام اجرای برنامه، خود را نیز در RM از حالت ثبت خارج میکند.
کانتینر
کانتینر یک بسته منطقی از منابع از نظر حافظه، پردازنده، دیسک، و … میباشد که به یک گره خاص تعلق مییابد. سرویس زمانبند RM به صورت پویا منابع را در قالب کانتینرها به برنامهها اختصاص میدهد. در واقع، کانتینر حق استفاده میزان مشخصی از منابع ماشین میزبان را به AM میدهد. AM به عنوان اولین کانتینر برنامه به شمار رفته و اجرای منطق برنامه بر روی کانتینرهای اختصاص داده شده را مدیریت میکند.
معماری آپاچی YARN
در قسمت پیشین، ما به بررسی اجزای YARN پرداختیم. در اینجا ما به بررسی معماری سطح بالا YARN و نحوه تعامل اجزا با یکدیگر خواهیم پرداخت.
سرویس RM بر روی گره Master کلاستر اجرا میشود. کاربر YARN برنامه خود را به RM ارسال میکند. یک برنامه در اکوسیستم Yarn میتواند یک برنامه نگاشت-کاهش، یک برنامه اسپارک، یک برنامه جاوا و یا حتی یک شل اسکریپت باشد. برای اجرای برنامه، کاربر همچنین AM را تعریف کرده و دستوری برای راهاندازی آن بر روی یک گره ارائه میدهد.
سرویس AsM در RM درخواست برنامه از سوی کاربر را تائید کرده و میپذیرد. سرویس زمانبند، کانتینری را برای اجرای AM بر روی یک گره اختصاص میدهد و سرویس NM آن گره نیز از دستور راهاندازی سرویس AM استفاده خواهد کرد و سرویس AM را راهاندازی میکند. هر برنامه YARN باید سرویسAM را پیادهسازی کند. کانتینر AM اولین کانتینر برنامه میباشد.
AM منابع را از RM درخواست میکند. درخواست منبع محل گره، حافظه و تعداد هستههای پردازنده مورد نیاز را مشخص میکند. RM منابع را به صورت کانتینرهایی به مجموعهای از گرهها اختصاص میدهد. AM به سرویسهای NM متصل شده و از NM راهاندازی کانتینرها را درخواست میکند. AM اجرای کانتینرها را مدیریت کرده و زمانی که اجرای برنامه به پایان برسد آن را به RM اطلاع میدهد. نکته حایز اهمیت آنکه اجرای برنامه و کنترل پیشرفت آن برعهده AM بوده و این امر توسط RM انجام نمیگیرد.
سرویس NM بر روی هر یک از گرههای Slave کلاستر YARN اجرا میشود. این بخش مسئول اجرای کانتینرهای برنامه میباشد. منابع موردنیاز برای هر کانتینر از منابع موجود گره NM استفاده میکند. هر NM به طور متناوب RM را از مجموعه منابع موجود خود باخبر میکند و وضعیت خود در RM را بروزرسانی میکند. سرویس زمانبند از این دادهها برای اختصاص کانتینرهای جدید به AM یا برای آغاز اجرای برنامهای جدید استفاده میکند.
YARN چگونه نیازهای پروژههای کلان داده را برآورده میکند
در قسمت آخر این مقاله به ویژگیها و مزیتهای پروژه Yarn میپردازیم که باعث محبوبیت این پروژه شده است و همچنین در بسیاری از پروژه های کلان داده مورد استفاده قرار بگیرد. در شکل بالا عواملی را مشاهده میکنید که در نسخه 1 هدوپ وجود داشت و میتوان آنها را به عنوان معایب آن برشمرد که توسعه پروژه Yarn راهحلی برای غلبه بر این مشکلات میباشد:
مقیاسپذیری و بهرهبرداری بهتر از کلاستر
مقیاسپذیری به توانایی یک نرم افزار یا محصول برای اجرای بهتر تحت بار کاری در حال افزایش اطلاق میشود. در YARN، مسئولیت مدیریت منابع، زمانبندی اجرای کار و نظارت[9] بر روند اجرای کار به چند بخش تقسیم شده است که این امر YARN را به مقیاسپذیری بدون کاهش عملکرد کلاستر قادر میسازد(مقایسه شود با نسخه 1 هدوپ که تمام این موارد برعهده JB بود). با استفاده از تعریف یک مدل عمومی برای منابع (کانیتنرها) در YARN، سرویس زمانبند نیاز به منابع برای هر نوع برنامهای را میتواند مدیریت کند. این ساختار افزایش بازدهای در مدیریت درخواستهای دریافت منبع را برای سرویس زمانبند بهمراه دارد و بهرهبرداری کلاستر را افزایش میدهد.
قابلیت دسترسپذیری بیشتر مولفهها
تحمل خطا یکی از اصول مهم طراحی هر سکوی توزیع شدهایی نظیر YARN میباشد. این مسئولیت بر عهده RM و AM میباشد. AM، خطا و مدیریت آن در کانتینر را مدیریت میکند. RM نیز رسیدگی به شکست در NM و AM را بر عهده دارد.
مدل تخصیص منابع انعطافپذیر
در نسخه 1 هدوپ، منابع تحت عنوان تعداد اسلاتهای وظایف نگاشت و کاهش موجود برای اجرای یک برنامه نگاشت-کاهش تعریف میشوند. تمام درخواستهای منابع را نمیتوان به عنوان اسلاتهای نگاشت و کاهش درنظر گرفت. در YARN، درخواست منبع بر اساس حافظه، CPU، محل گره و … انجام میگیرد. این امر منجر به یک تعریف عمومی برای درخواست منبع توسط یک برنامه میگردد. گره NM یک گره Slave بوده و توانایی و میزان منابع آن بر اساس حافظه و هستههای پردازنده آن محاسبه میشود.
الگوریتمهای گوناگون پردازش دادهها
چهارچوب نگاشت-کاهش صرفا محدود به پردازشهای دستهای[10] است. YARN به منظور انجام انواع مختلفی از روشهای پردازش دادهها که در HDFS ذخیره شدهاند، توسعه یافته است. YARN چهارچوبی عمومی برای مدیریت منابع بوده و کاربران را به اجرای الگوریتمهای گوناگون پردازش داده قادر میسازد.
جمعآوری لاگها
دستیابی و مدیریت لاگهای کاربران در نسخه 1 هدوپ دشوار میباشد. به منظور مدیریت لاگهای کاربر، YARN مفهوم جمع آوری لاگ[11] را معرفی کرده است. در YARN، همزمان با پایان اجرای یک برنامه، سرویس NM لاگهای کاربر مربوط به برنامه را جمع آوری کرده و این لاگها بر روی یک فایل در HDFS نوشته می شوند. به منظور دسترسی به لاگها، کاربران می توانند از خط فرمان و یا واسط وب YARN استفاده کنند و یا آن را به طور مستقیم از HDFS دریافت کنند.
[1] JobTracker
[2] ResourceManager
[3] ApplicationMaster
[4] TaskTracker
[5] NodeManager
[6] fairness
[7] Scheduler
[8] ApplicationsManager
[9] Monitoring
[10] Batch
[11] log aggregation