هادوپ یا هدوپ مجموعه ای از نرم افزارهای (Open source) است. که امکان ذخیره سازی، توزیع و پردازش داده ها و اجرای برنامه ها را بر روی دسته ای از سرورها فراهم می کند. این چارچوب (Frame Work) که به زبان JAVA نوشته شده و تحت لیسانس آپاچی (Apache) ارائه می شود، برای انجام پردازش توزیع شده بر روی هزاران ماشین با تحمل خطای بسیار طراحی شده است.
با گسترش شبکه جهانی وب در اواخر دهه 1900 و اوایل دهه 2000، موتورهای جستجو و ایندکس به جهت یافتن اطلاعات مربوطه در میان محتوای متنی ایجاد شدند. شرکت گوگل در پی افزایش حجم تبادل اطلاعات، به دنبال راهی جهت افزایش سرعت و راندمان سرورهای خود بود. که سیستم توزیع (Distribution) منحصر به فردی به نام GFS که مخفف Google File System است را برای خود ابداع نمود. در پی این موفقیت، فردی به نام Doug Cutting در انجمن توزیع شرکت Apache به فکر گسترش این تکنولوژی در سطح وسیع تری افتاد و نام فیل اسباب بازی فرزندش را بر روی آن گذاشت.
هدف اصلی او و تیمش از تولید این ابزار استفاده از آن در موتور جستجوی Apache به نام Nutch بود. و قصد داشت با توزیع داده ها و محاسبات در رایانه های گوناگون، نتایج جستجوی وب را سریع تر بازگرداند تا چندین کار به صورت هم زمان انجام شود.
در طول مدت این پروژه، موتور جستجوی دیگری به نام Google در دست احداث بود و پس از آن بسیاری از شرکت های بزرگ مانند Facebook، Google، Yahoo و... نیز از آن استفاده نمودند.
در سال 2006، پروژه Nutch جداسازی شد و بخش خزنده وب تحت عنوان Nutch و بخش محاسبات و پردازش توزیع شده با نام Hadoop باقی ماند. در سال 2008 کمپانی یاهو، هدوپ را به عنوان یک پروژه منبع باز منتشر کرد. امروز، چارچوب و اکوسیستم فناوری هادوپ توسط بنیاد نرم افزاری غیر انتفاعی Apache (ASF) مدیریت و نگهداری می شود.
تصور کنید شما به عنوان یک بازدیدکننده، قصد دارید یک صفحه مانند صفحهی اصلی یا homepage یا صفحه ی دربارۀ ما یا به اصطلاح About Us را روی وبسایت بارگذاری کنید. در این شرایط مرورگر یک درخواست به سرور شما ارسال خواهد کرد. اینجا دقیقاً همان نقطه ای است که آپاچی هدوپ وارد عمل می شود.
این ابزار تمامی فایل های درخواستی شامل متن، تصویر یا سایر فایل ها را برای مرورگر ارسال می کند. این همان نقش واسطه گری است که این ابزار ایفا میکند. سرور و کاربر به وسیله ی پروتکل های HTTP با هم ارتباط برقرار خواهند کرد. و مسئولیت برقراری یک ارتباط امن و روان میان این دو ماشین برعهده ابزار آپاچی هدوپ می باشد.
حال اگر بخواهیم کمی تخصصی تر به موضوع نگاه کنیم باید بگوییم، هسته اصلی هادوپ از یک بخش ذخیره سازی (سیستم فایل توزیع شده هادوپ یا همان HDFS) و یک بخش پردازش (Map/Reduce) تشکیل شده است. هادوپ فایل ها را به بلوک های بزرگ شکسته و آن ها را بین نودهای یک خوشه توزیع می کند. برای پردازش داده، بخش Map/Reduceبسته کدی را ارسال می کند تا پردازش را به صورت موازی انجام دهند.
این رویکرد از جایگاه داده بهره می برد (نودها (Nods) بر روی بخشی از داده کار می کنند که در دسترس شان قرار دارد). به این ترتیب داده ها سریع تر و کاربردی تر از زمانی که از یک معماری متکی بر ابررایانه که از سیستم موازی استفاده می کند و محاسبه داده را از طریق یک شبکه پر سرعت به هم متصل می کند، پردازش می شوند.
چارچوب هادوپ همان گونه که گفته شد به زبان جاوا نوشته شده است، اما از زبان C و همچنین از شل اسکریپت نیز در بخش هایی از آن بهره گرفته شده است. کاربران در نهایت می توانند در کار با هادوپ، از هر زبان برنامه نویسی ای برای پیاده سازی بخش های “map” و “reduce” استفاده کنند.
چارچوب اصلی هادوپ از ماژول های زیر تشکیل شده است:
این بخش شامل کتابخانه ها و utility های لازم توسط دیگر ماژول های هادوپ است.
یک سیستم فایل توزیع شده که داده را بر روی ماشین های خوشه ذخیره کرده و پهنای باند وسیعی را به وجود می آورد.
یک پلتفرم مدیریت منابع که مسئول مدیریت منابع محاسباتی در خوشه ها می باشد.
یک مدل برنامه نویسی برای پردازش داده در مقیاس های بالاست. در واقع هادوپ یک سیستم فایل توزیع شده تهیه می کند که می تواند داده را بر روی هزاران سرور ذخیره کند، و تسک را بر روی این ماشین ها پخش کرده (کارهای Map/Reduce) و آن ها را در کنار داده انجام دهد.
Map/Reduce یک مدل برنامه نویسی است که یک محاسبه بزرگ توزیع شده را به صورت دنباله ای از عملیات توزیع شده بر روی مجموعه داده ای از زوج های کلید/مقدار بیان می کند. چارچوب Map/Reduce هادوپ، یک خوشه از ماشین ها را به اختیار خود گرفته و کارهای نگاشت کاهش تعریف شده توسط کاربر را بر روی نودهای این خوشه اجرا می کند.
محاسبات Map/Reduceدو فاز دارد:
فاز map (نگاشت) و فاز reduce (کاهش). ورودی این محاسبه، مجموعه داده ای از جفت های کلید/مقدار است.
در فاز map، چارچوب، داده ورودی را به تعداد زیادی قطعه تقسیم کرده و هر قطعه به یک تسک map تمایز می یابد. چارچوب همچنین تسک های map (که معمولاً تعداد بالایی دارند) را میان نودهای یک خوشه برای اجرا توزیع می کند. هر تسک map از زوج کلید/مقدار بخش تخصیص یافته اش استفاده کرده و مجموعه ای از زوج های میانی کلید/مقدار را ایجاد می کند. برای هر زوج کلید/مقدار (K, V) تسک map یک تابع تعریف شده به وسیلۀ کاربر را احضار می کند که ورودی را به زوج کلید/مقدار متفاوتی تبدیل می کند.
همگام با فاز map، چارچوب، داده های میانی را با توجه به کلید سازماندهی می کند و مجموعه ای از چندتایی های (*’K’,V) ایجاد می کند. تا تمامی مقادیر مربوط به یک کلید، با هم مشخص شوند. چارچوب همچنین مجموعه چندتایی ها را به چندین قطعه برابر با تعداد تسک های reduce تقسیم میکند.
در فاز reduce، هر تسک، قطعه ی شامل چندتایی های (*’K’,V) مختص خود را مصرف می کند. برای هر چندتایی، هر تسک 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 همه “wrire once” هستند و تنها یک نویسنده در هر زمان دارند.
همانند Map/Reduce هادوپ، HDFS نیز دارای یک معماری (ارباب/برده) است. ساختار HDFS شامل یک Namenode (گره نام) است که یک سرور ارباب بوده و فضای نام فایل سیستم را مدیریت کرده و دسترسی به فایل ها توسط کلاینت ها را تنظیم می کند. به علاوه، تعدادی Datanode (گره داده) نیز وجود دارد، که به ازای هر نود در خوشه، مخزن اختصاصی به نودها که بر روی آن اجرا می شوند را مدیریت می کند. Namenode ها عملیاتی مانند باز کردن، بستن، و تغییر نام فایل ها و دایرکتوری ها را به وسیله یک واسط RPC برای فضای نام فایل سیستم ممکن می کنند و همچنین نگاشت بلوک ها را به datanode ها معین می کنند. Datanode ها مسئول انجام خدمات مربوط به درخواست های خواندن و نوشتن رسیده از طرف کلاینت های فایل سیستم هستند. همچنین تولید، حذف و ایجاد کپی از بلوک ها را بر حسب دستورالعمل Namenode انجام می دهند.
هدوپ بر روی سیستم عامل لینوکس و ترجیحاً اوبونتو توسعه داده شده است. بنابراین کاربر باید با برخی دستورات اولیه لینوکس آشنایی داشته باشد. این دستورات به جهت سهولت در بارگذاری فایل در HDFS، دانلود فایل از HDFS و... است.
آشنایی با یکی از زبان های برنامه نویسی پایتون، جاوا، پرل، روبی و...
با افزایش حجم و انواع گونگاون داده ها، به خصوص از طریق رسانه های اجتماعی و اینترنت اشیاء (IoT)، این مسئله نکته ای حائز اهمیت است. مدل محاسباتی هادوپ، داده های بزرگ را به سرعت پردازش می کند. هرچه از گره محاسباتی بیشتر استفاده کنید، قدرت پردازش بیشتری نیز خواهید داشت.
مطلب مرتبط: اینترنت اشیاء (IOT) چیست؟
پردازش داده ها و برنامه ها در مقابل خرابی سخت افزار محافظت می شوند. اگر یک نود یا همان گره از کار بیفتد، کارها به صورت اتوماتیک به گره های دیگر هدایت می شوند تا مطمئن شوید محاسبات توزیع شده از کار نمی افتند. همچنین چندین نسخه از تمام داده ها به صورت اتوماتیک ذخیره می شوند.
برخلاف بانک های اطلاعاتی سنتی، نیازی به پردازش داده ها پیش از ذخیره کردن آن نیست. شما می توانید اطلاعات را به همان اندازه که نیاز دارید ذخیره کنید و تصمیم بگیرید که چگونه بعدها از آن ها استفاده کنید. این موضوع شامل داده های بدون ساختار مانند متن، تصاویر و فیلم ها است.
چارچوب منبع باز هدوپ آزاد است و از سخت افزار برای ذخیره مقادیر بسیاری از داده ها استفاده می کند.
به آسانی می توانید سیستم خود را برای مدیریت داده های بیشتر، به سادگی با افزودن نودها توسعه دهید.
مناسب برای انواع درخواست ها و مشکلات ساده اطلاعاتی، که می توانند به واحدهای مستقل تقسیم بندی شوند، می باشد. اما برای فعالیت های تحلیلی تکراری و تعاملی کارآمد نیست.
یافتن برنامه نویس سطح بالایی که دارای مهارت کافی جاوا باشد برای تهیه نگاشت کاهش دشوار است.
یکی دیگر از مراکز چالش، حول مسائل مربوط به امنیت داده های پراکنده است. درحالی که ابزارها و فناوری های نوین در حال رونمایی هستند. پروتکل احراز هویت Kerberos گامی بزرگ جهت ایمن سازی محیط کاربری هدوپ است.
محیط هدوپ از ابزارهای کاربردی و آسان برای مدیریت داده ها و پاکسازی داده ها برخوردار نیست. خصوصاً ابزاری جهت کیفیت داده ها و استاندارد سازی در آن وجود ندارد.