مفهوم MapReduce

MapReduce، یک مدل برنامه نویسی ساده است که برای حل مسائل محاسباتی در مقیاس وسیع و نیز به صورت توزیعی، مورد استفاده قرار می‌گیرد. مفهوم MapReduce توسط گوگل در سال ۲۰۰۳ توسعه داده شد و ارائه شد MapReduce یک چارچوب نرم‌افزاری است که بستری امن و مقیاس پذیر برای توسعه کاربردهای توزیعی فراهم میکند.MapReduce، به زبان‌های مختلف پیاده‌سازی شده است.

در واقع  MapReduce مجموعه ای از توابع کتابخانه را در دل خود دارد که جزئیات و پیچیدگی را از دید برنامه‌نویس پنهان می‌کند. جزئیات MapReduce شامل موارد زیر می‌شود:

  • موازی سازی کارها به صورت خودکار
  • تعادل در بارمحاسباتی و داده
  • بهینه سازی در انتقالات دیسک و شبکه
  • اداره کردن نقص‌های رخ داده در ماشین‌ها

علاوه بر اینکه هر بهبودی که در کتابخانه ایجاد شود، تمام جاهاییکه از آن استفاده شده نیز بهبود اعمال می‌شود.

در این روش، دو گام اصلی به نام Map و Reduce وجود دارد.

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

گام Reduce: حال، گره اصلی که پاسخ ها و نتایج را دریافت کرد، آنها را برای ارائه خروجی، ترکیب می‌کند. در این میان ممکن است اعمالی مانند فیلتر کردن، خلاصه کردن و یا تبدیل کردن، بر روی نتایج انجام دهد.

 

این دو عمل اصلی، بر روی یک زوج مرتب (key, value) اعمال می‌شود. تابع Map، یک زوج مرتب از داده را گرفته و به لیستی از زوج مرتب‌ها تبدیل می‌کند:

(Map(k1,v1) -> list(k2,v2

سپس، چارچوب MapReduce ، همه زوج ها با کلید یکسان را از همه لیستها جمع آوری کرده و آنها را باهم، یک گروه می‌کند. پس به ازای هر کلید تولید شده، یک گروه ایجاد می‌شود. حال تابع Reduce، بر روی هرگروه اعمال می‌شود:

(Reduce(k2, list (v2)) -> list(v3

حال چارچوب MapReduce، یک لیست از (key,value) ها را به لیستی از value ها تبدیل می‌کند.

برای درک بهتر، در قالب یک مثال، مطالب فوق را نشان می‌دهیم. یکی از مثال‌های متداول برای حل مسئله توسط MapReduce، پیدا کردن تعداد رخ داد یک کلمه در یک متن است. منظور از متن در اینجا یک صفحه وب است. شبه کد زیر، مربوط به این مسئله می‌باشد:

 

:(void map(String name, String document
name: document name//
document: document contents//
:  for each word w in document
;(“EmitIntermediate(w, “1

:( void reduce(String word, Iterator partialCounts
word: a word//
partialCounts: a list of aggregated partial counts//
;int result = 0
: for each pc in partialCounts
;(result += ParseInt(pc
;((Emit(AsString(result

در این مسئله، ورودی یک فایل است که در هر سطر، یک متن دارد.

تابع Map زوج های (key,value) را می‌گیرد که در اینجا:

  • Key: آدرس صفحه وب
  • Value: محتویات صفحه

حال خروجی تابع Map، لیستی از زوج مرتب های دیگر می‌شود به اینصورت: (تعداد رخداد,کلمه). مانند شکل زیر:

1

حال چارچوب MapReduce، تمام زوج ها با کلید مشترک را جمع آوری میکند. سپس تابع Reduce، مقادیر زوج‌ها با کلید مشترک را ترکیب می‌کند و مقداری جدید برای آن در نظر می‌گیرد، که در اینجا برابر است با جمع مقادیر. مطابق شکل زیر:
2

و در نهایت خروجی به این شکل می‌شود:

3

میتوان ساختار MapReduce را به صورت شماتیک در شکل زیر دید:

4

سایت اوراکل فارسی راه اندازی شد.برای مشاهده سایت اینجا کلیک نمایید.

جهت دانلود دوره های آموزشی تصویری با موضوع آموزش هادوپ روی موضوعات زیر کلیک نمایید.

محسن صفابخش

محسن صفابخش

با سلام محسن صفابخش هستم .کارشناس و متخصص داده هایی با حجم و مقیاس کلان ازینرو در حال حاضر در یکی از بزرگتربن سایت های ایران در زمینه مدیریت و نگهداری از دیتابیس های اوراکل آن مشغول به فعالیت می باشم.

More Posts - Website

Follow Me:
LinkedInGoogle PlusYouTube

3 thoughts on “مفهوم MapReduce

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

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