<

عصر هدوپ

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

عصر هدوپ

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

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

مطلب ۶ (قسمت اول) : MapReduce

شنبه, ۱ آذر ۱۳۹۳، ۰۹:۵۷ ق.ظ

MapReduce یک مدل برنامه نویسی پردازش داده می باشد. هدوپ می تواند برنامه هایی که با این مدل در زبانهای برنامه نویسی گوناگون نظیر Java، Ruby، Python و ++C ایجاد شده است را اجرا نماید. اما نکته مهم این است که برنامه های نوشته شده تحت MapReduce ذاتا بصورت موازی طراحی و پیاده سازی می شوند، یعنی برای تحلیل یک حجم زیاد داده می بایست آن را بین چندین ماشین تقسیم نمود.


یک مجموعه داده هواشناسی

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

Example 2-1. Format of a National Climate Data Center record

 005733213099999195001010300 4+51317+028783FM-12+017199999V0203201 # A line of the log file which represents a record.

0057

332130     # USAF weather station identifier

99999       # WBAN weather station identifier

19500101 # observation date

0300         # observation time

4

+51317    # latitude (degrees x 1000)

+028783  # longitude (degrees x 1000)

FM-12

+0171      # elevation (meters)

99999

V020

320          # wind direction (degrees)

1              # quality code


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

% ls raw/1990 | head

010010-99999-1990.gz

010014-99999-1990.gz

010015-99999-1990.gz

010016-99999-1990.gz

010017-99999-1990.gz

010030-99999-1990.gz


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

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

اول، تقسیم کار به اندازه های مساوی برای انجام پردازش های موازی همیشه کار آسان و واضحی نیست. در این مثال، به ازای هر سال داده ای جدا گانه وجود دارد، البته ممکن است حجم داده به ازای هر سال متفاوت باشد که در این حالت پردازش برخی از آنها زودتر از باقی به اتمام می رسد. حتی اگر آنهایی که پردازش خود را به اتمام رسانده، شروع به انجام پردازش های بیشتر نمایند، باز کل اجرا تحت کنترل بیشترین حجم داده خواهد بود. روش بهتر آن است که ابتدا ورودی به قطعه های معینی تقسیم شود(Input Splits) و هر یک از آن قطعه ها به یک پردازش اختصاص یابد.

دوم، ممکن است ادغام نتایج بدست آمده از پردازش های مختلف نیازمند پردازش جداگانه ای باشد. در این مثال، از آنجایی که نتیجه هر سال با سال دیگر متفاوت است ممکن است بتوان آنها را باهم ادغام کرده و براساس سال مرتب نمود. اگر از روش پیشنهادی قسمت اول (تقسیم ورودی به قطعه های معین) استفاده شود، فرآیند ادغام کمی متفاوت خواهد شد. فرض کنید می خواهیم بیشترین درجه آب و هوا را برای یک سال خاص بدست آوریم، ابتدا داده آن به عنوان ورودی به چندین قطعه معین تقسیم می شود سپس هر یک از قطعه ها بصورت کاملا مستقل مورد پردازش قرار می گیرد. بنابراین به ازای هر قطعه یک نتیجه (بیشترین درجه آب و هوا) وجود خواهد داشت که برای بدست آمدن نتیجه نهایی می بایست پردازش جداگانه ای بروی آن نتایج انجام شود.

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

بنابراین، امکان انجام پردازش های موازی وجود دارد اما در عمل بسیار پیچیده خواهد بود. استفاده از موجودیتی نظیر هدوپ این مسئله را بخوبی برای ما انجام خواهد داد.

Hadoop: The Definitive Guide by Tom White

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

Input Split

MapReduce

hadoop

هادوپ

هدوپ

نظرات  (۲)

بسیار خوب. منتظر مطلب بعدی هستم.
پاسخ:
سلام، تشکر.
سلام. مطالب فوق العاده ای دارید. امکانش هست برای پروژه از بخشی از مطالبتون استفاده کنم؟
ممنون
پاسخ:
سلام. تشکر.
استفاده از این مطالب با ذکر منبع بلا مانع می باشد.

ارسال نظر

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