آپاچی اسپارک کیست؟ توضیح بده.
آپاچی اسپارک () یک چارچوب رایانش توزیع‌شده متن‌باز است. این نرم‌افزار در ابتدا توسط دانشگاه کالیفرنیا، برکلی توسعه داده می‌شد که بعدها کد آن به بنیاد نرم‌افزار آپاچی هدیه گردید که از آن زمان توسط آن‌ها نگه‌داری می‌شود. اسپارک یک رابط برنامه‌نویسی کاربردی برای برنامه‌نویسی تمام خوشه‌ها با موازی‌سازی داده‌های ضمنی و تحمل خطا فراهم می‌کند.اسپارک از حافظه اصلی برای نگهداری داده‌های برنامه استفاده می‌کند که این امر باعث سریعتر اجرا شدن برنامه‌ها می‌شود (برخلاف مدل نگاشت/کاهش که از دیسک به عنوان مکان ذخیره‌سازی داده‌های میانی استفاده می‌کند). همچنین یکی دیگر از مواردی که باعث افزایش کارایی اسپارک می‌شود، استفاده از مکانیسم حافظه نهان هنگام استفاده از داده‌هایی است که قرار است دوباره در برنامه استفاده شوند. اینکار باعث کاهش سربار ناشی از خواندن و نوشتن از دیسک می‌شود. یک الگوریتم برای پیاده‌سازی در مدل نگاشت/کاهش، ممکن است به چندین برنامه مجزا تقسیم شود و در هنگام اجرا هر بار باید داده‌ها از دیسک خوانده شده، پردازش شوند و دوباره در دیسک نوشته شوند. اما با استفاده از مکانیسم حافظه نهان در اسپارک، داده‌ها یکبار از دیسک خوانده می‌شوند و در حافظه اصلی کَش می‌شوند و عملیات‌های متفاوت بروی آن اجرا می‌شود. در نتیجه استفاده از این روش نیز باعث کاهش چشمگیر سربار ناشی از ارتباط با دیسک در برنامه‌ها و بهبود کارایی می‌شود.مولفه‌های اسپارک.Spark Coreهسته اسپارک حاوی عملیات‌های اولیه اسپارک از جمله اجزای موردنیاز برای زمان‌بندی وظایف، مدیریت حافظه، مقابله با خطا، تعامل با سیستم ذخیره‌سازی و … می‌باشد. هسته اسپارک همچنین محل توسعه APIهایی می‌باشد کهRDDها را تعریف می‌کنند و RDDها مفهوم اصلی برنامه‌نویسی اسپارک می‌باشند. RDDها نشانگر مجموعه‌ای از آیتم‌ها هستند که بر روی گره‌های محاسباتی متعدد توزیع شده و می‌توان آن‌ها را به صورت موازی پردازش کرد. هسته اسپارک APIهای متعددی را برای ایجاد و دستکاری این مجموعه‌ها ارائه می‌دهد.Spark SQLاسپارک SQL چهارچوبی برای کار کردن با داده‌های ساخت‌یافته و دارای ساختار می‌باشد. این سیستم پرس‌وجو داده‌ها را از طریق SQL و همچنین آپاچی هایو، نوع دیگر SQL که HQL نیز نامیده می‌شود، امکان‌پذیر ساخته و از منابع داده از جمله جداول هایو، ساختار داده‌های Parquet,CSV و JSON پشتیبانی می‌کند. علاوه بر ارائه یک رابط کاربری SQL برای اسپارک، اسپارک SQL توسعه دهندگان را قادر می‌سازد تا پرس‌وجوهای SQL را با عملیات‌های تغییر داده‌ها بروی RDDها که در پایتون، جاوا و اسکالا پشتیبانی می‌شود، ترکیب کرده و در یک برنامه پرس‌جوهای SQL را با تحلیل‌های پیچیده منسجم کرد. این انسجام نزدیک با محیط پردازشی ارائه شده توسط اسپارک، اسپارک SQLرا از سایر ابزارهای انبار داده متن باز متمایز می‌کند.Spark Streamingمولفه پردازش داده‌های جریانی اسپارک یکی از اجزای اسپارک است که پردازش جریان داده‌ها را فراهم می‌آورد. از نمونه‌های جریان داده‌ها می‌توان به فایل‌های لاگ ایجاد شده توسط سرورهای وب یا مجموعه پیام‌های حاوی به روز رسانی وضعیت ارسال شده توسط کاربران یک وب سرویس یا در شبکه‌های اجتماعی نظیر ارسال کردن یک پست اشاره کرد. این مؤلفه APIهایی را برای تغییر جریان‌های داده که با APIهای مربوط به RDDهای موجود در هسته اسپارک همخوانی دارد، ارائه می‌دهد و این امر موجب تسهیل توسعه برنامه برای توسعه‌دهندگان و سوییچ بین برنامه‌هایی که داده‌ها را در حافظه اصلی، بر روی دیسک یا در زمان واقعی پردازش می‌کنند، می‌شود. در معماری توسعه این APIها، به منظور برخورداری از قابلیت تحمل خطا، بهره‌وری بالا و مقیاس پذیری، همانند مؤلفه هسته اسپارک به نکات مربوط به توسعه سیستم‌های توزیع شده توجه شده‌است.MLlibاسپارک دارای کتابخانه‌ای متشکل از APIهای یادگیری ماشین (ML) با نام MLlib می‌باشد. MLlib انواع مختلفی از الگوریتم‌های یادگیری ماشین از جمله طبقه‌بندی، تحلیل رگرسیون، خوشه‌بندی و پالایش گروهی را ارائه می‌دهد و همچنین از قابلیت‌های مثل ارزیابی مدل و ورود داده‌ها پشتیبانی می‌کند. MLlib همچنین ساختارهای سطح پایین یادگیری ماشین مثل الگوریتم بهینه‌سازی گرادیان نزولی را فراهم می‌آورد. تمام این روش‌ها با منظور اجرا کردن این برنامه‌ها در سطح کلاستر اسپارک طراحی شده‌اند.GraphXGraphX یک کتابخانه برای پردازش گراف‌ها و انجام پردازش‌های موازی بروی داده‌های گراف می‌باشد. GraphX همانند مؤلفه‌های اسپارک استریمینگ و اسپارک SQL, APIهای RDDها را توسعه داده و ما را قادر می‌سازد تا گراف‌های جهت‌دار با نسبت دادن مشخصات به هر گره و یال ایجاد کنیم. GraphX همچنین عملگرهای مختلفی را برای تغییر گراف‌ها (نظیر subgraph و mapVertices) و کتابخانه‌ای از الگوریتم‌های گراف (نظیر PageRank و شمارش مثلث‌های گراف) فراهم آورده‌است.