مجتبی نمازی فرد
مجتبی نمازی فرد
خواندن ۱۱ دقیقه·۴ سال پیش

APACHE SPARK

اسپارک

MapReduce

بررسی اجمالی MapReduce

    • مدل برنامه نویسی مورد استفاده Google
    • ترکیبی از مدلهای Map و Reduce با پیاده سازی مرتبط
    • برای پردازش و تولید مجموعه داده های بزرگ استفاده می شود

بررسی اجمالی MapReduce

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

مفهوم map

  • یک جفت کلید / مقدار را وارد می کند
    • کلید ارجاع به مقدار ورودی است
    • خب Value مجموعه داده ای است که می توان روی آن کار کرد
  • ارزیابی
    • عملکردی که توسط کاربر تعریف شده است
    • برای هر مقدار ورودی مقدار اعمال می شود
      • ممکن است نیاز به تجزیه ورودی باشد
  • لیست جدیدی از جفت کلید / مقدار تولید می کند
    • می تواند از جفت ورودی متفاوت باشد

مقادیر را کاهش دهید.

  • با واسط بین جفت کلید / مقدار ​​شروع می شود
  • با جفت کلید / مقدار نهایی به پایان می رسد
  • جفت های شروع بر اساس کلید مرتب می شوند
  • مقادیر مربوط به یک کلید داده شده در تابع Reduce را تأمین می کند.
  • به طور معمول تابعی که:
    • با تعداد زیادی جفت کلید / مقدار شروع می شود
      • یک کلید / مقدار برای هر کلمه در تمام پرونده هایی که به هم مربوط می شوند (از جمله چندین ورودی برای همان کلمه)
    • با تعداد بسیار کمی از جفت کلید / مقدار به پایان می رسد
      • یک کلید / مقدار برای هر کلمه منحصر به فرد در تمام پرونده ها با تعداد موارد جمع شده در این ورودی
  • شکسته شده بنابراین یک worker معین با ورودی همان کلید کار می کند.

نقشه متن را می خواند و برای هر کلمه خوانده شده یک جفت {<word>، 1} ایجاد می کند

سپسReduce تمام آن جفت ها را گرفته و برای تولید شمارش نهایی آنها را شمارش می کند.

اگر 20 جفت{word ، 1} وجود داشته باشد ، خروجی نهایی Reduce یک جفت {word ، 20} خواهد بود.


خلاصه

الگوی MapReduce

  • بستر های نرم افزاری برای محاسبات موازی قابل اعتماد و مقیاس پذیر
  • موضوعات توزیع شده و موازی محیط را از برنامه نویس خلاصه می کند.
  • سیستم های پرونده توزیع شده را اجرا می کند
    • سیستم پرونده Google
    • سیستم فایل Hadoop) HDFS)




HDFS (Hadoop Distributed File System)

معرفی فایل سیستم HDFS

  • فایل HDFS برای پرونده های بسیار بزرگی که بصورت استریمینگ به آنها داده می شود طراحی شده است و روی سخت افزارهای متداول اجرا می شود. به عبارت دیگر این فایل سیستم برای پرونده های چند گیگابایتی تا چند ترابایتی که یک بار نوشته می شود و بارها خوانده می شود مناسب است و از آنجا که در سخت افزارهای اجرا می شوند و نیازی به نرم افزارهای خاص ندارند ، باید آماده مقابله با از کار افتادن دیسک یا نود در خود فایل سیستم وجود داشته باشد. به همین دلایل hdfs برای عملیات فایلی که نیاز به تاخیر کم (کم تاخیر) مناسب نیست. علاوه بر این hdfs برای جایی که بسیار زیاد پرونده های کوچک وجود دارد یا برای جاهایی که مداوم به پرونده برای نوشتن در بخش های مختلف است مناسب نیست.
  • در واقع HDFS پرونده ها را بصورت بلوک های ۶۴ یا ۱۲۸ مگابایتی تقسیم می کند و نگهداری می کند. اگر کسی با ساختار دیتا آشنا باشید ، می دانید که چرا سایز بلوک روی یک دیسک 51 تا 449 بایت (اندازه یک اسکتور) و در فایل سیستم های معماری 4 کیلوبایت تا 16 کیلو بایت است. اما hdfs از بلوک های این بزرگی (۶۴ مگابایت) برای این کار باعث می شود تا زمان جستجو برای زمان کل سیستم را کم کنید.
  • ساختار hdfs به این صورت است که یک NameNode و یکسری DataNode وجود دارد. وظیفه NameNode که از اینجا به بعد ما آنرا NN می نامیم ، این است که اطلاعات متادیتای فایل را در خود نگهداری کند و DataNode اطلاعات بلوک های پرونده را در خود نگهداری می کند. HDFS کاملاً با استاندارد POSIX سازگار نیست ، ولی بخش زیادی از آنرا تولید می کند. دسترسی کاربر و گروه مشابه posix است و ACL (لیست کنترل دسترسی) در آن وجود ندارد. از آنجا که فایل ها را از روی HDFS نمی توانید انتخاب کنید گزینه X در دسترسی به ندیده گرفته می شود.
  • برای استفاده از این HDFS می توانید بک اند (backend) و اینترنت (اینترفیس) به صورت متنوعی داشته باشید که بتوانید دیتا را با فرم های مختلفی (به عنوان مثال RAID توزیع شده جدید) ذخیره کنید ، یا اجازه دهید آن را بصورت http ، ftp ، sftp را مجاز کنید بدهند.

ویژگی های اساسی: HDFS

  • تحمل پذیری خطای بالا
  • توان عملیاتی بالا
  • مناسب برای برنامه های دارای مجموعه داده های بزرگ
  • دسترسی مستقیم به داده های سیستم فایل
  • از سخت افزار گره ها ساخته می شود

سیستم های پرونده توزیع شده

  • سیستم فایل توزیع شده بسیار مقیاس پذیر برای برنامه های بزرگ با حجم زیاد داده.
    • به عنوان مثال گره های 10K ، 100 میلیون پرونده ، 10 PB
  • ذخیره انبوه حجم انبوه داده ها در رایانه های ارزان قیمت و غیر قابل اطمینان را فراهم می کند
    • پرونده ها برای رسیدگی به خرابی سخت افزار تکثیر می شوند
    • شکست ها را شناسایی کرده و از آنها بازیابی کنید
  • بستری فراهم می کند که سیستم های دیگری مانند MapReduce ، BigTable بر روی آن کار می کنند.




اسپارک

محاسبات خوشه ای سریع ، تعاملی ، یکپارچه با زبان

موتور آپاچی اسپارک یک موتور تجزیه و تحلیل متحد برای پردازش داده در مقیاس بزرگ است.

هسته اسپارک موتور پایه ای برای پردازش داده های موازی و توزیع شده در مقیاس بزرگ است.

وظیفه انجام این موارد به عهده موتور اسپارک است:

  • مدیریت حافظه و بازیابی خطا
  • برنامه ریزی ، توزیع و نظارت بر کار ها در یک خوشه
  • تعامل با سیستم های ذخیره سازی

سرعت

  • بارهای کاری را 100 برابر سریعتر اجرا می کند.
  • آپاچی اسپارک با استفاده از برنامه ریزی پیشرفته DAG ، بهینه ساز جستجو و موتور اجرای فیزیکی ، هم برای داده های دسته ای و هم برای پخش جریانی ، عملکرد بالایی دارد.


سهولت استفاده

  • برنامه ها را به سرعت در جاوا ، اسکالا ، پایتون ، R و SQL بنویسید.
  • اسپارک بیش از 80 اپراتور سطح بالا را ارائه می دهد که ساخت برنامه های موازی را آسان می کند. و می توانید به صورت تعاملی از پوسته های Scala ، Python ، R و SQL استفاده کنید.

عمومیت

  • ترکیب SQL ، جریان و تجزیه و تحلیل های پیچیده.
  • اسپارک مجموعه ای از کتابخانه ها را که شامل DataFrames ،SQL و (MLlib برای یادگیری ماشین) ، GraphX و Spark Streaming ایجاد می کند و می توانید این کتابخانه ها را به صورت یکپارچه در همان برنامه ترکیب کنید.

همه جا اجرا می شود

  • اسپارک در Hadoop ، Apache Mesos ، Kubernetes ، مستقل یا در cloud اجرا می شود. این می تواند به منابع مختلف داده دسترسی پیدا کند.

Spark Architecture


معماری اسپارک (Spark) یک معماری ارباب برده یا کلاینت سرور است و شامل پنج موجودیت اصلی زیر است:

· برنامه راه انداز Driver

· مدیر خوشه Cluster manager

· کارگرها Workers

· مجری executor

· وظایف tasks

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

بیش از توضیح اجزای معماری اسپارک، به مفهوم اصطلاحات ذیل باید توجه کرد:

قسمت Application : که قرار است در خوشه اجرا شود. در ابتدای متد main این برنامه، شیء SparkContext ساخته میشود. SparkContext، منطق پردازشی را ذخیره میکند و میتواند مجموعهای از کارهای موازی با سری را زمانبندی کند.

قسمت job: مجموعه کاملی از تبدیلات روی RDD که با یک عمل action یا ذخیره سازی داده، خاتمه می یابد. در نتیجه، هر برنامه کاربردی، ممکن است شامل چندین کار باشد.

قسمت Stage : اسبارک هر کار را به گرافی از گامها تقسیم میکند. همچنین، هر گام شامل، مجموعه ای از وظایفی است که قابل اجرا توسط گره کارگر هستند.

قسمت Driver راه انداز وظایف ذیل را برعهده دارد:

مذاکره با مدیر خوشه جهت تخصیص منابع به کارگرها. و هر کار را به DAG (گراف بدون دور جهت دار) ترجمه میکند.(Direct Acyclic Graph) . گراف را به گامهایی تقسیم میکند. عملیات تبدیل در یک گام، و عملیات action در گام دیگر قرار میگیرند

وظایف را زمانبندی و اجرای آنها را کنترل میکند (بر اساس وضعیت کش جاری گرهها، مكان های مطلوب و مناسب جهت اجرای هر وظیفه تعیین میشود).

قسمت Cluster manager : راه انداز، قادر است تا به سه نوع مدیر خوشه (مدیر خوشه مستقل ،spark Mes06 یا Yarn) متصل شود و از آن درخواست منابع کند. هر کدام از این سه مدیر خونه برای شرایطی خاص مناسب اند و میتوان یکی از آنها را برای مدیریت خوشه موجود انتخاب کرد. باید توجه داشت که مدیر خوشه مستقل Spark، بهمراه بسته Spark ارایه میشود، مدير خوشه Yarn، نیز در بشته هادوب و مدیر خوشه Mesos نیز چارچوب مستقل دیگری است. هر کدام از این سه مدیر خوشه، شامل دو بخش هستند

(۱) سرویس ارباب مرکزی (مدیر منابع Yarn، ارباب Mesos، یا ارباب مستقل Spark) که تصمیم میگیرد کدام فرآیندهای مجری، چه زمانی و در چه مکانی اجرا شوند.

(۲) سرویس برده که در تمام گرهها اجرا میشود (مدیر گره در Yarn برده در Mesos و برده در مدیر خوشه مستقل Spark) و فرآیندهای مجری را اجرا میکند و همچنین بر مصرف و حیات منابع انها نظارت می کند.

قسمت Executor : در هر گره کارگر Spark، چند بردازش مجری وجود دارد (معمولا به اندازه تعداد هسته های گرهی برده، مجری ایجاد میگردد). هر برنامه کاربردی Spark، پردازشهای مجری خودش را دارد. هر مجری، مسئول موارد ذیل است و اجرای وظایفی که توسط راه انداز زمانبندی شدهاند، در چند نخ. . ذخیرهسازی نتایج محاسبات در حافظه (کش کردن نتایج در heap ماشین مجازی جاوا) یا دیسک . تعامل با سیستمهای ذخیره سازی . پس از تکمیل اجرای وظیفه، نتایج را به راه انداز ارسال میکنند.

قسمت Workers : در معماری اسپارک، گره های برده به عنوان گره کارگر شناخته میشوند که برای برنامه Spark ، CPU حافظه و منابع ذخیره سازی فراهم میکنند.

قسمت tasks : وظیفه، کوچکترین واحد کار است که Spark آن را به یک مجری ارسال میکند. هر وظیفه توسط یک یال جهتدار در یک مجری اجرا میشود. Spark، وظیفهای به ازای هر پارتیشن داده ایجاد میکند. مجری، ممکن است یک یا چند وظیفه را بصورت همروند اجرا کند. همانطور که واضح است، درجه موازی سازی، توسط تعداد پارتیشنها تعیین میشود.

مدل برنامه نویسی

مجموعه داده های توزیع شده انعطاف پذیر (RDD)

    • مجموعه های غیرقابل تغییر و تقسیم شده اشیا
    • از طریق تحولات موازی (نقشه ، فیلتر ، گروه بندی ، پیوستن ، ...) بر روی داده های ذخیره شده پایدار ایجاد شده است
    • برای استفاده مجدد کارآمد قابل ذخیره سازی است

اقدامات درRDD

    • تعدد ، map، reduce ، پس انداز ،

RDD (Resilient Distributed Datasets)

  • اسپارک مفهوم RDD (مجموعه انعطاف پذیر توزیع شده) را معرفی می کند ، یک مجموعه توزیع شده از اشیا و تحمل ناپذیر در برابر تغییر که می تواند به صورت موازی کار کند. RDD می تواند شامل هر نوع جسمی باشد و با بارگذاری یک مجموعه داده خارجی یا توزیع مجموعه ای از برنامه درایور ایجاد می شود.
  • در واقع RDD از دو نوع عملیات پشتیبانی می کند:
  • تحولات عملیاتی (مانند نقشه ، فیلتر ، map و reduce و غیره) که بر روی RDD انجام می شوند و یک RDD جدید حاوی نتیجه را ارائه می دهند.
  • اقدامات عملیاتی هستند (مانند reduce، شمارش و غیره) که پس از اجرای محاسبات روی RDD مقداری را برمی گردانند.
  • در اسپارک ، همیشه کار خود را با یک مجموعه داده یا پایه (Base RDD) که قرار است پردازش انجام شود ، شروع می کند. این مجموعه با استفاده از RDD پذیرفته می شود و شما می توانید در HDFS ، بانک اطلاعاتی ، پرونده ها و سایر منابع داده را با کمک RDD ها ایجاد کنید. پردازش اصلی داده ها در اسپارک مجموعه عملیاتی و تبدیلاتی است که با بر پایه RDD ، انجام می شود ، اسپارک یک RDD تغییر ناپذیر ایجاد میکند و با هر تبدیل یا انجام یک عمل ، یک RDD جدید ایجاد خواهد شد تا زمانی که به جواب نیاز شما رسیده و پردازش ما به اتمام برسد.
  • منظور از برگشت پذیر بودن این است که هر زمان مشکلی در بخشی از کلاستر بوجود آمد و یک یا چند RDD از بین رفت به راحتی قادر به شروع RDD جدید با استفاده از RDD قبلی بوده تا این مشکل کلاستر ایرادی در روند کار اسپارک بوجود نیاورد و انجام زنجیر و تبدیل و عملیات مورد نیاز کاربر ، دوباره آنها را تولید کرد و باید نگران از بین رفتن آنها نیستیم. لغت Resilient به معنای مقاوم در برابر شکست و خطا و بازگشت آهسته اشاره دارد.

توزیع داده ها در اسپارک و استفاده از یک مجموعه برای تولید RDD

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

تحمل خطای RDD

در اصل RDD اطلاعات نسب را حفظ می کند که می تواند برای بازسازی پارتیشن های از دست رفته استفاده شود.


خب به پایان مقاله رسیدیم امیدوارم تونسته باشم اطلاعات اندکی درباره اسپارک به شما منتقل کرده باشم.

ممنون از همراهیتون

apache sparkbig datamap reducerhdfsrdd partition
شاید از این پست‌ها خوشتان بیاید