hadoop چیست؟

hadoop

naeemaei hadoop , , , ,

Hadoop یک چارچوب متن باز برای ذخیره سازی و پردازش داده های بزرگ است که در ابتدا Doug Cutting در شرکت Apache آن را ارائه داد  و نام فیل اسباب بازی فرزندش را روی آن نهاد، هدف اصلی آنها از تولید این ابزار استفاده از آن در موتور جستجوی Apache به نام Nutch بود که پس از آن بسیاری از شرکت های بزرگ مانند Facebook ، Google ، Yahoo و… از آن استفاده کردند. این تکنولوژی با ترکیب و توزیع داده به ذخیره سازی آن می پردازد و به زبان جاوا پیاده سازی شده است. بسیاری از داده هایی که سیستم های امروزی با آن سر و کار دارند داده های دارای ساختار هستند مانند یک فایل اکسل ، اما Hadoop کارایی تحلیل و پردازش داده های ساختارمند و غیر ساختارمند را نیز دارد.

برای نمونه علاوه بر پردازش و ذخیره سازی ، از Hadoop برای ذخیره اطلاعات ساخت نیافته یا شبه ساخت یافته در پایگاه داده های NoSql نیز استفاده می شود.از آنجاییکه پایگاه داده های رابطه ای پس از بزرگ شدن داده ها و پخش داده ها روی سرورهای مختلف کارایی بالای خود رو از دست می دهند حرکت به سوی پایگاه داده های NoSql آغاز شد و امروز Hadoop بستری برای NoSql می باشد.

   Hadoop DFS
در شکل مولفه های سیستم فایل توزیع شده ی Hadoop نشان داده شده است. Hadoop برای ذخیره سازی اطلاعات آنها را به تکه های کوچکتر تقسیم می کند و هر تکه را روی یک نود ذخیره کرده و آدرس آن را نگه داری می کند. اندازه ی بلاک ها یا همان تکه ها  بطور پیش فرض 64 مگابایت می باشد ولی قابل افزایش است، همچنین به طور پیش فرض هر بلاک روی سه ماشین ذخیره می شود که این عمل باعث افزایش کارایی پردازش ها و ذخیره مطمئن داده ها می شود[1]. در این بخش نود های سرور به دو نوع (Master and Slave) تقسیم می شوند که نود های Master وظیفه ی کنترل نودهای دیگر را بر عهده دارد و با نام NameNode مشخص شده اند ، گاهی در یک سیستم دو NameNode خواهیم داشت که آنها داده ها را برای نودهای دیگر ارسال می کنند تا نودهای جانبی داده ها را ذخیره کنند. از وظایف دیگر آنها می توان به موارد زیر اشاره کرد :
1-    ذخیره و مدیریت داده های مربوط به FS
2-    دریافت محل بلوکها از DataNode ها
3-    نگهداری شماره و محل بلاکهایی که تشکیل یک فایل را می دهند
4-    مدیریت و ارسال مجدد بلاکهای گم شده
5-    کنترل نوع دسترسی(خواندن و نوشتن) به فایلها
نودهای Slave با نام DataNode مشخص می شوند و تعداد آنها بیش از یک مورد خواهد بود و گاهی اوقات با توجه به توان و کارایی  سیستم به صدها و هزاران نود می رسد.وظیفه ی نود های Slave که در واقع همان  سرور های جانبی هستند  ذخیره سازی اطلاعات روی هارد دیسک خود می باشد.علاوه بر این آنها باید در مورد بلاکهایی که در اختیار دارند به NameNode ها اطلاع دهند و به درخواست های خواندن و نوشتن روی داده ها پاسخ دهند.

hadoop

یکی از مکانیزم های دیگری که در HDFS برای افزایش تحمل خطا وجود دارد رونوشت داده ها  می باشد ، بطوریکه هر بلاک داده روی چندین سرور ذخیره می شود و اگر بلاکی گم شد یا سرور دچار مشکل شد امکان بازیابی آن وجود داشته باشد. با اعمال Data Replication  علاوه بر افزایش تحمل خطا و خرابی در سیستم ، نیازی به استفاده از تکنولوژی RAID نمی باشد و در استفاده از فضای دیسک صرفه جویی می شود.

 

MapReduce

نگاشت – کاهش یک مدل برنامه نویسی موازی جهت پردازش داده های موجود روی کلاسترها می باشد که از دو مرحله ی نگاشت و کاهش جهت پردازش داده ها تشکیل شده است.از استفاده های آن می توان به موارد زیر اشاره کرد :
    گوگل    : ایندکس کردن صفحات برای SE ، تحلیل ترجمه گوگل و…
    یاهو: جستجوی نقشه یاهو ، شناسایی هرزنامه ها
    فیسبوک: داده کاوی ، بهینه سازی تبلیغات و شناسایی هرزنامه ها

 

تعاریف :

 

1-    فاز نگاشت : نودهای Master داده ها را به بلاک هایی تقسیم می کنند و آنها را در اختیار نودهای Slave قرار می دهند، گاهی اوقات نود Slave نیز خود این کار را انجام می دهد.
2-    فاز کاهش : داده های تکه تکه شده پس از بر خوردن  در اختیار تابع کاهش قرار می گیرند و این تابع بر اساس مقدار کلید آنها داده های مربوط به یک فایل یا پردازش را با هم ترکیب می کند.

 

در شکل اعمال نگاشت و کاهش نشان داده شده است ، علاوه بر موارد ذکر شده در نگاشت-کاهش به هر برنامه ی کامل یک Job و به اجرای هر یک از دو فاز مذکور Task گفته می شود.بنابراین یک Job روی نود Master و Task روی نودهای Slave اجرا می شود.
اعمال موجود در نگاشت-کاهش:
1-Job Tracker : در این تابع عملیات از کاربران دریافت می شود، سپس وظایف Map و Reduce در قالب تابع Task Tracker به نودهای Slave  محول می شود. زمانبندی ، برنامه ریزی و مدیریت وظایف نیز در این بخش کنترل می شود و در صورت ایجاد مشکل در انجام یک وظیفه مجددا آن را فراخوانی و اجرا می کند.
2-Task Tracker : این تابع وظایف نگاشت و کاهش محول شده توسط Job Tracker را اجرا میکند و پس از تولید نتایج آنرا برای بخش بعدی می فرستد.

تحمل خطا  در نگاشت-کاهش

 

1-    اگر یک Task با خطا مواجه شود : آن عمل روی نود دیگر تکرار می شود، بنابراین نگاشت با مشکلی مواجه نمی شود چون وابسته به نودها نمی باشد و همچنین کاهش نیز مشکلی نخواهد داشت چرا که خروجی ها در دیسک ها هستند.
2-    اگر یک نود با خطا مواجه شود : عمل کنونی این نود و همه ی نگاشت های انجام شده توسط آن روی نود دیگری مجددا اجرا می شوند.
3-    اگر یک Task با سرعت اجرا نشود : یک کپی از آن عمل روی نود دیگری گرفته شده و اجرا می شود ، از نتیجه ی عملی که زودتر به پایان برسد استفاده شده و دیگری kill می شود.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *