<

عصر هدوپ

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

عصر هدوپ

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

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

۸ مطلب با کلمه‌ی کلیدی «MapReduce» ثبت شده است

با مطالعه و بررسی قسمت اول این مطلب، حال واضح است که چرا سایز مناسب یک Split بهتر است به اندازه سایز یک بلاک از HDFS باشد زیرا این اندازه بیشترین مقدار داده ورودی است که می توان مطمئن بود روی یک نود بصورت کامل ذخیره می شود. اگر یک Split بین دو Block پخش شود، احتمال اینکه که یک نود به تنهایی هر دو بلاک را در خود نگهداری نماید زیاد نخواهد بود، بنابراین در این حالت برخی از Split ها مجبوراند به منظور رسیدن به نودی که اجرای Map Task را برعهده دارد روی شبکه منتقل شوند، که البته روشن است کیفیت این نوع پردازش نسبت به حالتی که داده بصورت محلی وجود دارد متفاوت خواهد بود.

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

۰ نظر موافقین ۰ مخالفین ۰ ۰۲ دی ۹۳ ، ۰۸:۲۰
مهدی شهیدی صادقی

در مطالب قبلی چگونگی کار MapReduce با ورودی کم را مشاهده کردید. حالا نوبت آن است که با نگاهی از بالا به پایین سیستم را مورد ارزیابی قرار داده و جریان داده موجود در MapReduce را با ورودی زیاد مورد بررسی قرار دهیم. برای سادگی کار، در مثال قبلی فایل ورودی (Sample.txt) بروی فایل سیستم محلی نگهداری می شد. به منظور گسترش کار، ابتدا می بایست داده ورودی روی یک فایل سیستم توزیع شده که نوعا HDFS (درمطالب بعدی از آن صحبت خواهیم کرد) است، قرار گیرد، تا هدوپ بتواند محاسبات تعریف شده در قالب MapReduce را در سطح کلاستر که در آن هر بخش از داده بروی یک ماشین قرار دارد، به منظور اجرا منتشر نماید.

جریان داده

در آغاز، چند واژه جدید. یک Job  در MapRedcue به یک واحد کاری گفته می شود که به دستور client صورت می گیرد که متشکل است از داده ورودی، برنامه MapReduce، تنظیمات اولیه. هدوپ یک Job را به منظور اجرا به تعدادی Task تقسیم می نماید که خود دارای دو نوع است : Map Task , Reduce Task.

۰ نظر موافقین ۰ مخالفین ۰ ۲۷ آذر ۹۳ ، ۲۱:۳۰
مهدی شهیدی صادقی

تحلیل داده توسط هدوپ

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


Map and Reduce

در MapReduce پردازش به دو فاز تقسیم می شود: فاز map و فاز reduce. هر فاز به عنوان ورودی و خروجی لیستی از زوجهای key-value دارد، که نوع آن توسط برنامه نویس تعیین می شود. همچنین برنامه نویس موظف است برای هر فاز بصورت جداگانه یک تابع بنویسد: تابع map و تابع reduce.

مثال: بیشترین درجه آب و هوا به ازای هر سال را مشخص نمایید.

در مجموعه داده هواشناسی، فایل های لاگ بصورت متنی و سطر به سطر طراحی شده اند، بنابراین در ورودی تابع map مقدار key بیانگر شماره سطر و مقدار value بیانگر محتوای سطر خواهد بود. البته در این مثال از مقدار key استفاده نمی شود. تابع map ساده می باشد. قرار است که دو فیلد سال و درجه از مقدار value استخراج شوند. توجه داشته باشید که به ازای هر سطر از ورودی یک بار تابع map فراخوانی می شود. در این مثال، تابع map تنها آماده سازی داده را انجام می دهد تا به واسطه آن ورودی تابع reduce فراهم شود.

۲ نظر موافقین ۰ مخالفین ۰ ۰۵ آذر ۹۳ ، ۰۹:۱۷
مهدی شهیدی صادقی

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


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

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

۲ نظر موافقین ۲ مخالفین ۰ ۰۱ آذر ۹۳ ، ۰۹:۵۷
مهدی شهیدی صادقی

هدوپ در !Yahoo

برای ساخت یک موتور جستجو اینترنتی نیاز به حجم زیادی داده و تعداد زیادی ماشین به منظور پردازش آن می باشد. موتور جستجوی !Yahoo از چهار مولفه اصلی تشکیل شده است: Crawler، دانلود کردن صفحات وب از سرورهای گوناگون؛ WebMap، ساختن گراف از مسیرهای شناخته شده وب؛ Indexer، ساختن شاخص معکوس از بهترین صفحات؛ Runtime، پاسخ دادن به درخواست های کاربر.WebMap  گرافی است که از حدودا یک تریلیون یال که هر کدام بیانگر یک Web Link و یکصد میلیارد نود که هر کدام بیانگر URLهای منحصر به فرد می باشد، تشکیل شده است. ساخت و تحلیل گرافی با این وسعت مستلزم صرف وقت و هزینه بسیاری است. در اوایل 2005، زیرساخت WebMap که Dreadnaught نامیده می شد، نیاز به طراحی مجدد به منظور نگهداری نودهای بیشتر داشت. طراحی فعلی آن بدون هیچگونه تغییری از 20 نود به 600 نود با موفقیت ارتقاء پیدا کرده بود. Dreadnaught از جهات بسیاری شبیه به MapReduce می باشد، اما بسیار منعطف تر است. بنابراین، برنامه های تحت WebMap با حداقل تغییرات می توانستند از MapReduce استفاده نمایند.  

۰ نظر موافقین ۱ مخالفین ۰ ۲۵ آبان ۹۳ ، ۱۳:۳۷
مهدی شهیدی صادقی

محاسبات شبکه ای

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

در MapReduce تمرکز بر جای دادن داده در کنار نود پردازش کننده می باشد، بنابراین از آنجایی که دسترسی محلی است، سرعت پردازش بالا خواهد بود. این ویژگی مهم را محلی سازی داده (Data Locality) می نامند. باتوجه به اینکه پهنای باند شبکه مهمترین منبع در یک دیتاسنتر است، MapReduce به گونه ای پیاده سازی شده است تا بتواند آن را از طریق مدل سازی ساختار شبکه به بهترین نحو محافظت نماید. توجه داشته باشید که این چیدمان مانع انجام تحلیل های سنگین در MapReduce نمی شود.

۲ نظر موافقین ۱ مخالفین ۰ ۰۷ آبان ۹۳ ، ۰۹:۵۹
مهدی شهیدی صادقی

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

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

به نقل از Mailtrust: 

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

۱ نظر موافقین ۱ مخالفین ۰ ۰۵ آبان ۹۳ ، ۱۹:۲۵
مهدی شهیدی صادقی

از آنجایی که ظرفیت ذخیره سازی هارد دیسک ها در سال های اخیر بصورت قابل توجهی افزایش یافته، اما سرعت دسترسی (مدت زمانی که به جهت خواندن داده از روی هاردیسک صرف می شود) آنها به آن اندازه رشد نکرده است. 

یک هارد دیسک معمولی سال 1990 توانایی ذخیره سازی داده تا حدود 1,370 MB با سرعت دسترسی در حدود 4.4 MB/s را داشت. بنابراین تمامی داده آن در حدود پنج دقیقه واکشی می شد. با گذشت بیست سال، هاردیسک ها در حدود یک ترا بایت داده را با سرعت دسترسی در حدود 100 MB/s نگهداری می نمایند، که در این حالت کل داده در حدود دو ساعت و نیم واکشی می شود.

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

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

۱ نظر موافقین ۱ مخالفین ۰ ۰۵ آبان ۹۳ ، ۱۵:۴۰
مهدی شهیدی صادقی