بهبود الگوریتمFP-growth داده کاوی بامتد های ترکیبی درمحیط رایانش ابری
مقدمه:
بیان مسئله :
یکی از فن ها و مفاهیم اصلی در داده کاوی قوانین انجمنی هستند. قوانین انجمنی و روابط و وابستگی های متقابل بین مجموعه ی بزرگی از اقلام داده را نشان میدهد. بیان کردن چنین قوانینی میتواند در حوزه های مختلف مورد توجه بوده و کاربردهای متفاوتی داشته باشد. به عنوان مثال کشف روابط انجمنی بین حجم عظیم تراکنش های کسب و کار میتواند در تشخیص تقلب، در حوزه ی پزشکی و همچنین داده کاوی در مورد اطلاعات و روش بکارگیری وب توسط کاربران وشخصی سازی مورد استفاده قرار گیرد یا در طراحی کاتالوگ، بازاریابی و دیگر مراحل فرایند تصمیم گیری کسب و کار موثر باشد. مثال متداول در رابطه با کشف قوانین انجمنی تحلیل سبد خرید است. در این فرایند با توجه به اقلام مختلفی که مشتریان در سبد خریدشان قرار میدهند عادت و رفتار خرید مشتریان مورد تحلیل قرار میگیرد. الگوهای موجود در اقلام خریداری شده کشف میشود به عنوان مثال مشخص میشود مشتریانی که برای خرید نان به فروشگاه آمده اغلب از شیر نیز خریداری میکنند. و البته معیارهای مختلفی برای اعتبار و قابلیت تعمیم این الگوها در نظر گرفته میشود.یکی از الگوریتم های محبوب و مفید در این فن، الگوریتم FP-growth است. حجم داده ورودی FP-growth اصولا بسیار زیاد است و به همین دلیل یک محیط ابری چهارچوب مناسبی خواهد بود که میتواند از این حجم عظیم داده را به بخش های کوچکتر تقسیم و هر بخش را بصورت مجزا برای پردازش به یک نود خاص در شبکه ابری ارسال نمایید. این کار علاوه بر کاهش زمان اجرا تاثیر بسزائی در کاهش هزینه های ناشی از فراهم کردن بستره مورد نیاز برای داده کاوی خواهد داشت.
اگرچه الگوریتم کلاسیک و موجود FP-growth برای اجرا در معیارهای موازی طراحی نشده است و نیاز به انجام تغییراتی در الگوریتم هست. همچنین الگوریتم های موازی برای کاوش قوانین انجمنی نیز موجود هست کد پیاده سازی این الگوریتم ها به دلیل برخورد ارتباط پردازش و همگام سازی بسیار دشوار است. از طرف دیگر برطرف کردن شکست های پی در پی ناشی از محاسبات فراوان بسیار دشوار است. با توجه به تعاریف ذکر شده تصمیم گرفتم برای فن کاوش قواعد انجمنی داده کاوی در داده های حجیم در سرعت بیشتر و به صورت موازی، از الگوریتم FP-growth درون محیط رایانش ابری استفاده نماییم.
هدف اصلی من در این تحقیق بررسی کارایی و عملکرد الگوریتم FP-growth در محیط رایانش ابری و در مواجهه با مجموعه داده های حجیم است و همچنین مقایسه این الگوریتم با الگوریتم های پیاده سازی شده از لحاظ سرعت اجرا و کارایی از اهداف دیگر این تحقیق میباشد.
برای بررسی مقیاس پذیری و کارایی سه الگوریتم AP riori و FP-growth و DynFP-growth را با هم مقایسه کردم و به نتایج زیر رسیدم : برای این منظور مجموعه داده هایی با تعداد و تراکنش 10000 تا 500000 و فاکتور پشتیبان بین 5% تا 40% مورد استفاده قرار گرفته.
آزمایش نشان میدهد زمان اجرای الگوریتم ها با بالا رفتن حجم مجموعه داده ها بالا میرود. بهترین کارایی توسط الگوریتم FP-growth بدست آمده است. زمان اجرای الگوریتم FP-growth با تغییر فاکتور پشتیبان از 40% تا 50% تقریبا ثابت است در حالی که این زمان برای الگوریتم AP riori شدیدا افزایش میابد. الگوریتم AP riori برای فاکتورهای پشتیبان بالای 30% بهتر است دو الگوریتم دیگر عمل میکند ولی برای فاکتورهای کمتر از 20% کارایی آن شدیدا کاهش میابد. در بین این سه الگوریتم با افزایش فاکتور پشتیبان کمترین زمان اجرای برای الگوریتم Dyn FP-growth است و بعد از آن الگوریتم FP-growth و در آخر الگوریتم AP riori . در انتها به این نتیجه میرسیم که الگوریتم هایی باشد. تولید کاندیدا ( مانند AP riori ) تنها برای پایگاه داده های کوچک حداکثر تا 500000 تراکنش و فاکتور پشتیبان بالا ( حداقل 30% ) خوب عمل میکند. یا در بیان دیگر الگوریتم های بدون تولید کاندیدا مانند FP-growth و Dyn FP-growth در پایگاه داده های حجیم بهتر عمل میکند.
Li و همکاران ( 2008 ) در دانشکده ی علوم دانشگاه سایمون فریزر، برای اولین بار الگوریتم کاوش قوانین انجمنی بدون تولید کاندید را معرفی کردند. در این مقاله یک درخت الگوی تکرار معرفی میشود که در واقع یک درخت پیشوازی برای ذخیره های فشرده شده است. سپس داده کاوی بر روی این درخت با سرورش اعمال میگردد :
1) مجموعه داده های بصورت فشرده به الگوریتم داده میشود که این باعث کاهش هزینه بالای اسکن های متعد از پایگاه داده میگردد.
2) الگوریتم معرفی شده از طریق تقسیم الگوی جدیدی استفاده میکند که هزینه ی بالای تولید تعداد زیاد کاندیدهارا از بین میبرد و دیگر نیازی به تولید کاندید نیست.
3) از روش مبتنی بر تقسیم divide and conqurer برای تقسیم وظایف کاوش و تبدیل آن به وظایف کوچکتر استفاده شده است.
کد الگوریتم به صورت C++ نوشته شده است. در انتها این الگوریتم را با الگوریتم AP riori مقایسه میکند. نتایج نشان میدهد کد سرعت اجرای الگوریتم پیشنهاد شده در هر فاکتور پشتیبان بیشتر از الگوریتم AP riori است. همچنین با کاهش فاکتور پشتیبان کارایی الگوریتم AP riori به شدت کاهش میابد.
Grossman and gu ( 2008 )، چهارچوب توزیع شده با کارایی بالا را به نام Seetor/sepher ارائه میدهند، این سیستم ابری جدید روشی برای تجزیه و تحلیل مجموعه داده های بزرگ ایجاد کرده است. در این سیستم برنامه ی کاربردی توزیع شده ای برای داده کاوی داده شده است. Seetor به منظور آماده کردن ذخیره گاه ماندگار بلند مدت به مجموعه داده های بزرگ کد به عنوان فایل های شاخص شده توزیعی مدیریت میشود طراحی شده است. بخش های مختلف فایل در طول ذخیره گاه توزیعی کد متوسط seetor مدیریت میشود و پراکنده شده است همچنین Seetor داده ها را درچندین جا ذخیره میکند تا به بدین طریق طول عمده داده را افزایش دهد، تاخیر در بازاریابی داده را کاهش دهد و امکان موازی سازی را فراهم آورد. Sepher به منظور اجرای موازی توابع تعریف شده توسط کاربر، با استفاده از یک الگوی پردازش توسط کاربر به صورت موازی بر روی تمام داده های قسمت شده اعمال میگردد در این تحقیق از 6 سرور با مشخصات سخت افزاری هرکدام پردازه ها double dual core 2.4gh2 ، 4GB RAM ، 2TB.Disk استفاده شده.
بیشترین نرم افزارهای مورد نیاز شامل هدوپ ، java sdr ، java jre است.
درانتها به مقایسه seetor / sepher و هدوپ پرداخته است و به این نتیجه رسیده کد این سیستم 4/2 تا 6/2 برابر سریعتر از هدوپ پردازش میکند.
در بررسی nari and madhur ( 2011 ) به دلیل استفاده ی بیش از حد از داده کاوی درون محیط رایانش ابری به منظور پایین آوردن هزینه های محاسبات و بالا بردن سرعت کار با استفاده از یک رویکرد داده کاوی به نام Hierar chical k-means با مشکل انبوده داده های تصفیه شده به منظور جمع آوری و یک پارچه کردن داده های مرتبط از چندین مرکز داده و واحد پردازش مختلف مقابله میکند در این مقاله کد رویداده های مربوط به بیمه کارشده است داده های همسان که در اینجا براساس گروه سنی مرتب شده اند، بر روی نت های مختلف روی ابر قرار میگیرند و این داده های .... عملکرد های ذخیره سازی مانند SAAS و PAAS و غیره در دامنه های مختلف میباشند. همچنین قوانین مرتبط با بیمه بر روی کلاستر هایی از نت های همسان قرار گرفته اند. کد این کلاستر ها بر اساس گره سنی ، قوانین را روی نود مورد نظر اعمال میکنند.
نتایج نشان میدهد که با استفاده از این رویکرد، مکان استخراج داده های مرتبط موجود در محیط رایانش ابری وجود دارد. بر حسب نتایج بدست آمده از داده کاوی، شرکت بیمه فروش ها و سرویس های خود را به صورت کارآمد تر و با هزینه و کارکمتری آنالیز خواهد کرد.
Hindman و همکاران (2011) در دانشگاه کالیفرنیای بروکلی چهارچوبی جدیدی به نام Mesos برای تقسیم کلاستر ها بین چندین چهارچوب محاسباتی مختلف مانند هدوپ و NPI ارائه کرده است. این نقطه تقسیم استفاده از کلاسترها را ارتقا میبخشد و از تکرار داده ها در هر چهارچوب جلوگیری مینماید. برای پشتیبانی از زمان بندهای پیچیده در چهارچوب های امروزی Mesos مکانیزم توزیعی زمان بندی و سطحی به نام پیشنهاد های منابع ارائه کرده است.
این چهارچوب تصمیم میگیرد که به هرچهارچوب چند منبع پیشنهاد دهد و سپس چهارچوب ها تقسیم میگردد که کدام منابع رو قبول کنند و چه محاسباتی بر روی آن ها انجام دهند. چهارچوب Mesos به زبان C++ نوشته اند.این چهارچوب تا 50000 نود مقیاس پذیراست و از Zookeeper برای تحمل پذیری خطا در آن استفاده شده است. برای ارزیابی این چهارچوب سرکلاستر با چهارچوب های هدوپ، Torque batch seheduler و MPI ایجاد شده است. همچنین چهارچوب جدید دیگری به نام SPARK ایجاد کرده، کد بر روی Mesos قرار دارد و به منظور انجام کارهای تکراری زمانی کد یک پایگاه داده، بارها در چندین عملیات موازی دوباره مورد استفاده قرار میگیرد و بهینه سازی شده است، آزمایش های به عمل آمده نشان داده شده است که Sporrk میتواند تا 10 برابر بهتر از حروف در عملیات تکراری ماشینهای یادگیری عمل کند.
در بررسی Wang و همکارانش ( 2014 ). ابتدا معایب پیاده سازی الگوریتم های AP rior و FP-growth با MAP Reduce را ذکر کرده است. در این مقاله آماده است که الگوریتم های
FP-growth پیاده سازی شده با MAP Reduce نیز از چندین رویه MAP Reduce استفاده و تعداد بسیار زیادی جفت < key.value > با مقدار یک تولید میکند. سپس به هدفی الگوریتم جدید خود به نام FI MMR میپردازد. این الگوریتم در هر تکه داده به دنبال مجموعه آیتم های مکرر به عنوان کاندید میگردد و سپس از استراتژی هرس کردن بر روی کاندیده ها استفاده میکند و در آخر از بین کاندیده ها مجموعه آیتم های مکرر سراسری را تشخصی میدهد و معرفی میکند. نتایج به دست آمده نشان میدهد که بهروری زمان در این الگوریتم بهتر از دو الگوریتم ذکر شده در قبل است. همچنین سرعت این الگوریتم به نسبت دو الگوریتم ذکر شده بهتر است این الگوریتم به زبان پایتون نوشته شده است و بر روی دو مجموعه ی داده تولید شده توسط مولد داده IBM اجرا شده است.
هدوپ :
هدوپ یک نرم افزار سورس باز ( Open Source ) است کد برای تقسیم بندی و توزیع فایل های متمرکز و حجیم به کار میرود این نرم افزار تحت لیسانس آپاچی ارائه میشود و توسط جاوا برنامه نویسی شده است. شرکت گوگل پی افزایش حجم تبادل اطلاعات به دنبال راه حلی برای افزایش سرعت و راندمان سرورهای خود بوده که سیستم توزیع منحصربه فردی برای خود به نام GFS ابداع کرد در پی این موفقیت انجمن توزیع آپاچی به فکر گسترش این فناوری در سطح وسیعتری افتاد و سیستم هادوپ به وجود می آمد.
هدوپ از دو بخش کلی به نام map-reduce و HDFS تشکیل شده است. این سیستم درواقع جهت اجرا بر روی چندین سرور طراحی شده است. سیستم بدین صورت عمل میکند که اطلاعات دریافت شده به صورت تکه تکه ( به طور پیش فرض بلاک های 64 بیتی ) در آمده و هرتکه در یک سرور جداگانه ذخیره میشود. در این سیستم یک سروربه عنوان سرور اصلی ( Master ) است که وظیفه کنترل سرور های دیگر ( SLAVE ) را به عهده دارد. بخش map-reduce نیز بر روی سرور اصلی اجرا میشود و بخش HDFS یا همان Hadoop Distributed Filesystem به روی سرورهای جانبی اجرا میشود. سرور های جانبی وظیفه ذخیره سازی اطلاعات را بر روی هارد دیسک های خود به عهده دارند. یعنی زمانی که کاربر دستور فراخوانی یک فایل را صادر میکند سرور اصلی از طریق آدرسهایی کد را در اختیار دارند بلاک های مورد نظر را از سرور های مختلف فراخوانی کرده و سپس از سرهم کردن و تکمیل کردن فایل آن را به کاربر تحویل میدهد. همچنین الگوریتم این برنامه طوری نوشته شده است که چندین نسخه کپی از بلاک ها بر روی دیگر سرورها قرار میگیرد و این امر دو مزیت بزرگ دارد : اول اینکه در مقابل حفاظ های سخت افزاری از قبیل سوختن هارد دیسک ، اشکالات سخت افزاری سرور ها و غیره در امان است و در صورتی که هر یک از سرور ها به دلایلی از شبکه خارج بشوند اطلاعات مورد نظر از روی سرورهای دیگر فراخوانی میشوند. مزیت دوم این قابلیت این است که دیگر نیزای به استفاده از فناوری RAID نیست و هر سیستم میتواند از حداکثر فضای هارد دیسک خود استفاده کند.
سیستم هادوپ در واقع برای ذخیره سازی و فراخوانی اطلاعات حجیم ( در حد گیگابایت ، ترابایت و یا حتی پتابایت ) مورد استفاده قرار میگیرد. این اطلاعات بیشتر شامل فایل و یا پردازش میباشد. برای مثال چندی قبل شرکت یاهو که بزرگترین سیستم هادوپ را در اختیار دارد موفق شد رقم 000/000/000/000/000/2 ام عدد پی و چند رقم قبل و بعد از آن را محاسبه کند. این عملیات کد بر روی 1000 سرور انجام گرفت به مدت 3روز به طول انجامید. در حالی که اگر این عملیات را بر روی یک سیستم اجرا کنیم حدود 503 سال به طول خواهد انجامید.
امروزه سامانه های هادوپ به شکل گسترده ای در شرکت های ارائه دهنده ابرمانند گوگل ، یاهو ، فیسبوک و بسیاری از شرکت های دیگر به منظور ذخیره داده های با حجم بالا ( HDFS ) ، پردازش موازی ( نگاشت – کاهش ) و غیره مورد استفاده قرار میگیرد.
نگاشت - کاهش :
نگاشت - کاهش چهارچوبی برای پردازش موازی مسائل با حجم بالای داده با استفاده از تعداد زیادی کامپیوتر ( نود ) است. محاسبات میتواند بر روی داده های بدون ساختار مانند فایل ها و یا بر روی داده های ساختار یافته مانند پایگاه های داده اعمال شود. نگاشت – کاهش این مزیت را دارد که میتواند از داده به صورت محلی استفاده کند و پردازش را بر روی همان سامانه ای که ذخیره گاه هست و یا در نزدیکی همان سیستم اعمال کند و بدین ترتیب هزینه ی انتقال بین فواصل دور را کاهش دهد. در مراحل ی نگاشت ، نود مستر ورودی را گرفته آن را به زیر مسئله های کوچکتر تقسیم میکند و آن را به سمت نود های کارگر ارسال مینماید. نود کارگر نیز میتواند به نوبه ی خود همین کار را تکرار کند و به شکل یک ساختار درختی چند سطحی در بیاید هر نود کارگر مسئله ی کوچکتر منتسب به خود را حل کرده و جواب را به نود مستر خود برمیگرداند در مرحله ی کاهش ، نود مستر تمام جواب های مربوط به زیر مسئله ها را جمع آوری میکند و آن ها را به منظور شکل گیری خروجی نهایی به نحوی ادغام مینماید.
به بیان دقیقتر، نگاشت – کاهش در هر کلاستر شامل تنها یک نود مستر پیگیر JOB و یک نود کارگر پیگیر TASK است. نود مستر وظیفه ی تقسیم JOB به چندین TASK و ارسال آن به نود های کارگر ، کنترل آن ها و اجرای مجدد TASK هایی که با خطا مواجه شده اند را دارا میباشد. تعداد دفعات برای اجرای مجدد یک JOB قابل تنظیم است و نود های کارگر هر تعداد بار کد نود مستر از آن ها بخواهد یک TASK را انجام خواهد داد. چهارچوب نگاشت – کاهش منحصرا بر روی یک جفت < key.value > عمل میکند . این بدین معنیست که چهارچوب ورودی یک JOB را به صورت مجموعه ای از حقیقت های < key.value > میبیند و مجموعه ای از جفت های < key.value > را به عنوان خروجی JOB ایجاد مینماید. نیازی نیست که خروجی نگاشت و خروجی کاهش از یک نوع باشد. خروجی کاهش میتواند به عنوان رورودی یک تابع نگاشته دیگر ( متفاوت ) مورد استفاده قرار گیرد و بدین طریق الگوریتم نگاشت – کاهش طی چند مرحله کامل میشود.
سرویس های تحت وب آمازون :
چون تصمیم دارم از سرورهای آمازون برای پیاده سازی این پروژه استفاده کنم توضیحاتی راجع به سرویس های تحت وب آمازون را آورده ام :
در سال 2006 سرویس های تحت وب آمازون اقدام به ارائه ی ساختار های IT برای شرکت های تجاری در قالب سرویس های تحت وب کرددر حال حاضر با نام رایانش ابری مرسوم شده است. این سرور ها در بیش از 10 نقطه جغرافیایی در سرتاسر دنیا مقیم شده است. اصلی ترین نقطه ی جغرافیایی برای سرور های شرق آمریکا ( ویرجینای شمالی ) است که عمده سرورهای AWS در آنجا قرار دارد. در اولین سرویس AWS که برای عموم ارائه گردید سرویس ساده صف بندی بود که در سال 2004 معرفی شد. امروز سرویس های تحت وب آمازون زیر ساخت های به شدت قابل اطمینان ، مقیاس پذیر و کم هزینه ای را در محیط ابری ارائه میدهند که صدها هزار شرکت در سرتاسر دنیا از آن استفاده مینمایند. این سرویس ها هزینه ی بسیار پایینی دارند و هرکاربر تنها برای استفاده از سرویس ها پول پرداخت میکند. این سرویس ها از لحاظ ایمنی و امنیت در سطح بالایی هستند و دارای گواهی نامه های :
PCI DSS level1 ، ISO 27001 ، FLSMA Moderate ، HIPAA ، SAS 70 type2 میباشند.
AWS دارای چندین سرویس مختلف است .( Amazon Web Services )، سMA Moderate ظ ایمنی و امنیت در سطح بالایی هستند و دارای گواهی نامه یس ها پول پرداخت میکند. این دهند که صدها هزار شرکت در سرتا
پیاده سازی الگوریتم fp-growth با متد نگاشت – کاهش
این الگوریتم را جهت موازی سازی و تقسیم همزمان کار بین سرورهای موجود در شبکه ابری با متد نگاشت – کاهش مینویسیم.
برای پیاده سازی الگوریتم fp-growth که به صورت سریال و برای اجرا بر روی یک نود نوشته شده است ، از کتابخانه متن بازی بنام SPMF استفاده میکنیم.این کتابخانه به زبان جاوا نوشته شده است و شامل پیاده سازی 75 الگوریتم مختلف داده کاوی میباشد.برای استفاده از این ماژولها تنها کافیست فایلهای آن شامل تمام ماژولها ، را درون پوشه کد برنامه خود قرار بدهیم و از توابع آن درون برنامه خود استفاده نماییم.قابل ذکر است که در میان تمام الگوریتمهای موجود در این کتابخانه ، الگوریتم fp-growth به عنوان سریعترین و کارامدترین الگوریتم از لحاظ استفاده از حافظه معرفی شده است .برای موازی سازی الگوریتم و امکان اجرا بر روی جندین نود از هدوپ استفاده میکنیم .هدوپ ورودی دریافت شده را به صورت تکه تکه در آورده و هر تکه را در یک سرور جداگانه ذخیره میکند.بخش mapreduce بر روی سرور اصلی اجرا میشود و بخش HDFS بر روی سرور های جانبی اجرا میگردد.سرورهای جانبی وظیفه ذخیره سازی اطلاعات را بر روی هارد دیسکهای خود بر عهده دارند.یعنی زمانی که یک کاربر دستور فراخوانی یک فایل را صادر میکند سرور اصلی از طریق آدرسهایی که در اختیار دارد بلاکهای مد نظر را از سرورهای مختلف فراخوانی کرده و پس از سر هم کردن و تکمیل کردن فایل ، آن را به کاربر تحویل میدهد .استفاده از هدوپ همچنین مزیت تکرار داده را دارد . الگوریتم این برنامه طوری نوشته شده است چندین نسخه کپی از بلاکها بر روی دیگر سرورها قرار میگیرند و این امر دو مزیت بزرگ دارد .اول اینکه در برابر خطاهای سخت افزاری از قبیل سوختن هارد دیسک ، اشکالات سخت افزاری سرورها و غیره محافظت میشود و در صورتی که هر یک ار سرورها به هر دلیلی از شبکه خارج شوند ، اطلاعات مورد نظر از روی سایر سرورها میتواند فراخوانی شود . مزیت دوم این است که دیگر نیازی به استفاده از تکنولوژیRAID نیست و میتوان از حد اکثر فضای هارد دیسک در هر سرور استفاده کرد. دو کلاس اصلی بنام های my mapper و my reducer و شش تابع اصلی run,run fp-growth, map,reduce, readfile,file-number طراحی و پیاده سازی شده است.
کلاس my mapper وظیفه مدیریت اجرای الگوریتم بر روی داده های توزیع شده بین نودها را بر عهده دارد.این کلاس ابتدا داده ها را گرفته و اقدام به تقسیم داده میکند سپس داده های تقسیم شده را در اختیار هدوپ قرار میدهد.هدوپ مجموعه داده را بر روی HDFS قرار میدهد سپس تابع run-fpgrowth را فراخوانی میکند. در انتها نیز تابع map جهت جمع آوری تمام نتایج فراخوانی میکند.
تابع run-fpgrowth که کار این تابع اجرای الگوریتم fp-growth بر روی داده های تخصیص داده شده به هر نود است .در این تابع از شی ALGO fp-growth یک نمونه ساخته میشود و سپس متد run algorithm این شی با سه پارامتر input , out put , minsup اجرا میشود.
تابع map تابعی است که ورودی اصلی را برای هدوپ به چند قسمت تقسیم میکند و در یک فایل میریزد و سپس بر روی فایل الگوریتم را اجرا میکند و در آخر خطوط داخل فایل متنی پاک میشود.
کلاس my reducerخروجی بدست آمده از هر نود هسته که به صورت موقت درون HDFS ذخیره میشود را جمع آوری و سپس تمام خروجیها را در یک فایل متنی ادغام میکند در نهایت خروجی نهایی در پوشه out put درون S3 بطور دایم ذخیره میشود.
تابع reduce که متن هر فایل را در خروجی نهایی ریخته و ذخیره میکند .
تابع run یه شی از متغیر job میسازد که در واقع همان myreduce است یک کلاس mapper یک کلاس reduce و یک کلاس کلی میگیرد .این تابع در حقیقت از برنامه میپرسد که چه فایلی را بگیرم ، چه عملیاتی بر روی آن انجام بدهم ور در انتها چه فایلی را به عنوان خروجی بدهم.همچنین دستور میدهد که برنامه هر کاری که در دو کلاس mapper و reduce قرار دارد را انجام دهد .در غیر اینصورت برنامه کاری انجام نخواهد داد.
تابع readfile خطهای ورودی را میخواند و تمام ورودی را به صورت آرایه های از فایلها در می آورد.
تابع file-number نیز تعداد خطوط ورودی را تعیین میکند و بر حسب تعداد نودها تعداد خطوط مشخصی را به هر نود اختصاص میدهد.استفاده از این الگوریتم در بهبود سرعت الگوریتم در محیط هدوپ کارامد خواهد بود.زیرا دیگر نیازی به مدیریت هدوپ جهت تقسیم داده نیست و این بخش سربار زمانی را کاهش خواهد داد.
ایجاد یک جریان کاری برای اجرای الگوریتم نگاشت-کاهش
EMR سرویس تحت وبی است که پردازش حجم بالایی از داده را به صورت سریع و کم هزینه امکان پذیر میسازد.این سرویس به منظور توزیع داده های کاربر و پردازش آنها بر روی یک کلاستر EC2 قابل تنظیم از لحاظ تعداد ، از چهارچوب متن باز هدوپ استفاده میکند.تدارکات کلاستری شامل چهارچوب هدوپ ، اجرا و خاتمه وظایف و مدیریت جابجایی داده ها بین EC2و S3 بر عهده این سرویس آمازون است.استفاده از این سرویس آمازون بسیار ساده و سریع است.
به صفحه کنسول بر میگردیم و بر روی آیکون Elastic mapreduce کلیک میکنیم.در صفحه بر روی دکمه create a new job flow میزنیم.برای برنامه خود نامی دلخواه استفاده میکنیم.گزینه run your own application را جهت اجرای برنامه خود انتخاب کرده و نوع برنامه خود را custom jar در نظر میگیریم.در مرحله بعد مکان فایل jar برنامه که در پوشه job در باکت S3 قرار دارداز ما پرسیده میشود.آرگومانهای مورد نیاز برای اجرای برنامه ، مانند مکان ورودیها و ... را نیز وارد میکنیم.در مرحله آخر تنظیمات کلاستر شامل تعداد نودها ، نوع کلاستر ، مسیر پوشه لاگ فایل، تعداد نودهای مستر و کارگر را انجام داده و در نهایت دکمه create cluster را به منظور ایجاد کلاستر میزنیم.در صفحه جدید وضعیت ایجاد کلاستر و سپس وضعیت انجام و پیشرفت کار نشان داده میشود.پس از اجرای کار نتایج درون پوشه result در S3 ذخیره میگردد و ما میتوانیم کلاستر ایجاد شده را خاتمه دهیم تا از هزینه های اضافی جلوگیری شود.
خلاصه و نتیجه گیری
رایانش ابری یکی از مسایل به روز و رو به رشد دنیای اینترنت است که استفاده از آن روز به روز در حال گسترش است و اگرجه در ابتدا تنها شرکتها امکان استفاده از این سرویسها را داشتند لیکن امروز تعداد استفاده کنندگان شخصی نیز رو به افزایش است.در واقع ماموریت اصلی سرویسهای ابری کاهش هزینه های ناشی از خرید سخت افزار ، نصب و پیاده سازی نرم افزارها، چهارچوبها و سیستم عاملهای مختلف میباشد.هدف از این تحقیق در وهله اول معرفی این سرویسها و استفاده از آن در کشورهایی نظیر ایران است که هنوز جای خود را آن طور که باید در این کشور پیدا نکرده و به درستی از آن استفاده نشده است.
در تحقیق جهت بهبودی الگوریتم fp-growth در محیط رایانش ابری ، تغییراتی را در این الگوریتم به کمک متد نگاشت-کاهش اعمال کردیم.مشخص شد که این الگوریتم بهبود یافته در تمام موارد سرعت عمل بهتری نسبت به الگوریتم بکار رفته در بررسی Li وهمکاران (2012) ، بر روی دو مجموعه داده ای مورد تست دارد.
هزینه تلفیق الگوریتم در محیط رایانش ابری نسبتا کم است ، کارایی الگوریتم نسبت به الگوریتم Apriori تست شده در مقاله Li و همکاران (2012) بر روی همان دو مجموعه داده بهتر است.
از آنجایی که اصلی ترین مسئله در داده کاوی داده ها سرعت و پایین آوردن زمان اجراست ، و چون مشکلات جمع آوری نتایج و ادغام آنها که در روش نگاشت -کاهش وجود دارد باید در روشهای جدیدتری مورد بررسی قرار گرفته تا این مشکلات نیز حل شود.