آموزش و یادگیریابزار و کتابخانه هاچارچوب های پردازش کلان دادهداده‌های جریانیکلان داده

سامانه‌های پردازش جریان : اسپارک

در ادامه بررسی سامانه‌های موجود برای پردازش داده‌های جریانی (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) به عنوان یک مولفه جدید در اکوسیستم اسپارک می­تواند انتخاب مناسبی در ساخت یک سامانه پردازشگر جریان باشد چون افرادی که قبلاً با اسپارک کارکرده اندو با توابع و مفاهیم آن آشنا هستند، برای پردازش جریان‌­های ورودی هم می­توانند از این کتابخانه ارزشمند استفاده کنند.

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

معماری سامانه پردازش جریان اسپارک (منبع) – هر چند رخداد به یک RDD تبدیل شده و توسط هسته اصلی اسپارک تحلیل می‌شوند

البته مکانیزم اسپارک در پردازش جریان، ساخت ریزگروه (micro-batch) از چند رخداد در حال ورود به سیستم و پردازش هر ریزگروه، به صورت جداگانه است. بنابراین در اسپارک، هر رویداد یا جریان مستقلاً و به تنهایی پردازش نمی­شود هر چند اندازه کم جریان­های تشکیل دهنده یک ریزگروه، امکان پردازش تقریباً بلادرنگ را فراهم می­کند و این خود نقطه قوتی برای اسپارک در مقایسه با سایر چارچوب­های موجود است.

نکته دیگر در مورد اسپارک این است که می­تواند روی خوشه‌­های موجود mesos و هدوپ هم کار کند. با این ترتیب، اگر قبلاً داده‌­هایی دارید که در HDFS ذخیره کرده اید، با اجرای اسپارک، امکان تحلیل تعاملی و محاوره­‌ای آنها را در اختیار خواهید داشت.

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

در مقاله بعدی به بررسی آپاچی استورم و نسخه جدیدتر آن یعنی آپاچی هرون خواهیم پرداخت.

مجتبی بنائی

دانشجوی دکترای نرم‌افزار دانشگاه تهران (yun.ir/smbanaie)، مدرس دانشگاه و فعال در حوزه توسعه نرم‌افزار و مهندسی داده که تمرکز کاری خود را در چند سال اخیر بر روی مطالعه و تحقیق در حوزه کلان‌داده و زیرساخت‌های پردازش داده و تولید محتوای تخصصی و کاربردی به زبان فارسی و انتشار آنها در سایت مهندسی داده گذاشته است. مدیریت پروژه‌های نرم‌افزاری و طراحی سامانه‌های مقیاس‌پذیر اطلاعاتی از دیگر فعالیتهای صورت گرفته ایشان در چند سال گذشته است.

۳ دیدگاه

  1. با سلام ، بسیار عالی و خیلی ممنون از مطالب خوبتون ،
    یه سوال واسم پیش اومد ، اینکه درسته که مولفه spark streaming یکی از مولفه های آپاچی اسپارک هست ، ولی چه کاری رو انجام میده که خود آپاچی اسپارک انجام نمیده ؟
    من برداشتم این بوده که آپاچی اسپارک خودش کار پردازش جریانی رو انجام میده ، و حالا در کنارش یک سری مولفه و کتابخانه هم داره واسه کارای اضافی و خاص ، که مولفه جریان پرداز اسپارک یکی از اون هاست ، واسه همین برداشت، این سوال واسم پیش اومد که کاری که فلسفه ی وجودی خود اسپارک بر اون بنا شده که همون پردازش جریان های داده هست ، و خودش اون رو انجام میده ، رو چرا باز در قالب یک مولفه ی اضافی در آپشن های جانبی خودش ارائه داده ؟ و یا به بیان راحت تر تفاوت کاری و نتیجه ای اسپارک و مولفه جریان پرداز اسپارک چی هست !
    و بدون در نظر گرفتن مولفه ی جریان پرداز اسپارک ، آیا آپاچی اسپارک باز هم کار پردازش جریان هار داده رو می تونه انجام بده ؟
    و اینکه این مولفه های spark streaming , MLlib, spark mysql و graphx اجزای سازنده ی آپاچی آسپارک هستند یا آپشن ها و توابعی آماده جهت استفاده ی کاربران برای مقاصد مورد نظرشون بدون نصب و استفاده از خود آپاچی اسپارک برای راحتی کار ؟
    متشکرم

  2. سلام ، خسته نباشید ،
    تشکر بسیار بابت سایت و مطالب خیلی خوبتون ،
    در سایتتون از اپاچی سامزا مطالبی ارایه نفرمودین ؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

دکمه بازگشت به بالا