<

عصر هدوپ

آشنایی با Big Data و کار با Hadoop

عصر هدوپ

آشنایی با Big Data و کار با Hadoop

عصر هدوپ
بایگانی

با توجه به اینکه در اجرای یک Job در MapReduce به واسطه انتقال داده بین Map Task ها و Reduce Task ها پهنای باند موجود در سطح کلاستر مورد استفاده قرار می گیرد، لذا همواره Job ها با محدودیت انتقال داده و به حداقل رساندن آن به منظور استفاده هر چه بهینه تر از پهنای باند مواجه هستند. هدوپ به کاربران این امکان را می دهد تا آنها بتوانند یک (Combiner Function(CF تعریف نموده که روی خروجی Map اجرا می شود و در نهایت خروجی این نوع تابع به عنوان ورودی به تابع Reduce ارسال می گردد. از آنجایی که CF یک نوع بهینه سازی محسوب می شود، هدوپ هیچگونه تضمینی مبنی بر اینکه چندین بار آن را به ازای یک رکورد از خروجی Map فراخوانی خواهد کرد، نمی دهد. به عبارت دیگر، در صورتیکه تعداد فراخوانی CF صفر، یک، و یا چندین بار باشد، در نهایت می بایست شاهد تولید یک خروجی مشخص و ثابت از Reducer ها بود.

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

(1950, 0)

(1950, 20)

(1950, 10)

و خروجی دومین Map:

(1950, 25)

(1950, 15)

ورودی تابع Reduce بصورت یک لیست خواهد بود:

(1950, [0, 20, 10, 25, 15])

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

(1950, 25)

در این شرایط امکان استفاده از یک CF وجود دارد که می تواند شبیه به یک Reducer اما بصورت محلی اجرا شود، و بزرگترین درجه را به ازای هر خروجی Map بدست آورد. Reducer نیز تنها با ورودی زیر فراخوانی خواهد شد:

(1950, [20, 25])

و تابع Reduce در نهایت همان خروجی قبلی را تولید خواهد کرد. به منظور درک بهتر می توان فراخوانی های صورت گرفته تا اینجا را به شکل زیر بیان نمود:

max (0, 20, 10, 25, 15) = max (max (0, 20, 10), max (25, 15)) = max (20, 25) = 25

در ادامه مثالی را مورد بررسی قرار می دهیم که در آن امکان استفاده از CF وجود ندارد. فرض کنید می خواهیم محاسبه میانگین مثال قبلی را انجام دهیم.

mean (0, 20, 10, 25, 15) = 14

اما :

mean (mean (0, 20, 10), mean (25, 15)) = mean (10, 20) = 15


هرگز CF نمی تواند جایگزین تابع Reduce شود.(چگونه می تواند؟ تابع Reduce به منظور پردازش رکوردهای مربوط به یک Key خاص که حاصل خروجی چندین Map می باشد، همچنان مورد نیاز است.) اما این نوع تابع باعث کاهش حجم ترافیک داده بین Map و Reduce می شود(هنگام تلفیق سازی)، صرفا به همین دلیل است که توصیه می شود هرجایی که امکان استفاده از CF برای یک Job در MapReduce میسر بود از آن استفاده گردد.


طریقه استفاده از Combiner Function در کد

به مثال قبل که در زبان برنامه نویسی Java نوشته شده است بر می گردیم، در این مثال CF با تابع Reduce موجود در برنامه تفاوتی در نحوه پیاده سازی ندارد، لذا از همان کلاس Reducer به این منظور استفاده می شود. تنها تفاوتی که وجود دارد هنگام معرفی آن بصورت مشخص در تابع main می باشد.


Hadoop: The Definitive Guide by Tom White

استفاده از این مطلب با ذکر منبع بلامانع می باشد.
موافقین ۰ مخالفین ۰ ۹۳/۱۰/۰۶

نظرات  (۱)

ای ول برادر! سرعت مطلب گذاشتن رفته بالا! فکر ما هم باش که باید یه وقتی پیدا کنیم و این ها رو تست کنیم. :)
ادامه بده... موفق باشی.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی