آموزش آپاچی اسپارک (Apache Spark)

دسته بندی: فریمورک ها

آپاچی اسپارک

آنچه در این صفحه می خوانید:

آپاچی اسپارک چیست؟

آپاچی اسپارک یک فریمورک محاسبات توزیع شده همه منظوره اوپن سورس است. اسپارک واسط برای برنامه نویسی کل توزیع ها با موازی سازی داده ها و تلرانس را فراهم می کند. ابتدا در دانشگاه کالیفرنیا، AMPLab برکلی توسعه یافته، بانک کد Spark بعداً به بنیاد نرم افزار آپاچی اهدا شد، که از آن زمان تاکنون نیز ادامه دارد. در ابتدا Spark به ما یک فریمورک جامع و یکپارچه برای مدیریت نیازهای پردازش کلان داده با مجموعه های متنوع و مختلف داده (داده های متنی، نمودار داده ها و غیره) و نیز منبع داده را ارائه می دهد. Spark این امکان را فراهم می کند تا سریعا برنامه های کاربردی را در جاوا، اسکالا یا پایتون بنویسید. این فریمورک دارای بیش از 80 اپراتور سطح بالا است. شما می توانید آن را به صورت تعاملی برای پرس و جوی داده های درون پوسته استفاده کنید. علاوه بر نقشه و کاهش عملیات، از کوئری های اس کیو ال، جریان داده ها، یادگیری ماشینی و پردازش داده های گرافیکی پشتیبانی می کند.

معماری آپاچی اسپارک

آپاچی اسپارک به عنوان پایه معماری خود، مجموعه داده های توزیع شده انعطاف پذیر (RDD)، یک مجموعه داده فقط خواندنی از داده های توزیع شده در یک توزیع از کلاستر ماشین ها، که به شکلی تلرانس حفظ می شود را قرار داده است. API Dataframe به عنوان یک انتزاع در بالای RDD و پس از آن API Dataset منتشر می شود. در Spark 1.x ،RDD رابط برنامه نویسی اصلی برنامه (API) است، اما با استفاده از Spark 2.x از Dataset ،API حتی اگر RDI API کم ارزش نباشد، مورد تشویق قرار می گیرد. فناوری RDD هنوز زیر مجموعه API Dataset است.

اسپارک و RDD های آن در سال 2012 در پاسخ به محدودیت های موجود در پارادایم محاسبات توریع شده MapReduce توسعه داده شده است، که یک ساختار داده خطی خاص dataaflow را در برنامه های توزیع شده وادار می کند که برنامه های MapReduce داده های ورودی را از دیسک بخوانند، تابع را در سراسر داده ها تبدیل به نقشه کند، نتایج نقشه را کاهش دهد و سطح ذخیره سازی روی دیسک را کاهش دهد. عملکرد RDD های Spark به عنوان یک مجموعه کاری برای برنامه های توزیع شده است که یک شکل محدود از حافظه مشترک توزیع شده را ارائه می دهد.

اسپارک اجرای هر دو الگوریتم تکراری را تسهیل می کند، که چندین بار از داده های خود بازدید می کنند و به صورت حلقه ای و تجزیه و تحلیل داده های تعاملی / اکتشافی، یعنی پرس و جو از داده های پایگاه داده تکرار می شوند. تأخیر چنین برنامه هایی ممکن است در مقایسه با اجرای Apache Hadoop MapReduce توسط تعداد درخواست زیاد کاهش یابد. در میان کلاس الگوریتم های تکرار شونده، الگوریتم های آموزش برای سیستم های یادگیری ماشینی هستند که انگیزه اولیه برای توسعه آپاچی اسپارک را تشکیل می دهند.

Apache Spark به یک مدیر توزیع و یک سیستم ذخیره سازی توزیع شده نیاز دارد. برای مدیریت توزیع، Spark از standalone (توزیع نیتیو Spark، که در آن می توانید یک توزیع را بصورت دستی راه اندازی کنید یا از اسکریپت های ارائه شده بوسیله نصب پکیج استفاده کنید) پشتیبانی می کند. همچنین می توان این daemon ها را برای تست در یک دستگاه اجرا کرد. Hadoop YARN ،Apache Mesos یا Kubernetes. برای ذخیره سازی توزیع شده، Spark می تواند با طیف گسترده ای از جمله Alluxio ،Hadoop Distributed File System (HDFS) ،MapR File System (MapR-FS) ،Cassandra ،OpenStack Swift ،Amazon S3 ،Kudu ،Lustre file system رابط کند. یک راه حل سفارشی قابل اجرا است. اسپارک همچنین از یک حالت شبه محلی توزیع شده پشتیبانی می کند، که معمولاً فقط برای اهداف توسعه یا آزمایش مورد استفاده قرار می گیرد، جایی که ذخیره سازی توزیع شده مورد نیاز نیست و به جای آن می توان از سیستم فایل محلی استفاده کرد. در چنین سناریویی، Spark بر روی یک دستگاه واحد با یک مجری در هر هسته پردازنده اجرا می شود.

ویژگی های آپاچی اسپارک

سرعت

با استفاده از محاسبات درون حافظه و بهینه سازی های دیگر، Spark می تواند 100 برابر سریعتر از Hadoop برای پردازش داده های در مقیاس بزرگ باشد. اسپارک همچنین سریع است وقتی داده ها روی دیسک ذخیره می شوند و در حال حاضر رکورد جهانی برای مرتب سازی بر روی دیسک در مقیاس بزرگ را در اختیار دارد.

راحتی در استفاده

اسپارک دارای API های با کاربردی آسان برای کار با مجموعه داده های بزرگ است. این شامل مجموعه ای از بیش از 100 اپراتور برای تبدیل داده ها و API های قاب داده های آشنا برای دستکاری داده های نیمه ساختار یافته است.

موتور یکپارچه

اسپارک با کتابخانه های سطح بالا پکیج شده، از جمله پشتیبانی از SQL، جریان داده ها، یادگیری ماشین و پردازش نمودار. این کتابخانه های استاندارد بهره وری توسعه دهنده را افزایش می دهد و می تواند به صورت یکپارچه برای ایجاد جریان های کاری پیچیده ترکیب شود.

از دیگر ویژگی های اسپارک می توان به موارد زیر اشاره کرد:

  • بهینه سازی مراحل جریان پردازش داده ها
  • ذخیره سازی زیاد داده در حافظه
  • پشتیبانی از نقشه و کاهش عملکرد
  • بهینه سازی نمودارهای اپراتور دلخواه
  • ارائه ی API های مختصر و سازگار در Scala ،Java و Python
  • ارائه ی پوسته تعاملی برای Scala و Python

Spark با زبان برنامه نویسی Scala نوشته شده است و در محیط ماشین مجازی جاوا (JVM) اجرا می شود. در حال حاضر از زبان های زیر برای توسعه برنامه های کاربردی پشتیبانی می کند:

به غیر از Spark Core API، کتابخانه های اضافی وجود دارند که بخشی از اکوسیستم Spark هستند و قابلیت های اضافی در زمینه تجزیه و تحلیل داده های بزرگ و حوزه های یادگیری ماشینی را فراهم می کند.

  • Spark Streaming
  • Spark SQL
  • Spark MLlib
  • Spark GraphX
  • BlinkDB
  • Tachyon

مقایسه آپاچی اسپارک با هدوپ

شایان ذکر است که آپاچی اسپارک در مقابل آپاچی هدوپ کمی اشتباه است. Spark را این روزها در بیشتر توزیع های Hadoop مشاهده خواهید کرد. اما به دلیل دو مزیت بزرگ، Spark هنگام پردازش داده های بزرگ، سبقت را به الگوی MapReduce قدیمی که Hadoop را برجسته کرده است، به فریمورک انتخاب شده تبدیل کرده است.

اولین مزیت سرعت است. موتور داده حافظه Spark به این معنی است که می تواند در مواقع خاص، به ویژه در مقایسه با کارهای چند مرحله ای که نیاز به نوشتن حالت برای برگشت به دیسک بین مراحل دارند، انجام وظایف تا صد برابر سریعتر از MapReduce را انجام دهد. حتی مشاغل Apache Spark که در آن داده ها کاملاً در حافظه موجود نیستند، تقریباً 10 برابر سریعتر از همتای MapReduce خود هستند. مزیت دوم Spark API سازگار با توسعه دهنده است. با توجه به سرعت عمل Spark مهم است، می توان ادعا كرد كه دوست بودن با Spark API از اهمیت بیشتری برخوردار است.

آپاچی اسپارک و پایتون

PySpark مدل برنامه نویسی Spark را در اختیار پایتون قرار می دهد. PySpark به Python 2.6 یا بالاتر نیاز دارد. برنامه های PySpark با استفاده از یک مترجم استاندارد CPython به منظور پشتیبانی از ماژول های Python که از پسوند C استفاده می کنند، اجرا می شوند. به طور پیش فرض، PySpark به پایتون نیاز دارد تا در سیستم PATH موجود باشد و از آن برای اجرای برنامه ها استفاده کند. با تنظیم متغیر محیط PYSPARK_PYTHON در conf / spark-env.sh (یا cmd. در ویندوز) ممکن است یک Python جایگزین قابل اجرا باشد.

تمام وابستگی های کتابخانه PySpark، از جمله Py4J، با PySpark همراه شده و به طور خودکار وارد می شوند. برنامه های مستقل PySpark باید با استفاده از اسکریپت bin / pyspark، که به طور خودکار محیط جاوا و پایتون را با استفاده از تنظیمات conf / spark-env.sh یا cmd. پیکربندی می کند، انجام شود. اسکریپت به طور خودکار بسته بن / pyspark را به PYTHONPATH اضافه می کند.

چند تفاوت اساسی بین API های پایتون و Scala وجود دارد:

  • پایتون به صورت پویا تایپ می شود، بنابراین RDD ها می توانند اشیاء از انواع مختلف را در خود نگه دارند.
  • PySpark هنوز چند تماس API مانند پرونده های جستجو و ورودی را غیر از متن پشتیبانی نمی کند، اگرچه این نسخه ها در نسخه های آینده اضافه می شوند.
آیا این نوشته را دوست داشتید؟