# آپاچی هدوپ
آپاچی هدوپ (به انگلیسی: Apache Hadoop) مجموعه‌ای از ابزارهای نرم‌افزاری متن‌باز است که حل مسائل با داده‌های بسیار بزرگ را از طریق استفاده از تعداد زیادی رایانه، تسهیل می‌بخشد. هدوپ با استفاده از مدل نرم‌افزار نگاشت‌کاهش (MapReduce) یک چارچوب نرم‌افزاری برای ذخیره و پردازش کلان‌داده‌ها (big data) ارائه می‌کند. با اینکه هدوپ در ابتدا برای استفاده از رایانش‌خوشه‌ای بر روی سیستم‌های ضعیف و متوسط شکل گرفت، کم کم در سخت‌افزارهای پرقدرت نیز مورد استفاده قرار گرفت.
این سامانه قابلیت کار با هزاران گره و چندین پتابایت داده را داراست. هدوپ با الهام از نگاشت‌کاهش و مقالات مربوط به سامانهٔ پروندهٔ گوگل (به انگلیسی: Google File System) شرکت گوگل طراحی و پیاده‌سازی شده‌است.
هدوپ یک پروژهٔ سطح بالای آپاچی است که توسط گسترهٔ وسیعی از مشارکت‌کنندگان حمایت و استفاده می‌شود و از زبان برنامه‌سازی جاوا استفاده می‌نماید. شرکت یاهو به عنوان بزرگترین مشارکت‌کننده، از هدوپ به صورت گسترده در امور تجاری‌اش استفاده می‌کند.
هدوپ در ابتدا به‌عنوان یک زیرپروژهٔ موتور جستجویِ ناچ توسط داگ کاتینگ خلق شد.

## معماری
هدوپ، مشترکات هدوپ را شامل می‌شود که امکان دسترسی به سامانهٔ پرونده را، که توسط هدوپ پشتیبانی می‌شود، فراهم می‌آورد. بسته مشترکات هدوپ شامل فایل‌های جار (فایل اجرایی تولید شده توسط مترجم جاوا) و نیز اسکریپت‌هایی است که برای راه‌اندازی هدوپ لازم هستند. این بسته همچنین شامل کد منبع، مستندات و بخشی برای همکاری با پروژه‌های جامعهٔ هدوپ است.

خصوصیت کلیدی برای زمان‌بندی مؤثر کار، آن است که هر پروندهٔ سیستمی باید مکان خود را اعلان نماید: نام رَک (به صورت دقیقتر سویچ شبکه) همان جایی که گرهٔ کارگر قرار دارد. برنامهٔ کاربردی هدوپ از این اطلاعات برای اجرای کار بر روی گره‌هایی که داده‌ها در آن‌ها قرار دارد (و در صورت عدم امکان روی همان رک یا سوئیچ) استفاده می‌کنند و بدین ترتیب از ترافیک در ستون فقرات شبکه (به انگلیسی: Backbone) می‌کاهند. فایل‌های سیستمی اچ‌دی‌اف‌اس از این روش برای ایجاد نسخ مختلفی از یک داده روی رک‌های متفاوت استفاده می‌نماید. هدف این است که فشار روی یک رک یا خطای سوئیچ کاهش پیدا کند تا حتی در صورت رخداد چنین حوادثی، داده کماکان قابل خواندن باشد.

یک خوشهٔ کوچک هدوپ شامل یک گرهٔ ارباب و چندین گرهٔ کارگر می‌باشد. گرهٔ ارباب از یک دنبال‌کنندهٔ کار (به انگلیسی: Jobtracker)، دنبال‌کنندهٔ وظیفه (به انگلیسی: Tasktracker)، گرهٔ نام (به انگلیسی: NameNode) و گرهٔ داده (به انگلیسی: DataNode)، و گرهٔ کارگر از یک گرهٔ داده و یک دنبال‌کنندهٔ وظیفه تشکیل شده‌اند. گره‌های کارگر همچنین می‌توانند تنها شامل داده یا تنها محاسباتی باشند. هدوپ برای اجرا نیاز به نسخهٔ JRE 1.6 یا بالاتر دارد و برای شروع و پایان استاندارد اسکریپت‌ها و ارتباط بین گره‌ها در خوشه وجود پوسته امن الزامی است.

### فایل سیستم‌ها

#### فایل سیستمتوزیع‌شدهٔ هدوپ
اچ‌دی‌اف‌اس (به انگلیسی: Hadoop Distributed File System) یک فایل سیستم توزیع‌شده، قابل‌گسترش و قابل‌حمل است که در جاوا نوشته شده. هر گره در یک نمونهٔ هدوپ تنها یک گرهٔ داده دارد. هر گرهٔ داده با استفاده از یک پروتکل بلاک خاص اچ‌دی‌اف‌اس بلاک‌هایی از داده را در سرتاسر شبکه در اختیار می‌گذارد. این فایل سیستمی برای برقراری ارتباط از لایهٔ مجموعه پروتکل اینترنت استفاده می‌کند و کارگزارها (به انگلیسی: client) برای گفتگو با هم از RPC استفاده می‌کنند. اچ‌دی‌اف‌اس فایل‌های بزرگ (اندازهٔ مناسب برای یک فایل ضریبی از ۶۴ مگابایت است.) را در چندین ماشین ذخیره نموده و با تکرار کردن یک داده روی هاست‌های متفاوت قابلیت اطمینان را افزایش می‌دهد؛ و به همین دلیل نیازی به ذخیره‌سازی آرایه چندگانه دیسک‌های مستقل روی هاست‌ها ندارد. به صورت پیش‌فرض، داده روی سه گره، دو بار روی رک یکسان و یک بار روی رکی متفاوت ذخیره می‌شود. همچنین گره‌های داده می‌توانند با هم برای مواردی از قبیل متوازن‌سازی داده‌ها، انتقال کپی‌ها، و بالا نگه داشتن تعداد نسخ صحبت کنند. اچ‌دی‌اف‌اس چندان تابع پازیکس نیست، زیرا اصولاً اهداف یک فایل سیستمی POSIX با اهدافی که هدوپ دنبال می‌کند، متفاوت است؛ که نتیجهٔ این امر، کارایی بالا برای گذردهی داده‌هاست و اچ‌دی‌اف‌اس نه به هدف فراهم کردن دسترس‌پذیری بالا، بلکه برای پاسخگویی به فایل‌های بسیار بزرگ طراحی شده‌است.

یک نمونهٔ فایل سیستمی اچ‌دی‌اف‌اس به یک سرور منحصربه‌فرد، یعنی همان گرهٔ نام احتیاج دارد که تنها نقطهٔ خطای سیستم است. به این معنی که اگر گرهٔ نام با مشکل مواجه شود، فایل سیستمی قابل‌استفاده نخواهد بود و هرگاه دوباره برگردد، گرهٔ نام می‌بایست تمام عملیات ثبت‌نشده را تکرار کند. این فرایند تکرار ممکن است بیش از نیم ساعت برای یک خوشهٔ بزرگ به طول انجامد. این فایل سیستمی دارای یک گرهٔ نام ثانویه‌است که بسیاری را به این تصور اشتباه می‌اندازد که زمانی که گرهٔ نام اصلی از کار بیفتد، گرهٔ نام ثانویه جای آن را خواهد گرفت. در حقیقت، گرهٔ نام ثانویه مرتباً به گرهٔ نام اصلی وصل می‌شود و تصاویری لحظه‌ای از اطلاعات دایرکتوری آن گرفته و در دایرکتوری‌های محلی یا دوردست ذخیره می‌کند. این تصاویر می‌توانند برای راه‌اندازی مجدد یک گرهٔ نام اصلی که دچار خطا شده مورد استفاده قرار گیرند، بدون این که نیاز باشد تمام عملیات فایل سیستمی دوباره تکرار شود.

یک مزیت استفاده از فایل سیستمی اچ‌دی‌اف‌اس آگاهی از داده‌ها بین دنبال‌کنندهٔ کار و دنبال‌کنندهٔ وظیفه‌است. دنبال‌کنندهٔ کار، کارهای نگاشت/کاهش دنبال‌کنندهٔ وظیفه را با آگاهی از محل داده‌ها مدیریت می‌کند. فرض کنیم گرهٔ A شامل دادهٔ (x,y،z) و گرهٔ B شامل دادهٔ (a,b،c) باشد. دنبال‌کنندهٔ کار به این طریق مدیریت می‌کند که گرهٔ B را مسئول انجام کارهای نگاشت/کاهش روی (a,b،c) و گرهٔ A را موظف به انجام نگاشت/کاهش‌های روی (x,y،z) می‌کند. بدین‌ترتیب، حجم ترافیک روی شبکه کاهش پیدا می‌کند و از انتقال غیرضروری داده‌ها ممانعت به عمل می‌آید؛ که تأثیر قابل‌توجهی روی بهبود زمان اتمام کارها دارد. شایان ذکر است زمانی که هدوپ روی فایل سیستم‌های دیگر اجرا می‌شود، این مزیت همیشه وجود ندارد.

#### سایر فایل سیستم‌ها
تا مه ۲۰۱۱، فهرست فایل‌های سیستمی مورد پشتیبانی عبارت بود از:
- اچ‌دی‌اف‌اس (به انگلیسی: HDFS)
- آمازون اس ۳ (به انگلیسی: Amazon S3)
- کلود استور (به انگلیسی: CloudStore)
- اف‌تی‌پی (به انگلیسی: FTP)
- فایل‌های سیستمی اچ‌تی‌تی‌پی تنها قابل خواندن و اچ‌تی‌تی‌پی (به انگلیسی: Read-only HTTP and HTTP)

هدوپ می‌تواند مستقیماً با هر فایل سیستمی توزیع‌شده‌ای که قابلیت نصب شدن روی سیستم‌های عامل سازگار را داشته‌باشد، به-آسانی با استفاده از یک آدرس //:file کار کند. هرچند که این با پرداخت هزینه‌ای صورت می‌گیرد: از دست رفتن محلیت. برای کاهش دادن ترافیک شبکه، هدوپ باید بداند که کدام سرور به داده نزدیکتر است و این اطلاعاتی است که فایل سیستم خاص هدوپ می‌تواند فراهم کند.

### دنبال‌کنندهٔ کار و دنبال‌کنندهٔ وظیفه: موتور نگاشت/کاهش
بعد از فایل‌های سیستمی، موتور نگاشت/کاهش قرار دارد که از یک دنبال‌کنندهٔ کار تشکیل شده که برنامه‌های کارگزار روی آن کارهای نگاشت/کاهش را ثبت می‌کنند. این دنبال‌کنندهٔ کار، کار را به گره‌های دنبال‌کنندهٔ وظیفهٔ در دسترس خوشه می‌دهد و تلاش می‌کند کار را تا حد امکان نزدیک داده نگه دارد. با یک فایل سیستم آگاه از رک، دنبال‌کنندهٔ وظیفه می‌داند که هر گره چه داده‌هایی را شامل می‌شود و چه ماشین‌های دیگری در نزدیکی هستند. اگر امکان این وجود نداشته باشد که کار روی همان گره‌ای که شامل داده‌است، انجام شود، اولویت به گره‌هایی داده می‌شود که روی همان رک هستند. اگر یک دنبال‌کنندهٔ وظیفه دچار خطا شود یا زمانش تمام شود، آن بخش از کار دوباره زمان‌بندی می‌گردد. دنبال‌کنندهٔ وظیفه روی هر گره، یک پردازهٔ جدای ماشین مجازی جاوا تولید می‌کند تا خود دنبال‌کنندهٔ وظیفه در صورت مشکل‌دار بودن کار در حال اجرا، از خطا مصون بماند. هر چند دقیقه یک ضربان از سوی دنبال‌کنندهٔ وظیفه به دنبال‌کنندهٔ کار فرستاده می‌شود تا وضعیتش بررسی شود. وضعیت و اطلاعات این دو دنبال‌کننده به وسیلهٔ بلنداسکله نمایش داده می‌شود و از طریق یک مرورگر وب می‌توان آن را مشاهده کرد.

در نسخهٔ هدوپ ۰٫۲۰ یا پایین‌تر، اگر دنبال‌کنندهٔ کار دچار خطا می‌شد، تمام کار در حال پیشرفت از دست می‌رفت. نسخهٔ ۰٫۲۱ هدوپ تعدادی نقطهٔ بررسی به این فرایند اضافه کرد. به این صورت که دنبال‌کنندهٔ کار، کاری که تا آن لحظه انجام داده را در فایل سیستمی ذخیره می‌کند. زمانی که یک دنبال‌کنندهٔ کار آغاز به کار می‌کند، به دنبال هر گونه از چنین داده‌ای می‌گردد و کار را از همان جایی که قبلاً رها کرده‌بود شروع می‌نماید.

### سایر برنامه‌های کاربردی
فایل سیستمی اچ‌دی‌اف‌اس محدود به کارهای نگاشت/کاهش نمی‌شود. بلکه می‌تواند برای برنامه‌های دیگر بسیاری که در آپاچی در حال اجرا و توسعه هستند، از قبیل پایگاه دادهٔ HBase، سیستم یادگیری ماشینی Mahout آپاچی، و سیستم انبارهٔ دادهٔ Hive آپاچی مورد استفاده قرار گیرند. هدوپ در واقع می‌تواند برای هر گونه کار که بیش از real-time بودن، batch-oriented باشد، استفاده شود و قادر است با بخش‌هایی از داده به صورت موازی کار کند. به‌طور مثال در اکتبر ۲۰۰۹، برنامه‌های تجاری هدوپ عبارت بودند از:
- ثبت وقایع و تحلیل کلیک‌استریم به انواع مختلف
- تحلیل‌های بازاریابی (به انگلیسی: Marketing Analytics)
- یادگیری ماشینی و/یا استخراج داده‌های پیچیده
- پردازش تصویری
- پردازش پیام‌های XML
- خزندگی وب (به انگلیسی: Web Crawling) و/یا پردازش متن
- بایگانی عمومی (به انگلیسی: General Archiving) شامل داده‌های رابطه‌ای و جدولی


## استفاده‌کنندگان مهم

### یاهو
در ۱۹ فوریه ۲۰۰۸، شرکت یاهو چیزی را شروع کرد که ادعا می‌کرد بزرگترین محصول کاربردی هدوپ در جهان است. نقشهٔ جستجوی یاهو یک برنامهٔ هدوپ می‌باشد که بیش از ۱۰۰۰۰ خوشهٔ هستهٔ لینوکس دارد و داده‌هایی را که اکنون در هر درخواست جستجوی یاهو استفاده می‌شود، تولید می‌کند.
در یاهو چندین خوشهٔ هدوپ وجود دارند که هرکدام یک مرکز داده را اشغال می‌کنند. هیچ فایل سیستمی اچ‌دی‌اف‌اس یا کار نگاشت/کاهشی بین مراکز دادهٔ مختلف تقسیم نمی‌شود؛ در عوض، هر مرکز داده یک فایل سیستمی و بارکاری جدا دارد.
در ۱۰ ژوئن ۲۰۰۹، یاهو کد منبع نسخه‌ای از هدوپ را که در محصولاتش استفاده می‌کرد، عرضه کرد. یاهو تمام کاری را که روی هدوپ انجام می‌دهد، به جامعهٔ متن باز (به انگلیسی: Open Source) برمی‌گرداند و همچنین برنامه‌نویسان شرکت، اشکالات را رفع کرده و آن را پیشرفت می‌دهند و این کد منبع اصلاح‌شده را منتشر می‌کنند تا سایر کاربران هم از این تلاش‌ها بهره‌مند شوند.

### سایر استفاده‌کنندگان
- ۱+۱
- A9
- آمازون (شرکت)
- ای‌اوال
- سیبء[۱۶]
- بوز آلن همیلتون
- EHarmony
- ای‌بی
- فیس‌بوک
- Fox Interactive media
- فری‌بیس
- اچ‌پی
- آی‌بی‌ام
- ImageShack
- ISI
- Joost
- لست. اف‌ام
- لینکدین[۱۷]
- Meebo
- Metaweb
- نت‌فلیکسء[۱۸]
- نیویورک تایمز
- Ning
- Powerset
- RackSpace
- Razorfish
- StumbleUponء[۱۹]
- توئیتر


## هدوپ روی سرویس‌های آمازون EC2/S3
می‌توان هدوپ را روی ابر محاسباتی الاستیک آمازون (به انگلیسی: EC2) و سرویس ذخیره‌سازی سادهٔ آمازون (به انگلیسی: S3) اجرا کرد. به عنوان مثال نیویورک تایمز ۱۰۰ نمونهٔ آمازون ای سی ۲ و یک برنامهٔ هدوپ را برای پردازش ۴ ترابایت دادهٔ تصویری خام TIFF (ذخیره‌شده در اس ۳) به ۱۱ میلیون PDF در فضای ۲۴ ساعت با هزینهٔ حدود ۲۴۰ دلار (بدون پهنای باند) به کار برد.

هدوپ فایل سیستمی اس ۳ را پشتیبانی می‌کند و تیم هدوپ بعد از هر انتشار تصاویر ماشین ای سی ۲ را تولید می‌کنند. مشاهدات نشان داده که هدوپ روی این دو سرویس اس ۳ و ای سی ۲ کارآمد نیست، چرا که اس ۳ یک فایل سیستمی دوردست می‌باشد و در ازای اینکه تضمین شود داده‌ها در هر عملیات نوشتن از بین نمی‌روند، تأخیری به سیستم تحمیل می‌کند؛ و این، مزیت محلیت هدوپ را که کار را نزدیک به داده نگه می‌داشت، قربانی می‌کند.
در دوم آوریل ۲۰۰۹، آمازون انتشار نسخهٔ بتای یک سرویس جدید به نام نگاشت/کاهش الاستیک آمازون را اعلام کرد، با شعار «یک سرویس وب که به تجار، محققان، تحلیل‌گران داده و برنامه‌نویسان امکان پردازش آسان و بهینهٔ حجم عظیمی از داده را می‌دهد.»

## هدوپ روی گوگل و آی‌بی‌ام
آی‌بی‌ام و گوگل در سال ۲۰۰۷ در یک ابتکار برای حمایت رشته‌های دانشگاهی در برنامه‌نویسی کامپیوتر توزیع‌شده اعلام آمادگی کردند.

در سال ۲۰۰۸، این مؤسسه، بنیاد پردازش ابری آکادمیک (به انگلیسی: ACCI)، با بنیاد ملی علوم برای حمایت تحقیقات آکادمیک در شاخهٔ برنامه‌های با حجم بالای داده شریک شد. این اقدام، به ایجاد برنامهٔ Cluster Exploratory انجامید.