Apache Spark سریع، انعطافپذیر و سازگار با توسعهدهندگان، پلتفرم پیشرو برای SQL در مقیاس بزرگ، پردازش دستهای، پردازش جریانی و یادگیری ماشین است.
Apache Spark تعریف شده
Apache Spark یک چارچوب پردازش داده است که می تواند به سرعت وظایف پردازشی را در مجموعه داده های بسیار بزرگ انجام دهد و می تواند همچنین وظایف پردازش داده را در چندین رایانه، به تنهایی یا در کنار سایر ابزارهای محاسباتی توزیع شده، توزیع می کند. این دو ویژگی کلیدی برای دنیای دادههای بزرگ هستند و یادگیری ماشین، که نیاز به تجمیع توان محاسباتی عظیم دارند تا از طریق فروشگاههای بزرگ دادهها به هم برسند. Spark همچنین برخی از بار برنامه نویسی این وظایف را با استفاده آسان API که بخش اعظم کار غرغر محاسبات توزیع شده و پردازش کلان داده را از بین می برد.
Spark در کلان داده چیست
وقتی مردم درباره «داده های بزرگ“، آنها عموماً به رشد سریع داده ها از همه نوع اشاره می کنند – داده های ساختاریافته در جداول پایگاه داده، داده های بدون ساختار در اسناد تجاری و ایمیل ها، و داده های نیمه ساختاریافته در فایل های گزارش سیستم و صفحات وب. در حالی که تجزیه و تحلیل در سال های گذشته بر داده های ساختاریافته متمرکز بود و حول انبار داده، امروزه تجزیه و تحلیل ها بینش هایی را از انواع داده ها جمع آوری می کند و حول دریاچه داده. آپاچی اسپارک به طور هدفمند برای این پارادایم جدید ساخته شده است.
از آغاز فروتنانهاش در AMPLab در U.C. برکلی در سال ۲۰۰۹، آپاچی اسپارک به یکی از کلیدی ترین چارچوب های پردازش توزیع داده های بزرگ در جهان تبدیل شد. Spark را می توان به روش های مختلفی مستقر کرد، پیوندهای بومی را برای جاوا، اسکالا، Python و زبان های برنامه نویسی R، و از SQL پشتیبانی می کند، جریانسازی دادهها، یادگیری ماشین، و پردازش گراف. آن را میبینید که توسط بانکها، شرکتهای مخابراتی، شرکتهای بازی، دولتها و همه غولهای فناوری بزرگ مانند Apple، IBM، Meta و Microsoft استفاده میشود.
Spark RDD
در قلب Apache Spark مفهوم مجموعه داده های توزیع شده انعطاف پذیر (RDD)، یک انتزاع برنامه نویسی است که مجموعه ای تغییرناپذیر از اشیاء را نشان می دهد که می توانند در یک خوشه محاسباتی تقسیم شوند. عملیات روی RDD ها همچنین می توانند در سراسر خوشه تقسیم شوند و در یک فرآیند دسته ای موازی اجرا شوند که منجر به پردازش موازی سریع و مقیاس پذیر می شود. آپاچی اسپارک دستورات پردازش داده کاربر را به گراف غیر چرخه جهت دار یا DAG تبدیل می کند. DAG لایه برنامه ریزی Apache Spark است. تعیین می کند که چه وظایفی بر روی چه گره هایی و با چه ترتیبی اجرا می شوند.
RDD ها را می توان از فایل های متنی ساده، پایگاه های داده SQL، فروشگاه های NoSQL (مانند Cassandra و MongoDB)، سطل های Amazon S3 و موارد دیگر ایجاد کرد. بیشتر Spark Core API بر اساس این مفهوم RDD ساخته شده است، نقشه سنتی را قادر میسازد و عملکرد را کاهش میدهد، اما همچنین پشتیبانی داخلی برای پیوستن به مجموعههای داده، فیلتر کردن، نمونهبرداری و تجمیع ارائه میدهد.
Spark با ترکیب یک فرآیند اصلی driver که یک برنامه Spark را به وظایف تقسیم میکند و بین بسیاری از فرآیندهای مجری که کار را انجام میدهند، بهصورت توزیعشده اجرا میشود. این مجریها را میتوان بر اساس نیازهای برنامه، کم و زیاد کرد.
Spark SQL
Spark SQL برای پروژه Apache Spark اهمیت بیشتری پیدا کرده است. این رابطی است که معمولاً توسط توسعه دهندگان امروزی هنگام ایجاد برنامه ها استفاده می شود. Spark SQL بر روی پردازش داده های ساختاریافته، با استفاده از یک رویکرد چارچوب داده گرفته شده از R و Python (در پانداها) متمرکز شده است. اما همانطور که از نام آن پیداست، Spark SQL همچنین یک رابط سازگار با SQL2003 برای جستجوی دادهها ارائه میکند که قدرت Apache Spark را برای تحلیلگران و همچنین توسعهدهندگان به ارمغان میآورد.
در کنار پشتیبانی استاندارد SQL، Spark SQL یک رابط استاندارد برای خواندن و نوشتن در سایر ذخیرهگاههای داده از جمله JSON، HDFS، Apache Hive، JDBC، Apache ORC، و Apache Parquet که همگی خارج از جعبه پشتیبانی می شوند. سایر فروشگاه های داده محبوب – Apache Cassandra، MongoDB، Apache HBase، و بسیاری دیگر – می توانند با کشیدن کانکتورهای جداگانه از Spark استفاده شوند. اکوسیستم بسته ها. Spark SQL به توابع تعریف شده توسط کاربر (UDF) اجازه می دهد تا به طور شفاف در جستارهای SQL استفاده شوند.
انتخاب برخی از ستونها از یک دیتافریم به سادگی این خط کد است:
citiesDF.select(“name”, “pop”)
با استفاده از رابط SQL، دیتافریم را به عنوان یک جدول موقت ثبت میکنیم، پس از آن میتوانیم درخواستهای SQL را علیه آن صادر کنیم:
citiesDF.createOrReplaceTempView(“cities”)
spark.sql(“SELECT name, pop FROM cities”)
در پشت صحنه، Apache Spark از یک بهینهساز جستجو به نام کاتالیزور که داده ها و پرس و جوها را بررسی می کند تا یک طرح پرس و جو کارآمد برای مکان و محاسبات داده تولید کند که محاسبات مورد نیاز را در سراسر خوشه انجام دهد. از زمان Apache Spark 2.x، رابط Spark SQL از دیتافریم ها و مجموعه داده ها (در اصل یک دیتافریم تایپ شده که می تواند در زمان کامپایل از نظر صحت بررسی شود و از حافظه بیشتر و بهینه سازی محاسباتی در زمان اجرا استفاده شود) رویکرد توصیه شده برای توسعه بوده است. رابط RDD هنوز در دسترس است، اما فقط در صورتی توصیه میشود که نیازهای شما در پارادایم Spark SQL برطرف نشود (مانند زمانی که باید در سطح پایینتری کار کنید تا آخرین افت عملکرد از سیستم خارج شود).
Spark MLlib و MLflow
Apache Spark همچنین کتابخانههایی را برای بکارگیری تکنیکهای یادگیری ماشین و تجزیه و تحلیل نمودار در دادهها در مقیاس بستهبندی میکند. MLlib شامل چارچوبی برای ایجاد خطوط لوله یادگیری ماشینی است که اجرای آسان استخراج ویژگی، انتخاب، و تبدیل در هر مجموعه داده ساختاریافته. MLlib با پیادهسازیهای توزیعشده از الگوریتمهای خوشهبندی و طبقهبندی مانند خوشهبندی k-means و جنگلهای تصادفی ارائه میشود که میتوانند به راحتی در خطوط لوله سفارشی تعویض شوند. مدلها را میتوان توسط دانشمندان داده در Apache Spark با استفاده از R یا Python آموزش داد، با استفاده از MLlib ذخیره کرد و سپس برای استفاده در یک خط لوله مبتنی بر جاوا یا Scala وارد کرد.
یک پلت فرم منبع باز برای مدیریت چرخه زندگی یادگیری ماشین، MLflow از نظر فنی بخشی از پروژه Apache Spark نیست، اما به همین ترتیب محصول Databricks و دیگران در انجمن Apache Spark است. انجمن روی ادغام MLflow با Apache Spark کار می کند تا MLO ها ارائه کند. ویژگیهایی مانند ردیابی آزمایش، ثبت مدل، بستهبندی و UDF که میتوانند به راحتی برای استنتاج در مقیاس Apache Spark و با عبارات SQL سنتی وارد شوند.
جریان سازی ساختاریافته
Structured Streaming یک API سطح بالا است که به توسعه دهندگان اجازه می دهد تا فریم های داده و مجموعه داده های جریانی بی نهایت ایجاد کنند. از Spark 3.0، Structured Streaming روش توصیه شده برای مدیریت داده های جریان در Apache Spark است که جایگزین جریان جریان. Spark Streaming (اکنون بهعنوان یک مؤلفه قدیمی علامتگذاری شده است) برای توسعهدهندگان پر از دردسرهای دشوار بود، بهویژه زمانی که با تجمعهای زمان رویداد و تحویل دیرهنگام پیامها سروکار داشتیم.
همه پرسوجوها در جریانهای ساختیافته از طریق بهینهساز پرس و جو Catalyst انجام میشوند، و حتی میتوان آنها را به صورت تعاملی اجرا کرد و به کاربران این امکان را میدهد که درخواستهای SQL را در برابر دادههای جریان زنده انجام دهند. پشتیبانی از پیامهای دیرهنگام با واترمارک کردن پیامها و سه نوع تکنیک پنجرهسازی پشتیبانی میشود: پنجرههای چرخشی، پنجرههای کشویی، و پنجرههای زمان متغیر با جلسات.
در Spark 3.1 و جدیدتر، میتوانید جریانها را بهعنوان جدول و جداول را بهعنوان جریان در نظر بگیرید. توانایی ترکیب چند جریان با طیف گسترده ای از اتصالات جریان به جریان مشابه SQL، امکانات قدرتمندی برای جذب و تبدیل ایجاد می کند. در اینجا یک مثال ساده از ایجاد یک جدول از منبع پخش است:
val df = spark.readStream
.format("rate")
.option("rowsPerSecond", 20)
.load()
df.writeStream
.option("checkpointLocation", "checkpointPath")
.toTable("streamingTable")
spark.read.table("myTable").show()
Structured Streaming، بهطور پیشفرض، از یک طرح ریز دستهبندی برای مدیریت دادههای جریان استفاده میکند. اما در Spark 2.3، تیم Apache Spark یک پردازش مداوم به جریان ساختاریافته، به آن اجازه می دهد تا پاسخ هایی را با تاخیرهای چشمگیر تا ۱ میلی ثانیه مدیریت کند و آن را با رقبایی مانند Apache Flink و Apache Beam. پردازش مستمر شما را به عملیاتهای نقشهمانند و انتخاب محدود میکند، و در حالی که از درخواستهای SQL در برابر جریانها پشتیبانی میکند، در حال حاضر از تجمیعهای SQL پشتیبانی نمیکند. علاوه بر این، اگرچه Spark 2.3 در سال ۲۰۱۸ وارد شد، اما از Spark 3.3.2 در مارس ۲۰۲۳، پردازش مداوم هنوز به عنوان آزمایشی علامتگذاری شده است.
Structured Streaming آینده برنامه های پخش جریانی با پلتفرم Apache Spark است، بنابراین اگر در حال ساخت یک برنامه پخش جریانی جدید هستید، باید از جریان ساخت یافته استفاده کنید. APIهای قدیمی Spark Streaming همچنان پشتیبانی خواهند شد، اما پروژه انتقال به جریان ساختاریافته را توصیه میکند، زیرا روش جدید نوشتن و حفظ کد پخش جریانی را بسیار قابل تحملتر میکند.
دریاچه دلتا
مانند MLflow، دریاچه دلتا از نظر فنی پروژهای جدا از Apache Spark است. با این حال، طی چند سال گذشته، دریاچه دلتا به بخشی جدایی ناپذیر از اکوسیستم اسپارک تبدیل شده است و هسته چیزی را تشکیل می دهد که Databricks معماری Lakehouse. دریاچه دلتا دریاچههای داده مبتنی بر ابر را با تراکنشهای ACID، معنای پرسوجو یکپارچه برای پردازش دستهای و جریانی، و اجرای طرحواره افزایش میدهد و به طور موثر نیاز به انبار داده جداگانه برای کاربران BI را از بین میبرد. سابقه حسابرسی کامل و مقیاس پذیری برای مدیریت اگزابایت داده نیز بخشی از بسته است.
و استفاده از قالب دلتا لیک (ساخته شده بر روی فایل های پارکت) در آپاچی اسپارک به سادگی استفاده از قالب delta
است:
df = spark.readStream.format("rate").load()
stream = df
.writeStream
.format("delta")
.option("checkpointLocation", "checkpointPath")
.start("deltaTable")
Pandas API در Spark
استاندارد صنعتی برای دستکاری و تجزیه و تحلیل داده ها در پایتون، کتابخانه Pandas است. با Apache Spark 3.2، یک API جدید ارائه شد که به بخش بزرگی از API Pandas اجازه میدهد تا به صورت شفاف با Spark استفاده شود. اکنون دانشمندان داده می توانند به سادگی واردات خود را با import pyspark.pandas به عنوان pd
جایگزین کنند و تا حدودی مطمئن باشند که کد آنها به کار خود ادامه خواهد داد و همچنین از اجرای چند گره ای آپاچی اسپارک بهره مند شوند. در حال حاضر، حدود ۸۰ درصد از Pandas API پوشش داده شده است، با هدف پوشش ۹۰ درصدی در نسخه های آینده.
اجرای آپاچی اسپارک
در یک سطح اساسی، یک برنامه Apache Spark از دو جزء اصلی تشکیل شده است: یک درایور، که کد کاربر را به وظایف متعددی که میتوانند در گرههای کارگر توزیع شوند، تبدیل میکند، و اجرای /em>، که روی آن گره های کارگر اجرا می شود و وظایف محول شده به آنها را اجرا می کند. نوعی از مدیریت خوشه برای میانجیگری بین این دو لازم است.
خارج از جعبه، Apache Spark میتواند در حالت خوشهای مستقل اجرا شود که به سادگی به چارچوب Apache Spark و ماشین مجازی جاوا روی هر گره در خوشه شما. با این حال، احتمال بیشتری وجود دارد که بخواهید از یک سیستم مدیریت منابع قویتر یا سیستم مدیریت خوشهای برای مراقبت از تخصیص کارگران بر اساس تقاضا برای شما استفاده کنید.
در شرکت، از نظر تاریخی این به معنای اجرا در Hadoop YARN (YARN روشی است که توزیعهای Cloudera و Hortonworks وظایف Spark را اجرا میکنند)، اما از آنجایی که Hadoop کمتر جا افتاده است، شرکتهای بیشتری به سمت استقرار Apache Spark روی Kubernetes. این موضوع در نسخههای Apache Spark 3.x منعکس شده است، که ادغام با Kubernetes را بهبود میبخشد، از جمله توانایی تعریف قالبهای پاد برای درایورها و مجریها و استفاده از زمانبندیهای سفارشی مانند آتشفشان.
اگر به دنبال راه حلی مدیریت شده هستید، پیشنهادات Apache Spark را می توانید در همه سه ابر بزرگ پیدا کنید: Amazon EMR، Azure HDInsight، و Google Cloud Dataproc.
پلتفرم Databricks Lakehouse
Databricks، شرکتی که سازندگان آپاچی اسپارک را به کار میگیرد، رویکرد متفاوتی نسبت به بسیاری از شرکتهای دیگر در پیش گرفته است. محصولات منبع باز دوران کلان داده برای سالهای متمادی، Databricks یک سرویس ابری مدیریت شده جامع ارائه میدهد که خوشههای Apache Spark، پشتیبانی از جریان، توسعه یکپارچه نوتبوک مبتنی بر وب، و عملکرد I/O بهینهسازی شده اختصاصی را در یک توزیع استاندارد Apache Spark ارائه میدهد. این ترکیبی از خدمات مدیریت شده و حرفه ای، Databricks را به یک غول بزرگ در عرصه Big Data تبدیل کرده است که ارزش آن در سال ۲۰۲۱ ۳۸ میلیارد دلار برآورد شده است. پلتفرم Databricks Lakehouse اکنون در هر سه ارائه دهنده بزرگ ابری در دسترس است و در حال تبدیل شدن به de روشی که بیشتر مردم با Apache Spark تعامل دارند.
آموزش های آپاچی اسپارک
آماده شیرجه رفتن و یادگیری Apache Spark هستید؟ توصیه میکنیم با پرتال یادگیری Databricks شروع کنید، که مقدمه خوبی برای چارچوب ارائه میکند، اگرچه این کار خواهد بود. کمی نسبت به پلتفرم Databricks تعصب دارد. برای غواصی عمیقتر، کارگاه Spark را پیشنهاد میکنیم، که یک تور کامل از Apache Spark است. ویژگی ها از طریق یک لنز Scala. چند کتاب عالی نیز موجود است. Spark: The Definitive Guide یک مقدمه فوقالعاده است که توسط دو نفر نوشته شده است. نگهبانان آپاچی اسپارک و High Performance Spark یک راهنمای ضروری برای پردازش داده ها با آپاچی اسپارک در مقیاس های عظیم به روشی عالی. یادگیری مبارک!
پست های مرتبط
آپاچی اسپارک چیست؟ پلتفرم کلان داده که هادوپ را درهم شکست
آپاچی اسپارک چیست؟ پلتفرم کلان داده که هادوپ را درهم شکست
آپاچی اسپارک چیست؟ پلتفرم کلان داده که هادوپ را درهم شکست