مطلب ۶ (قسمت دوم) : MapReduce
تحلیل داده توسط هدوپ
برای اینکه بتوان از ویژگی اصلی هدوپ یعنی انجام پردازش های موازی استفاده کرد، ابتدا می بایست درخواست خود را با استفاده از MapReduce بیان نمود. سپس بعد از انجام تست های محلی، می توان آن را بروی کلاستری از ماشین ها به اجرا درآورد.
Map and Reduce
در MapReduce پردازش به دو فاز تقسیم می شود: فاز map و فاز reduce. هر فاز به عنوان ورودی و خروجی لیستی از زوجهای key-value دارد، که نوع آن توسط برنامه نویس تعیین می شود. همچنین برنامه نویس موظف است برای هر فاز بصورت جداگانه یک تابع بنویسد: تابع map و تابع reduce.
مثال: بیشترین درجه آب و هوا به ازای هر سال را مشخص نمایید.
در مجموعه داده هواشناسی، فایل های لاگ بصورت متنی و سطر به سطر طراحی شده اند، بنابراین در ورودی تابع map مقدار key بیانگر شماره سطر و مقدار value بیانگر محتوای سطر خواهد بود. البته در این مثال از مقدار key استفاده نمی شود. تابع map ساده می باشد. قرار است که دو فیلد سال و درجه از مقدار value استخراج شوند. توجه داشته باشید که به ازای هر سطر از ورودی یک بار تابع map فراخوانی می شود. در این مثال، تابع map تنها آماده سازی داده را انجام می دهد تا به واسطه آن ورودی تابع reduce فراهم شود.
نمونه ای از داده ورودی(هر سطر بیانگر یک رکورد از فایل لاگ):
0067011990999991950051507004...9999999N9+00001+99999999999...
0043011990999991950051512004...9999999N9+00221+99999999999...
0043011990999991950051518004...9999999N9-00111+99999999999...
0043012650999991949032412004...0500001N9+01111+99999999999...
0043012650999991949032418004...0500001N9+00781+99999999999...
نمونه ای از داده ارسال شده (key-value pairs) به تابع map:
(0, 0067011990999991950051507004...9999999N9+00001+99999999999...)
(106, 0043011990999991950051512004...9999999N9+00221+99999999999...)
(212, 0043011990999991950051518004...9999999N9-00111+99999999999...)
(318, 0043012650999991949032412004...0500001N9+01111+99999999999...)
(424, 0043012650999991949032418004...0500001N9+00781+99999999999...)
نمونه ای از داده آماده سازی شده (key-value pairs) توسط تابع map:
(1950, 0)
(1950, 22)
(1950, −11)
(1949, 111)
(1949, 78)
خروجی بدست آمده از تابع map قبل از اینکه به عنوان ورودی به تابع reduce فرستاده شود، ابتدا توسط فریم ورک MapReduce مورد پردازش قرار می گیرد. این پردازش لیست زوجهای key-value را براساس key دسته بندی و مرتب می نماید. بنابراین با انجام این کار ورودی فاز بعد شکل خواهد گرفت.
(1949, [111, 78])
(1950, [0, 22, −11])
همانطورکه مشاهده می کنید به ازای هر سال تعدادی درجه آب و هوا بدست آمده است. تمام کاری که تابع reduce در این مثال انجام می دهد یافتن بزرگترین درجه آب و هوا در هر سال می باشد.
(1949, 111)
(1950, 22)
Hadoop: The Definitive Guide by Tom White