نگاشتکاهش
نگاشتکاهش یک مدل برنامهنویسی در مورد محاسبات توزیع شده بر روی حجم بالایی از دادهها میباشد. همچنین نگاشتکاهش یک چارچوب نرمافزاری است که در سال ۲۰۰۴ توسط گوگل برای پردازش توزیع شدهی دادههای با مقیاس بالا توسط کلاسترهایی از کامپیوترها ارائه شد [۷]. این چارچوب در زمینههای مختلفی همچون مرتب سازی توزیع یافته[۲۶]، ساخت اندیس معکوس[۲۷]، کلاستربندی اسناد[۲۸] و فراگیری ماشین[۲۹] [۸]مورد استفاده قرار گرفتهاست. همچنین مدل نگاشتکاهش برای استفاده در محیطهای مختلف رایانشی مانند سیستمهای چند هستهای[۳۰] [۹, ۱۰]، محیطهای رایانشی داوطلبانه[۳۱] [۱۱]، محیطهای ابری پویا[۳۲] [۱۲] و محیطهای سیار[۳۳] [۱۳] نیز تطبیق سازی شدهاست کرد [۴]. بعنوان مثال شرکت گوگل برای اینکهایندکسهایش را مجددا بطور کامل ایجاد کند از مدل نگاشتکاهش استفاده کرد [۱۴]. لذا این مدل برنامه نویسی بشکل وسیعی در زمینه رایانش ابری مورد استفاده قرار گرفتهاست و پیاده سازیهای مختلفی از این مدل برنامه نویسی، در ابرهای شرکتهای بزرگ مانند گوگل و فیسبوک[۳۴] مورد استفاده قرار گرفته است.
مدل نگاشتکاهش همانطور که در نشان داده شدهاست از دو تابع اصلی تشکیل شدهاست. تابع نگاشت[۳۵] ورودی را در قالب جفتهای کلید/مقدار[۳۶] دریافت و پردازش میکند و بعنوان خروجی جفتهای کلید/مقدار میانی را برمیگرداند. کتابخانهی نگاشتکاهش[۳۷]، تمامی مقدارهای میانی که دارای کلید برابر هستند را در یک گروه جمع آوری کرده و به تابع کاهش[۳۸] ارسال میکند. ورودی تابع کاهش، یک کلید و لیستی از مقادیر مربوط به آن کلید است که پس از پردازش، خروجی نهایی را بر میگرداند [۳]. همچنین در مراحل اصلی مدل و نیز مسیر حرکت دادهها در این مدل برنامه نویسی بشکل مصور نشان داده شده است.
شکل ۲‑۱: مراحل مدل نگاشت کاهش
شکل ۲‑۲: شمای کلی مدل برنامه نویسی نگاشت کاهش
[برگرفته از مقاله شماره [۱۵]]
برای آشنایی بیشتر با مدل نگاشتکاهش، در نحوه اجرای برنامه WordCount نشان داده شدهاست. این برنامه فایل متنی را دریافت کرده و تعداد تکرار هر کلمه را محاسبه میکند. ورودی تابع نگاشت، یک جفت شامل آدرس شروع یک خط و محتوای آن خط میباشد و بعنوان خروجی، هر کلمه به همراه عدد یک را برمیگرداند. در مرحلهی shuffling، جفتهایی که کلید برابر دارند تشکیل یک لیست را میدهند که هر لیست به یک تابع کاهش ارسال میشود. خروجی تابع کاهش، جفتی شامل کلمه و تعداد تکرار آن میباشد.
شکل ۲‑۳: نحوه اجرای برنامه WordCount در نگاشتکاهش
نگاشتکاهش اجازه میدهد تا عملیات نگاشت و کاهش بصورت توزیع یافته اجرا شود. هر یک از توابع نگاشت مستقل از دیگری اجرا میشوند کهاین ویژگی نشان دهندهی اجرای موازی برنامههاست. همچنین توابع کاهش نیز بطور مستقل و به موازات هم اجرا میشوند. در صورتی که یکی از ماشینهای شبکه برای مدت زمان خاصی جوابی نرسد، آن ماشین بعنوان ماشین متوقف شده[۳۹] شناخته میشود و وظایفش به ماشین دیگری محول میشود [۴]. لذا مدیریت اجرای برنامه هنگام بروز خطا بعهدهی این چارچوب نرمافزاری است.
آپاچی هدوپ
آپاچی هدوپ[۴۰] چارچوب نرم افزاری است که قادر به اجرای برنامهها بصورت توزیع یافته، روی کلاسترهای بزرگی از کامپیوترهاست [۱۶]. هدوپ کاربران را قادر میسازد تا بتوانند چندین پتابایت[۴۱] داده را بصورت توزیع یافته روی کلاسترهایی از هزاران کامپیوتر بطور موازی اجرا کنند. هدوپ از چارچوب نرم افزاری نگاشتکاهش و سیستم فایل گوگل[۴۲]، مشتق شدهاست که با همکاری چندین شرکت [۱۷] با زبان برنامه نویسی جاوا[۴۳] پیاده سازی شدهاست. شرکت یاهو بیشترین سهم را در تولید هدوپ دارد و بطور گسترده از این چارچوب استفاده میکند [۱۸]. در تعدادی از شرکتهایی که از هدوپ استفاده میکنند و در نیز یک کلاستر هدوپ نشان داده شدهاست.
شکل ۲‑۴: برخی از شرکتهایی که از هدوپ استفاده میکنند
[منبع [۱۹]]
شکل ۲‑۵: نمونهای از یک کلاستر هدوپ
[منبع [۲۰]]
آپاچی هدوپ از دو مولفه اصلی تشکیل شدهاست. برای اجرای برنامهها، چارچوب نرم افزاری نگاشتکاهش را پیاده سازی میکند و برای ذخیرهی دادهها روی ماشینهای پردازشگر، یک فایل سیستم توزیع یافته[۴۴] را فراهم میکند. نگاشتکاهش و سیستم فایل توزیع یافته طوری طراحی شدهاند که هرگونه مشکل و عدم موفقیت در اجرای برنامهها را بطور خودکار مدیریت و برطرف میکنند [۱۶]. لذا کاربر کافیست تمرکز خود را روی برنامهی خود معطوف کند و بدون داشتن دانشی درباره مباحث شبکه و مسائل اجرای توزیع یافته، برنامه اش را به شکل توزیع شدهای اجرا کند.
فایل سیستم توزیع یافته هدوپ (HDFS)
HDFS یک فایل سیستم توزیع یافته[۴۵]، مقیاس پذیر[۴۶] و قابل حمل[۴۷] است که با زبان جاوا برای چارچوب هدوپ پیاده سازی شدهاست. این فایل سیستم میتواند دادههای با حجم بسیار بالا را روی چندین ماشین ذخیره کند [۲۱].
HDFS متادیتای مربوط به فایل سیستم و دادههای نرمافزارها را بطور جداگانه نگهداری میکند. HDFS همانند سایر فایل سیستمهای توزیع شده همانند PVFS [22, 23]، Lustre [24] و GFS [25, 26] متادیتا را روی یک سرور اختصاصی ذخیره میکند. این سرور اختصاصی در HDFS، NameNode نام دارد. دادههای نرمافزارها روی سایر سرورها بنام DataNode ذخیره میشوند. تمامی سرورها به همدیگر متصل بوده و با پروتکل TCP/IP با یکدیگر تبادل داده دارند. برخلاف PVFS و Lustre، DataNodeها در HDFS از مکانیزمهایی همچون RAID [27] برای محافظت از دادهها استفاده نمیکنند. بلکه همانند GFS برای افزایش قابلیت اطمینان[۴۸]، دادهها بصورت تکراری روی چندین DataNode ذخیره میشوند. محتوای فایلها به بلاکهای بزرگی تقسیم بندی میشود و هر بلاک مستقل از سایر بلاکها در چند DataNode بصورت تکراری ذخیره میشود. تعداد تکرار دادهها بصورت پیش فرض برابر با سهاست. اما کاربر بسته به نیاز میتواند آن را تغییر دهد [۲۰].
در یک کلاستر هدوپ نشان داده شدهاست که از یک NameNode و چهار DataNode تشکیل شدهاست. همچنین نحوه ذخیره یک فایل متشکل از ۴ بلاک نیز در شکل نشان داده شدهاست. NameNode میداند که هر فایل از کدام بلاکها تشکیل شدهاست و این بلاکها در کدام DataNodeها قرار دارند. در نحوه نوشتن فایلها روی HDFS نمایش داده شدهاست. هنگام ایجاد یک فایل روی سیستم فایل، ابتدا کلاینت HDFS، آدرس فایل را به NameNode میدهد. NameNode به ازای هر بلاک از فایل، لیستی از DataNodeهایی که میتوانند بلاکها را در خود ذخیره کنند را برمیگرداند. سپس کلاینت، بلاکها را به روش لولهای[۴۹] در DataNodeها ذخیره کرده و پیغام تایید[۵۰] به NameNode ارسال میشود. هنگام خواندن یک فایل از روی HDFS نیز ابتدا کلاینت آدرس بلاکهای فایل مورد نظر را از NameNode دریافت کرده و سپس بلاکها را از نزدیکترین DataNode میخواند.
شکل ۲‑۶: ذخیره فایل در فایل سیستم توزیع شده هدوپ
[منبع[۲۸]]
شکل ۲‑۷: نحوه نوشتن فایل درHDFS
]منبع [۲۰][
علاوهبراین HDFS شامل بخش دیگری به نام Secondary Namenode است. وظیفهی این قسمت، این است که در بازههای زمانی منظم از ساختار حافظهی Namenode تصویری[۵۱] تهیه میکند. این تصاویر باعث میشود زمانی که Namenode دچار مشکل شده و بطور غیرمعمول از اجرا خارج میشود، بتواند مجددا شروع به کار کند. بدون اینکه نیاز باشد بسیاری از اعمال را مجددا انجام دهد [۲۱].
جهت دانلود متن کامل این پایان نامه به سایت abisho.ir مراجعه نمایید.