کدام موتور پردازشی هدوپ را باید استفاده کنیم ؟
امروزه و در میانه سال ۲۰۱۵ دیگر پردازش ها در حوزه کلان داده محدود به HDFS و رهیافت نگاشت و تجمیع (Map Reduce) نیست بلکه اکوسیستمی کامل از فناوریهایی مختلفی شده است که برای تحلیل انواع داده در مقیاس وسیع به آنها نیاز داریم و مجموعه وسیعی از ابزار و کتابخانه ها و مدل های پردازشی را در بر میگیرد. مطمئناً این تنوع در فناوریها و ابزارهای مختلف، انتخاب ابزار درست برای افراد مبتدی و متوسط را سخت می کند و عدم آشنایی با فناوریهای نوین، ممکن است به شکست یا بازدهی پایین سامانه های تحلیل و پردازش کلان داده منجر شود .
مباحث جدیدتری مانند داده های جریانی (Stream مانند کلیک کاربران روی مطالب سایت و داده های حسگرهای الکترونیک که همواره در حال تولید و ذخیره شدن هستند ) و انواع کتابخانه ها و ابزارهای لازم برای پردازش آنها که معمولاً هر یک نیز از یکی از شرکتهای بزرگ حوزه وب مانند آمازون، گوگل، یاهو و …. نشات گرفته است و معماریهای مختلفی هم دارد، به این مساله دامن می زند .
برای کمک به انتخاب درست شما (البته این توصیه ها عمومی هستند و ممکن است در یک مورد خاص شما انتخاب بهتری هم داشته باشید) چهار نکته را برای انتخاب موتور پردازشی (کتابخانه یا ابزار اصلی تحلیل و جمع آوری داده ) مناسب، مد نظر داشته باشید :
-
به صورت پیش فرض از اسپارک استفاده کنید مگر اینکه داده های شما جریانی باشد :
اگر یک پروژه جدید را در حوزه پردازش کلان داده شروع می کنید، توصیه ما استفاده از اسپارک، HDFS و YARN است . البته اسپارک را می توانید بدون این دو بخش مکمل هم اجرا کنید و مثلاً به جای ذخیره و بازیابی اطلاعات در HDFS از بانکهای اطلاعاتی NoSQL استفاده کنید و یا در حالت حرفه ای تر، اسپارک را با Mesos (یک سیستم مدیریت توزیع شدگی با پنهان کردن تمام اجزای شبکه از دید کاربر) یا Kubernetes (یک سیستم مدیریت محفظه های داکر برای توزیع برنامه ها در یک شبکه ) اجرا و مدیریت کنید. دلیل انتخاب و پیشنهاد اسپارک، سرعت بیشتر آن نسبت به نگاشت و تجمیع، رایج تر بودن و داشتن جامعه پشتیبان بیشتر نسبت به فلینک و نهایتاً راحت بودن توسعه دهندگان با کنسول اسپارک و داشتن ابزارهای پردازش تعاملی مانند IPython و زپلین است و تنها ایرادی که می توان در حال حاضر از آن گرفت عدم پشتیبانی مناسب از اسپارک در خدمات رایانش ابری است. اگر نیاز به پردازش داده های کاملاً بلادرنگ و جریانی در حد تک تک رخدادها داشته باشید، اسپارک گزینه مناسبی برای شما نخواهد بود.
-
در سال ۲۰۱۵ هم ممکن است نیاز به نوشتن برنامه های نگاشت و تجمیع و یا استفاده از TEZ داشته باشید :
نقطه قوت اصلی اسپارک در استفاده آن از پردازش های درون حافظه ای است و اگر حجم داده های شما بسیار بیشتر از رم باشد و اسپارک هم نتواند آنرا مدیریت کند، سرعت پردازش شما بسیار کاسته خواهد شد. اینجاست که بهتر است به سراغ روش نگاشت و تجمیع بروید و نهایتاً از آپاچی TEZ استفاده کنید که مدیریت کارهای شما سریعتر و بهینه تر انجام پذیرد.
-
اگر نیاز به پردازش بلادرنگ با کمترین تاخیر دارید به سراغ Storm بروید :
اگر پردازش داده های جریانی شما با چند ثانیه تاخیر هم بتواند انجام شود، اسپارک و بخش Spark Streaming را انتخاب کنید اما اگر نیاز به پردازش واقعاً بلادرنگ و با حداکثر سرعت را دارید، Storm گزینه مناسب تری است. یا اگر نیاز به پردازش تک تک رخدادهای جریانی مثلاْ پردازش هر کلیک به صورت جداگانه دارید، باز هم Storm گزینه بهتریست . دلیل این امر هم این است که مکانیزم پردازش جریان در اسپارک، پردازش MicroBatch یا پردازش دسته ای سریع است که در آن چندین رخداد با همدیگر یک مجموعه یا Batch را تشکیل می دهند و تمام مجموعه با هم به بخش پردازش ارسال می شود .
-
فلینک را هم به عنوان یک گزینه خوش آتیه در نظر داشته باشید :
ایده فلینک بسیار جذاب است : این که پردازش جریانی و لحظه ای و پردازش دسته ای را با هم ترکیب کند (ترکیب اسپارک و روش نگاشت و تجمیع) و مدیریت حافظه مناسبتری هم نسبت به بقیه رقبایش ارائه کند. آینده فلینک را بسیار درخشان می دانم بخصوص برای جاهایی که ساختار داده های شما کاملاً مشخص است و خودتان می توانید مکانیزم مدیریت حافظه اختصاصی خود را تعریف کنید که در این جا بهتر است سراغ فلینک بروید. اسپارک و استرم امروزه فقط روشهای رایجتر و باثبات تری هستند و جامعه پشتیبان خیلی خوبی هم دارند اما با گسترش جامعه کاربری فلینک و رفع مشکلات اولیه آن، گزینه بسیار مناسبی برای پردازش های بلادرنگ و معمول حوزه کلان داده خواهد بود.
البته روشهای پردازشی بسیار متنوعی برای کلان داده و هدوپ پیشنهاد شده است که نکات بالا با درنظر گرفتن میزان رواج و بلوغ فناوریها ارائه شده است و گرنه ممکن است گزینه های بهتری هم برای نیاز خودتان بتوانید پیدا کنید .