ستم‌های چند هسته‌ای30 [9, 10]، محیط‌های رایانشی داوطلبانه31 [11]، محیط‌های ابری پویا32 [12] و محیط‌های سیار33 [13] نیز تطبیق سازی شده‌است کرد [4]. بعنوان مثال شرکت گوگل برای اینکه‌ایندکس‌هایش را مجددا بطور کامل ایجاد کند از مدل نگاشت‌کاهش استفاده کرد [14]. لذا این مدل برنامه نویسی بشکل وسیعی در زمینه رایانش ابری مورد استفاده قرار گرفته‌است و پیاده سازی‌های مختلفی از این مدل برنامه نویسی، در ابرهای شرکت‌های بزرگ مانند گوگل و فیسبوک34 مورد استفاده قرار گرفته است.
مدل نگاشت‌کاهش همانطور که در شکل ‏2-1 نشان داده شده‌است از دو تابع اصلی تشکیل شده‌است. تابع نگاشت35 ورودی را در قالب جفت‌های کلید/مقدار36 دریافت و پردازش می‌کند و بعنوان خروجی جفت‌های کلید/مقدار میانی را برمی‌گرداند. کتابخانه‌ی نگاشت‌کاهش37، تمامی مقدارهای میانی که دارای کلید برابر هستند را در یک گروه جمع آوری کرده و به تابع کاهش38 ارسال می‌کند. ورودی تابع کاهش، یک کلید و لیستی از مقادیر مربوط به آن کلید است که پس از پردازش، خروجی نهایی را بر می‌گرداند [3]. همچنین در شکل ‏2-2 مراحل اصلی مدل و نیز مسیر حرکت داده‌ها در این مدل برنامه نویسی بشکل مصور نشان داده شده است.
شکل ‏2-1: مراحل مدل نگاشت کاهش
شکل ‏2-2: شمای کلی مدل برنامه نویسی نگاشت کاهش
[برگرفته از مقاله شماره [15]]
برای آشنایی بیشتر با مدل نگاشت‌کاهش، در شکل ‏2-3 نحوه اجرای برنامه WordCount نشان داده شده‌است. این برنامه فایل متنی را دریافت کرده و تعداد تکرار هر کلمه را محاسبه می‌کند. ورودی تابع نگاشت، یک جفت شامل آدرس شروع یک خط و محتوای آن خط می‌باشد و بعنوان خروجی، هر کلمه به همراه عدد یک را برمی‌گرداند. در مرحله‌ی shuffling، جفت‌هایی که کلید برابر دارند تشکیل یک لیست را می‌دهند که هر لیست به یک تابع کاهش ارسال می‌شود. خروجی تابع کاهش، جفتی شامل کلمه و تعداد تکرار آن می‌باشد.
شکل ‏2-3: نحوه اجرای برنامه WordCount در نگاشت‌کاهش
نگاشت‌کاهش اجازه می‌دهد تا عملیات نگاشت و کاهش بصورت توزیع یافته اجرا شود. هر یک از توابع نگاشت مستقل از دیگری اجرا می‌شوند که‌این ویژگی نشان دهنده‌ی اجرای موازی برنامه‌هاست. همچنین توابع کاهش نیز بطور مستقل و به موازات هم اجرا می‌شوند. در صورتی که یکی از ماشین‌های شبکه برای مدت زمان خاصی جوابی نرسد، آن ماشین بعنوان ماشین متوقف شده39 شناخته می‌شود و وظایفش به ماشین دیگری محول می‌شود [4]. لذا مدیریت اجرای برنامه هنگام بروز خطا بعهده‌ی این چارچوب نرم‌افزاری است.
2-3- آپاچی هدوپ
آپاچی هدوپ40 چارچوب نرم افزاری است که قادر به اجرای برنامه‌ها بصورت توزیع یافته، روی کلاسترهای بزرگی از کامپیوترهاست [16]. هدوپ کاربران را قادر می‌سازد تا بتوانند چندین پتابایت41 داده را بصورت توزیع یافته روی کلاسترهایی از هزاران کامپیوتر بطور موازی اجرا کنند. هدوپ از چارچوب نرم افزاری نگاشت‌کاهش و سیستم فایل گوگل42، مشتق شده‌است که با همکاری چندین شرکت [17] با زبان برنامه نویسی جاوا43 پیاده سازی شده‌است. شرکت یاهو بیشترین سهم را در تولید هدوپ دارد و بطور گسترده از این چارچوب استفاده می‌کند [18]. در شکل ‏2-4 تعدادی از شرکت‌هایی که از هدوپ استفاده می‌کنند و در شکل ‏2-5 نیز یک کلاستر هدوپ نشان داده شده‌است.
شکل ‏2-4: برخی از شرکت‌هایی که از هدوپ استفاده می‌کنند

در این سایت فقط تکه هایی از این مطلب با شماره بندی انتهای صفحه درج می شود که ممکن است هنگام انتقال از فایل ورد به داخل سایت کلمات به هم بریزد یا شکل ها درج نشود

شما می توانید تکه های دیگری از این مطلب را با جستجو در همین سایت بخوانید

ولی برای دانلود فایل اصلی با فرمت ورد حاوی تمامی قسمت ها با منابع کامل

اینجا کلیک کنید

[منبع [19]]
شکل ‏2-5: نمونه‌ای از یک کلاستر هدوپ
[منبع [20]]
آپاچی هدوپ از دو مولفه اصلی تشکیل شده‌است. برای اجرای برنامه‌ها، چارچوب نرم افزاری نگاشت‌کاهش را پیاده سازی می‌کند و برای ذخیره‌ی داده‌ها روی ماشین‌های پردازشگر، یک فایل سیستم توزیع یافته44 را فراهم می‌کند. نگاشت‌کاهش و سیستم فایل توزیع یافته طوری طراحی شده‌اند که هرگونه مشکل و عدم موفقیت در اجرای برنامه‌ها را بطور خودکار مدیریت و برطرف می‌کنند [16]. لذا کاربر کافیست تمرکز خود را روی برنامه‌ی خود معطوف کند و بدون داشتن دانشی درباره مباحث شبکه و مسائل اجرای توزیع یافته، برنامه اش را به شکل توزیع شده‌ای اجرا کند.
2-3-1- فایل سیستم توزیع یافته هدوپ (HDFS)
HDFS یک فایل سیستم توزیع یافته45، مقیاس پذیر46 و قابل حمل47 است که با زبان جاوا برای چارچوب هدوپ پیاده سازی شده‌است. این فایل سیستم می‌تواند داده‌های با حجم بسیار بالا را روی چندین ماشین ذخیره کند [21].
HDFS متادیتای مربوط به فایل سیستم و داده‌های نرم‌افزارها را بطور جداگانه نگهداری می‌کند. HDFS همانند سایر فایل سیستم‌های توزیع شده همانند PVFS [22, 23]، Lustre [24] و GFS [25, 26] متادیتا را روی یک سرور اختصاصی ذخیره می‌کند. این سرور اختصاصی در HDFS، NameNode نام دارد. داده‌های نرم‌افزارها روی سایر سرورها بنام DataNode ذخیره می‌شوند. تمامی سرورها به همدیگر متصل بوده و با پروتکل TCP/IP با یکدیگر تبادل داده دارند. برخلاف PVFS و Lustre، DataNodeها در HDFS از مکانیزم‌هایی همچون RAID [27] برای محافظت از داده‌ها استفاده نمی‌کنند. بلکه همانند GFS برای افزایش قابلیت اطمینان48، داده‌ها بصورت تکراری روی چندین DataNode ذخیره می‌شوند. محتوای فایل‌ها به بلاک‌های بزرگی تقسیم بندی می‌شود و هر بلاک مستقل از سایر بلاک‌ها در چند DataNode بصورت تکراری ذخیره می‌شود. تعداد تکرار داده‌ها بصورت پیش فرض برابر با سه‌است. اما کاربر بسته به نیاز می‌تواند آن را تغییر دهد [20].
در شکل ‏2-6 یک کلاستر هدوپ نشان داده شده‌است که از یک NameNode و چهار DataNode تشکیل شده‌است. همچنین نحوه ذخیره یک فایل متشکل از 4 بلاک نیز در شکل نشان داده شده‌است. NameNode می‌داند که هر فایل از کدام بلاک‌ها تشکیل شده‌است و این بلاک‌ها در کدام DataNodeها قرار دارند. در شکل ‏2-7 نحوه نوشتن فایل‌ها روی HDFS نمایش داده شده‌است. هنگام ایجاد یک فایل روی سیستم فایل، ابتدا کلاینت HDFS، آدرس فایل را به NameNode می‌دهد. NameNode به ازای هر بلاک از فایل، لیستی از DataNode‌هایی که می‌توانند بلاک‌ها را در خود ذخیره کنند را برمی‌گرداند. سپس کلاینت، بلاک‌ها را به روش لوله‌ای49 در DataNodeها ذخیره کرده و پیغام تایید50 به NameNode ارسال می‌شود. هنگام خواندن یک فایل از روی HDFS نیز ابتدا کلاینت آدرس بلاک‌های فایل مورد نظر را از NameNode دریافت کرده و سپس بلاک‌ها را از نزدیکترین DataNode می‌خواند.
شکل ‏2-6: ذخیره فایل در فایل سیستم توزیع شده هدوپ
[منبع[28]]

شکل ‏2-7: نحوه نوشتن فایل درHDFS
]منبع [20][
علاوه‌براین HDFS شامل بخش دیگری به نام Secondary Namenode است. وظیفه‌ی این قسمت، این است که در بازه‌های زمانی منظم از ساختار حافظه‌ی Namenode تصویری51 تهیه می‌کند. این تصاویر باعث می‌شود زمانی که Namenode دچار مشکل شده و بطور غیرمعمول از اجرا خارج می‌شود، بتواند مجددا شروع به کار کند. بدون اینکه نیاز باشد بسیاری از اعمال را مجددا انجام دهد [21].
2-3-2- چارچوب نگاشت‌کاهش(MapReduce)
روی فایل سیستم توزیع شده(HDFS)، موتور نگاشت‌کاهش قرار می‌گیرد که از یک دنبال کننده برنامه یا JobTracker تشکیل شده‌است. نرم افزارهای کلاینت برای اجرای برنامه‌ها ابتدا برنامه را به JobTracker ارسال می‌کنند. ماشین‌های پردازشگر دارای یک دنبال‌کننده وظیفه یا TaskTracker برای اجرای وظایف دریافتی هستند. هنگامی که JobTracker یک برنامه را دریافت می‌کند آن را به چند وظیفه52 تقسیم کرده و وظایف را برای اجرا بین TaskTracker‌های موجود توزیع می‌کند. وظایف طوری بین TaskTrackerها توزیع می‌شود که داده‌های هر وظیفه در نزدیکترین مکان به آن TaskTracker باشد. در سیستم فایل‌های آگاه به قفسه53، JobTracker می‌داند که کدام ماشین حاوی داده موردنظر است و کدام ماشین‌ها مجاور یکدیگر قرار دارند. اگر JobTracker نتواند وظیفه را به ماشینی که داده در آن قرار دارد بدهد، اولویت با ماشینی است که در همان قفسه54 قرار دارد. این کار باعث کاهش ترافیک در شبکه اصلی می‌‌شود. درصورتی که یک TaskTracker موفق به انجام وظیفه خود نشود یا فرصت اجرای برنامه به اتمام برسد، آن بخش از برنامه مجددا برای اجرا زمانبندی و به TaskTracker دیگری ارسال می‌شود. در شکل ‏2-8 ارتباط بین این اجزا نمایش داده شده‌است. همانطور که در شکل مشاهده می‌شود، NameNode و JobTracker در ماشین Master اجرا می‌شوند و DataNode و TaskTracker در ماشین‌های Slave اجرا می‌شوند. کاربر برنامه‌ی موردنظر را به ماشین Master داده و این ماشین، برنامه را بین ماشین‌های Slave تقسیم و اجرا می‌کند. ماشین Master بطور خودکار اجرای برنامه را مدیریت می‌کند.
شکل ‏2-8: ساختار کلی یک کلاستر هدوپ
[منبع [29]]

فصل سوم
مروری بر تحقیقات انجام شده

3- مروری بر تحقیقات انجام شده