سامانههای پردازش جریان : اسپارک
در ادامه بررسی سامانههای موجود برای پردازش دادههای جریانی (Stream Processing Frameworks) ابتدا معیارهای مختلف مقایسه و امکانات کلی این سیستمها را مرور میکنیم و به عنوان اولین و معروفترین سامانه پردازش جریان متنباز دنیا، با امکانات پردازش جریان چارچوب اسپارک آشنا خواهیم شد.
مروری بر امکانات و قابلیتهای مورد نیاز
قبل از انتخاب یک سامانه جریانپرداز در معماری پیشنهادی و به طور خاص برای کاربرد جمعآوری داده از شبکههای اجتماعی نیاز به تعیین نوع اصلی این سامانه داریم. در ادبیات امروزه پردازش جریان، با چهارنوع مختلف از سامانهها یا موتورهای پردازشی جریان سروکار داریم :
- جمع آوری داده : هدف اصلی این سامانهها پردازش دادهها نیست فقط کتابخانههایی برای خواندن دادهها و ارتباط بین آنها فراهم میکنند مانند NiFi و Flume که به آنها اختصاراً (Data Collection)DC می گوییم .
- پردازش تک رخداد (SEP – Single Event Processing) : این سامانه ها برای پردازش یک رخداد، طراحی شده اند که معمولاً مکانیزم ساده ای هم دارند.
- پردازش جریان رخدادی (ESP – Event Stream Processing ): این سامانهها برای پردازش همزمان چندین رخداد و واکنش مناسب به آنها بوجود آمدهاند که نسبت به گروه قبلی پیچیدگی بالاتری دارند.
- سامانه های مجتمع پردازش رخداد (CEP – Coplex Event Processing): این سامانه ها بسیار کامل بوده و برای تمامی حالت های مختلف پردازش جریان مکانیزم های مناسبی را ارائه می کنند.
با این توضیحات وقبل از اینکه سیستمهای مختلفی که امروزه توسط شرکتهای مختلف ایجاد شده و نهایتاً متن باز گشته و در اختیار جامعه تحلیلگران و دانشمندان داده قرار گرفته اند را بررسی کنیم، بهتر است ابتدا معیارها و قابلیت هایی که یک سامانه جریان پرداز مدرن باید داشته باشد را بررسی کنیم.
می توانیم معیارهای زیر را به عنوان ملاکهای ارزیابی در نظر بگیریم :
- Back Pressure : منظور میزان فشار و باریست که برای پردازش جریان ، بر سیستم وارد می شود و مجموعه میزان مصرف رم و سی پی یو و … را تشکیل می دهد.
- Auto-Scaling : یا مقیاسپذیری افقی ناظر به گسترش افقی سامانه است؛ یعنی به جای ارتقای سختافزاری یک سرور که به آن مقیاسپذیری عمودی گفته میشود، بتوان به راحتی و با افزودن یک گره محاسباتی جدید (یک سرور یا حتی یک کامپیوتر ساده یا یک سیستم مجازی)، توان محاسباتی سامانه را گسترش داد و بخشی از پردازش را به این سیستم جدید منتقل کرد. به مقیاسپذیری خودکار، مقیاسپذیری پویا، مقیاسپذیری کشسان(الاستیک)، اختصاص خودکار منابع و نهایتاً بالانس خودکار کار هم گفته میشود.
- In Flight Modification : قابلیت تغییر دادهها بدون نیاز توقف سیستم یا ارسال مجدد آنها
- Event Size : منظور این است که هر رخداد جداگانه بررسی می شود (Single)یا هر چند تا رخداد با هم دیگر یک دسته را تشکیل داده و باهم پردازش میشوند. (MicroBatch)
- Delivery Guarantees : گارانتی تحویل که نحوه تضمین پردازش هر رخداد را بیان می کند و بسته به نیاز و نوع کاربرد، متفاوت است و قبلا در فصل سوم به آن اشاره کردیم. به عنوان مثال برای پردازش سنسورهای غیرحیاتی، تضمین حداکثر یک بار هم کفایت می کند اما برای داده های حساس، پردازش و بررسی رخدادها باید حداقل یک بار صورت گیرد.
- تعداد توسعه گران : برای اعتماد کامل به یک پروژه، هم از لحاظ ادامه یافتن کار و هم رفع سریع مشکلات و توسعه امکانات جدید برای آن، تعداد توسعهگران یک سامانه هم میتواند یک عامل فرعی برای انتخاب نوع سیستم پردازش جریان باشد
- مدیریت حالت : اگر هنگام پردازش جریان، نیاز به دانستن وضعیت قبلی سیستم داشته باشیم، باید مکانیزمهایی برای مدیریت حالت و وضعیتهای مختلف سیستم در نظر بگیریم. بخصوص زمانی که نیاز به بازگشت به نقطه خاصی از زمان داشته باشیم، این امر ضرورت خود را نشان میدهد. برخی از سیستمها این کار را کلاً برعهده برنامهنویسان گذاشتهاند، برخی از سامانهها از ایجاد نقاط بازرسی در طول زمان استفاده میکنند که به آنها نقشاب یا watermark هم میگوئیم ، گروهی دیگر از تصاویر لحظهای استفاده میکنند.
با هدف سهولت تصمیم گیری مهندسین داده، وبلاگ DataBaseLine در اقدامی تحسین برانگیز، این فناوریها را در یک جدول با هم مقایسه کرده است که آنرا در زیر می توانید مشاهده کنید.
آپاچی اسپارک
اسپارک در حال حاضر یکی از داغ ترین فناوری حوزه کلانداده است. کتابخانهای که به دلیل سرعت بالا و قابلیتهای پردازش درون حافظهای آن در کنار وجود مستندات زیاد و توابع API کامل، هم محبوب توسعهگران و برنامه نویسان و هم دانشمندان علوم داده شده است.
ساختمان داده اصلی مورد استفاده در اسپارک، RDD یا مجموعهدادههای برگشتپذیر است. هر RDD یک مجموعه داده فقط خواندنی توزیع شده در شبکهای از سیستمهاست که مکانیزمهای درونی برای تحمل خطا و رفع خرابی دارد. هدف اصلی طراحی اسپارک، غلبه بر محدودیتهای پردازشی روش سنتی توزیع و تجمیع (map/reduce) از طریق قراردادن مجموعهدادهها در حافظه (از طریق معماری حافظه مشترک توزیع شده) و اجرای برنامهها بر روی این حافظه بوده است.
اسپارک ادعا میکند در پردازش های درونحافظهای (زمانی که حجم مجموعهداده تحت پردازش از حافظه موجود سیستمهای شبکه کمتر است)، ۱۰۰ برابر سریعتر از روش توزیع/تجمیع و در پردازشهای ترکیبی (حافظه/دیسک) ۱۰ برابر سریعتر از آن است که عدد قابل اعتنا و دلیلی برای محبوبیت این چارچوب همه منظوره پردازشی است.
http://spark.apache.org
اسپارک با زبان اسکالا نوشته شده است اما زبانهای مختلفی را پشتیبانی میکند. نقطه قوت دیگر اسپارک، پشتیبانی از انواع منابع داده مانند فایلهای HDFS، کاساندرا، HBase و آمازون S3 است یعنی میتواند RDD خود را از روی این منابع بسازد و در حافظه به پردازش آنها به صورت توزیع شده بپردازد.
برای اجرای کدهای اسپارک به دو مولفه اصلی نیاز داریم . یکی درایور (هماهنگ کننده یا مدیربرنامه)که وظیفه توزیع و مدیریت کارها را بر عهده دارد و دومی، مولفه اجرا کننده (Worker) که کارهای محاسباتی و پردازشی را انجام داده و نتیجه را به هماهنگ کننده یا درایور برمیگرداند. به صورت فنی تر اگر بخواهیم صحبت کنیم، هر درخواست پردازش از سمت کاربر یک Job را تشکیل می دهد که به درایور اسپارک تحویل داده میشود . درایور اسپارک، این درخواست پردازشی را به چندین وظیقه Task تقسیم کرده بین اجرا کننده ها توزیع می کند . اجرا کننده ها (Workers) معمولاً درون یک کلاستر (شبکه بهم پیوسته) قرار دارند. Task ها بعد از اتمام، نتایج را به درایور یا مدیربرنامه تحویل می دهند.
شکل زیر یک کلاستر اسپارک را مطابق با توضیحات بالا نمایش می دهد که در آن هسته های اختصاص داده شده به یک برنامه با خط چین بنفش مشخص شده اند.
در اسپارک، همیشه کار خود را با یک مجموعه داده ی پایه (Base RDD) که قرار است پردازشی روی آن انجام دهیم، شروع می کنیم. اگر این مجموعه داده توزیع شده برگشت پذیر یا همان RDD که ساختمان داده اصلی در اسپارک است، وجود نداشت به راحتی از روی داده های موجود مانند داده های موجود در HDFS، بانکهای اطلاعاتی، فایلها و سایر منابع دادهای، آنرا ایجاد خواهیم کرد.
پردازش اصلی داده های ما در اسپارک مجموعه عملیات و تبدیلاتی است که روی این RDD پایه،انجام خواهیم داد و چون در فرهنگ اسپارک، یک RDD تغییر ناپذیر است، با هر تبدیل یا انجام یک عملیات، یک RDD جدید ایجاد خواهد شد تا زمانی که به جواب مورد نیاز خود رسیده و پردازش ما به اتمام برسد.
مراجعه کنید به مقاله : مفاهیم پایه اسپارک در همین سایت
اسپارک دارای پیاده سازی بسیار بهینه و کارآمدی از تبدیل ها و عملیات مورد نیاز داده پردازی است. البته نقطه قوت اصلی اسپارک در توزیع این عملیات پردازشی در یک کلاستر (شبکه ای سیستم ها) و پنهان کردن جزییات و مسایل فنی آن از دید برنامهنویس و استفادهکننده است.
پردازش جریان با اسپارک
مولفه جریانپرداز اسپارک (Spark Streaming) به عنوان یک مولفه جدید در اکوسیستم اسپارک میتواند انتخاب مناسبی در ساخت یک سامانه پردازشگر جریان باشد چون افرادی که قبلاً با اسپارک کارکرده اندو با توابع و مفاهیم آن آشنا هستند، برای پردازش جریانهای ورودی هم میتوانند از این کتابخانه ارزشمند استفاده کنند.
این امر باعث میشود توسعه گران و برنامهنویسان بتوانند کدهای یکدست و یکپارچهای برای مدیریت دادههای موجود و دادههای در حال ورود به سامانه، ایجاد کنند و در صورت نیاز، پرس و جوهای خود را روی جریان دادههای ورودی اعمال کنند. به این ترتیب امکان ساخت برنامههای محاورهای تحلیل داده روی حجم بالای داده (زمانمند/جریانی) فراهم میشود. (در اسپارک به راحتی و با خط فرمان آن، میتوانید به صورت محاورهای و قدم به قدم به پردازش دادهها بپردازید)
البته مکانیزم اسپارک در پردازش جریان، ساخت ریزگروه (micro-batch) از چند رخداد در حال ورود به سیستم و پردازش هر ریزگروه، به صورت جداگانه است. بنابراین در اسپارک، هر رویداد یا جریان مستقلاً و به تنهایی پردازش نمیشود هر چند اندازه کم جریانهای تشکیل دهنده یک ریزگروه، امکان پردازش تقریباً بلادرنگ را فراهم میکند و این خود نقطه قوتی برای اسپارک در مقایسه با سایر چارچوبهای موجود است.
نکته دیگر در مورد اسپارک این است که میتواند روی خوشههای موجود mesos و هدوپ هم کار کند. با این ترتیب، اگر قبلاً دادههایی دارید که در HDFS ذخیره کرده اید، با اجرای اسپارک، امکان تحلیل تعاملی و محاورهای آنها را در اختیار خواهید داشت.
ترکیب اسپارک و کافکا (در ادامه توضیح داده خواهد شد)، برای ساخت سامانههای بلادرنگ پردازش داده، بسیار عالی و کارآمد ظاهر شده است. اسپارک با تمرکز بر مقیاسپذیری و کارایی به گونه ای طراحی شده است که با استفاده از آن می توانید به توسعه ی راه حل خود با استفاده از یک مجموعه داده ی کوچک بر روی رایانه شخصی تان پرداخته و سپس با استفاده از همان کد به پردازش مجموعه ای ترابایتی یا حتی پتا بایتی در سرتاسر یک خوشه ی (کلاستر) توزیع شده بپردازید.
در مقاله بعدی به بررسی آپاچی استورم و نسخه جدیدتر آن یعنی آپاچی هرون خواهیم پرداخت.
با سلام ، بسیار عالی و خیلی ممنون از مطالب خوبتون ،
یه سوال واسم پیش اومد ، اینکه درسته که مولفه spark streaming یکی از مولفه های آپاچی اسپارک هست ، ولی چه کاری رو انجام میده که خود آپاچی اسپارک انجام نمیده ؟
من برداشتم این بوده که آپاچی اسپارک خودش کار پردازش جریانی رو انجام میده ، و حالا در کنارش یک سری مولفه و کتابخانه هم داره واسه کارای اضافی و خاص ، که مولفه جریان پرداز اسپارک یکی از اون هاست ، واسه همین برداشت، این سوال واسم پیش اومد که کاری که فلسفه ی وجودی خود اسپارک بر اون بنا شده که همون پردازش جریان های داده هست ، و خودش اون رو انجام میده ، رو چرا باز در قالب یک مولفه ی اضافی در آپشن های جانبی خودش ارائه داده ؟ و یا به بیان راحت تر تفاوت کاری و نتیجه ای اسپارک و مولفه جریان پرداز اسپارک چی هست !
و بدون در نظر گرفتن مولفه ی جریان پرداز اسپارک ، آیا آپاچی اسپارک باز هم کار پردازش جریان هار داده رو می تونه انجام بده ؟
و اینکه این مولفه های spark streaming , MLlib, spark mysql و graphx اجزای سازنده ی آپاچی آسپارک هستند یا آپشن ها و توابعی آماده جهت استفاده ی کاربران برای مقاصد مورد نظرشون بدون نصب و استفاده از خود آپاچی اسپارک برای راحتی کار ؟
متشکرم
سلام ، خسته نباشید ،
تشکر بسیار بابت سایت و مطالب خیلی خوبتون ،
در سایتتون از اپاچی سامزا مطالبی ارایه نفرمودین ؟
ممنون. متاسفانه برای این کتابخانه مطلبی هنوز آماده نشده است.