۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

آپاچی اسپارک چیست؟ پلتفرم کلان داده که هادوپ را درهم شکست

Apache Spark سریع، انعطاف‌پذیر و سازگار با توسعه‌دهندگان، پلتفرم پیشرو برای SQL در مقیاس بزرگ، پردازش دسته‌ای، پردازش جریانی و یادگیری ماشین است.

Apache Spark سریع، انعطاف‌پذیر و سازگار با توسعه‌دهندگان، پلتفرم پیشرو برای SQL در مقیاس بزرگ، پردازش دسته‌ای، پردازش جریانی و یادگیری ماشین است.

Apache Spark تعریف شده

Apache Spark یک چارچوب پردازش داده است که می تواند به سرعت وظایف پردازشی را در مجموعه داده های بسیار بزرگ انجام دهد و می تواند همچنین وظایف پردازش داده را در چندین رایانه، به تنهایی یا در کنار سایر ابزارهای محاسباتی توزیع شده، توزیع می کند. این دو ویژگی کلیدی برای دنیای داده‌های بزرگ و یادگیری ماشینی هستند، که نیاز به تجمیع قدرت محاسباتی عظیم دارند تا از طریق فروشگاه‌های بزرگ داده پراکنده شوند. Spark همچنین برخی از بار برنامه‌نویسی این وظایف را با استفاده از API آسان از روی دوش توسعه‌دهندگان برمی‌دارد که بسیاری از کارهای ناخوشایند محاسبات توزیع‌شده و پردازش کلان داده را از بین می‌برد.

از آغاز فروتنانه‌اش در AMPLab در U.C. برکلی در سال ۲۰۰۹، آپاچی اسپارک به یکی از کلیدی ترین چارچوب های پردازش توزیع داده های بزرگ در جهان تبدیل شد. Spark را می توان به روش های مختلفی مستقر کرد، اتصالات بومی را برای زبان های برنامه نویسی Java، Scala، Python و R فراهم می کند و از SQL، داده های جریانی< پشتیبانی می کند. /a>، یادگیری ماشین، و پردازش گراف. آن را می‌بینید که توسط بانک‌ها، شرکت‌های مخابراتی، شرکت‌های بازی، دولت‌ها و همه غول‌های فناوری بزرگ مانند 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 کار می‌کند تا ویژگی‌های MLOps مانند ردیابی آزمایش، ثبت مدل‌ها، بسته‌بندی و UDF را ارائه دهد که می‌توانند به راحتی برای استنتاج در مقیاس Apache Spark و با عبارات SQL سنتی وارد شوند.

جریان سازی ساختاریافته

Structured Streaming یک API سطح بالا است که به توسعه دهندگان اجازه می دهد تا فریم های داده و مجموعه داده های جریانی بی نهایت ایجاد کنند. از Spark 3.0، Structured Streaming روش توصیه شده برای مدیریت داده های جریان در Apache Spark است که جایگزین جریان جریان. Spark Streaming (اکنون به‌عنوان یک مؤلفه قدیمی علامت‌گذاری شده است) برای توسعه‌دهندگان پر از دردسرهای دشوار بود، به‌ویژه هنگامی که با تجمع‌های زمان رویداد و تحویل دیرهنگام پیام‌ها سر و کار داشتند.

Google مش سرویس Istio را به CNCF اهدا می کند

همه پرس‌وجوها در جریان‌های ساخت‌یافته از طریق بهینه‌ساز پرس و جو 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، پشتیبانی جریان، توسعه نوت‌بوک یکپارچه مبتنی بر وب، و عملکرد بهینه‌سازی شده ورودی/خروجی اختصاصی را در یک توزیع استاندارد 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 یک راهنمای ضروری برای پردازش داده ها با آپاچی اسپارک در مقیاس های عظیم به روشی عالی. یادگیری مبارک!