آشنایی با آپاچی اسپارک (Spark) و پایتون – راهنمای مقدماتی
آپاچی اسپارک یک فریمورک متن-باز است که از زمان معرفیاش در AMPLab در دانشگاه برکلی در سال 2009 موج بزرگی راه انداخته است، چون هسته مرکزی آن یک موتور پردازش توزیعیافته کلانداده است که میتواند به خوبی مقیاسبندی شود.
مقدمهای بر آپاچی اسپارک
به بیان ساده با رشد دادهها، امر مدیریت دادههای استریمینگ بزرگ و توانایی پردازش و اجرای عملیات دیگر مانند یادگیری ماشین، ضرورت یافته و آپاچی اسپارک نیز این کار را به خوبی انجام میدهد. برخی کارشناسان میگویند که آپاچی اسپارک در آیندهای نزدیک به یک پلتفرم آماده برای محاسبات استریم تبدل میشود.
اغلب افراد دچار این سوءتفاهم هستند که اسپارک جایگزینی برای هادوپ (Hadoop) است، اما باید بدانند که اسپارک تنها یک رقیب برای فریمورک map-reduce هادوپ محسوب میشود. بدین ترتیب با توجه به سریعتر بودن اسپارک یکی از کوتاهترین مسیرهای یادگیری را برای توسعهدهندگان دارد و با در نظر گرفتن این نکته که از سوی شرکتهای بزرگی در بازار استفاده میشود، یک مهارت ساده و مؤثر جهت ارتقا در رزومه هر توسعهدهندهای به حساب میآید.
چنان که در ادامه خواهیم دید، پردازش توزیعیافته یکی از قابلیتهای کلیدی اسپارک است، اما تنها قابلیت آن نیست.
از آنجا که اسپارک بسیار محبوب است، میتوان انتظار داشت که ارائهدهندگان مختلفی به عرضه سرویسهای اسپارک به روشهای مختلف بپردازند. برخی اوقات گزینههایی که وجود دارند بسیار گسترده و سردرگمکننده هستند، بنابراین هیجان و شوق برای یادگیری یک چیز جدید در تلاش برای یافتن گزینهای صحیح از دست میرود.
نکته قابل توجه
در این مقاله، ما به برسی مشخصههای اسپارک و شیوه استفاده از آن برای استریم کردن دادهها نمیپردازیم. به جای آن به ارائه فهرستی از گزینههای ممکن برای آغاز به کار با اسپارک میپردازیم. سپس انتخاب را بر عهده شما میگذاریم تا ماجراجویی خود را آغاز کنید.
پیشنهاد میکنیم پیش از تلاش برای امتحان کردن گزینههای معرفی شده، این مقاله را به طور کامل تا انتها بخوانید. ایده کار این است که گزینههای موجود را درک کنید و سپس گزینهای را که به بهترین وجه نیازهای شما را برآورده میسازد انتخاب کنید و به کار با آن بپردازید.
1. نصب لوکال
نخستین گزینهای که وجود دارد تنظیم لوکال اسپارک است. اگر طرفدار سرویسهای آنلاین نیستید، میتوانید از این گزینه استفاده کنید. در محیط لوکال شما کنترل کاملی روی همه چیز دارید، اما به خاطر داشته باشید که این مسیر زمانبر است.
اگر زمان برایتان مهم است و حوصله سر و کله زدن با نصب موارد مختلف را ندارید، بهتر است از دردسر دوری کنید و به گزینههای 2 و 3 این مقاله مراجعه نمایید.
آن چه برای نصب لوکال نیاز دارید یک نرمافزار Virtual Box، سیستم اوبونتو و زمان و صبر به مقدار کافی است.
Virtual Box (+) اپلیکیشنی است که امکان اجرای یک رایانه مجازی روی سیستم را به شما میدهد. این جایی است که ما اوبونتو، یک سیستم عامل مبتنی بر لینوکس و اسپارک را نصب خواهیم کرد. اگر هم اینک از سیستم اوبونتو استفاده میکنید میتوانید این مرحله را رد کنید.
نرمافزار Virtual Box را از این لینک (+) دانلود کنید و میزبان را بسته به سیستم عامل خود ویندوز یا OS X انتخاب نمایید. زمانی که دانلود پایان یافت، روی فایل دابل کلیک کنید و با پیگیری دستورالعملها و تنظیمات پیشفرض آن را نصب کنید.
در ادامه به این لینک (+) بروید و اوبونتو را دانلود کنید. البته اوبونتو دسکتاپ ترجیح بیشتری دارد. پس از این مرحله، باید یک فایل دانلود شده iso. در اختیار داشته باشید.
بدین ترتیب میتوانید به اپلیکیشن Virtual box بروید. این نرمافزار در ابتدا اساساً خالی است. میتوانید با کلیک کردن روی دکمه New یک ماشین مجازی جدید به آن اضافه کنید. برای این ماشین یک نام تعیین کرده، گزینه Linux را انتخاب کنید و در ادامه Next را بزنید.
پس از این مرحله، وارد یک سری از گزینهها میشوید که میتوانید برای ماشین تنظیم کنید. قبل از هر چیز اندازه حافظه قرار دارد که میتوانید آن را روی مقدار پیشفرض رها کنید، اما بسته به مشخصات سیستم میتوانید مقدار معقولی RAM به ماشین مجازی خود اختصاص دهید.
در وهله دوم نوبت به هارد دیسک میرسد. این گزینه را نیز میتوانید روی مقدار پیشنهادشده 8 گیگابایت رها کنید و گزینه ایجاد یک ماشین مجازی جدید را کلیک کنید و VDI (یعنی ایمیج دیسک ویرچوال باکس) را در پنجره نوع فایل هارد دیسک انتخاب نمایید و next را بزنید.
در وهله سوم نوبت به فضای ذخیرهسازی میرسد. شما میتوانید اندازه با تخصیص دینامیک یا ثابت را انتخاب کنید. اندازه ثابت پیشنهاد میشود، چون سرعت ورودی/ خروجی بهتری دارد. 20 گیگابایت میتواند مقدار مناسبی باشد. در ادامه روی Create کلیک کنید.
زمانی که روی Create کلیک کردید، ایجاد ماشین کمی طول میکشد. زمانی که ماشین مجازی آماده شد، میتوانید به صفحه اصلی ویرچوال باکس بازگردید، چنان که میبینید ماشین جدیدی که تنظیم کردیم اینک ایجاد شده است.
به صورت پیشفرض این ماشین خاموش است، اما میتوانید آن را با دو بار کلیک کردن روشن کنید. در طی نخستین زمان روشن شدن از شما خواسته میشود که دیسک آغازین را انتخاب کید. این امر مهمی است و جایی است که به ایمیج Ubuntu.iso که قبلاً دانلود کردهاید اشاره میکنید. فایل Ubuntu.iso را انتخاب کرده و روی start کلیک کنید. بدین ترتیب اوبونتو روی ماشین مجازی نصب میشود. در این مسیر گزینههای نصب زیادی در اختیار شما قرار میگیرند و میتوانید آن را سفارشیسازی کرده و یا مقادیر پیشفرض را حفظ کنید. در هر صورت مشکلی وجود ندارد و در انتها یک سیستم عامل آماده به کار در اختیار شما قرار میگیرد که البته از نوع مجازی است.
نخستین کاری که باید درون ماشین مجازی انجام دهید این است که مطمئن شود پایتون از قبل نصب شده است. به این منظور به اپلیکیشن ترمینال اوبونتو بروید و عبارت python3 را وارد کرده و اینتر کنید. بدین ترتیب یک خروجی مانند تصویر زیر باید مشاهده کنید:
نسخه پایتون ممکن است متفاوت باشد، اما تا زمانی که بالاتر از 3 باشد مشکلی وجود ندارد.
سپس قصد داریم یک سری نرمافزارها را نصب کنیم که برای اجرای اسپارک روی ماشین مجازی ضروری هستند.
Jupyter Notebook
نصب ژوپیتر نتبوک یکی از سادهترین روشها برای تعامل با پایتون و نوشتن کد خوب محسوب میشود. به این منظور روی همان ترمینال یا یک پنجره جدید، دستور زیر را وارد کنید:
pip3 install jupyter
این دستور باید سیستم ژوپیتر نتبوک را نصب کند. زمانی که کار پایان یافت، میتوانید با وارد کردن دستور زیر در ترمینال آن را تست کنید:
jupyter notebook
بدین ترتیب اینترفیس ژوپیتر نتبوک در یک مرورگر باز میشود. این امر نشان میدهد که نصب نتبوک کامل بوده است.
جاوا
اکنون نوبت به نصب جاوا رسیده است که برای اجرای اسپارک ضروری است. در یک پنجره ترمینال دیگر این دستورها را یکی پس از دیگری وارد کنید:
sudo apt-get update sudo apt-get install default-jre
نخستین دستور مکانیسم apt-get ما را بهروزرسانی خواهد کرد و پس از آن جاوا با استفاده از دستور دوم نصب میشود.
اسکالا
به طور مشابه اسکالا را نیز نصب میکنیم.
sudo apt-get install scala
برای تست کردن این نکته که آیا نصب موفق بوده است یا نه میتوانید دستور زیر را وارد کنید که به نسخه اسکالای نصب شده اشاره میکند:
scala –version
نصب Py4j
اکنون نوبت به نصب یک کتابخانه پایتون رسیده است که جاوا و اسکالا را به پایتون وصل میکند:
pip3 install py4j
اسپارک و هادوپ
اکنون که به انتها رسیدهایم باید اسپارک و هادوپ را نصب کنیم. به این منظور به این لینک (+) بروید و نسخه اسپارک را مستقیماً دانلود کنید. مطمئن شوید که این گام را روی ماشین مجازی انجام میدهید تا مستقیماً روی آن دانلود شود.
یک ترمینال جدید باز کنید و مطمئن شوید که در همان مکانی قرار دارید که فایلها دانلود شده بودند. میتوانید به پوشه صحیح cd کرده و دستور زیر را اجرا کنید (توجه داشته باشید که نام فایل بسته به نسخه اسپارک مورد استفاده میتواند متفاوت باشد):
sudo tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz
دستور فوق اساساً پکیج را از حالت فشرده خارج میکند و پوشههای مورد نیاز را میسازد. سپس باید به پایتون اعلام کنیم که کجا میتواند اسپارک را پیدا کند. دستورهای زیر را در ترمینال وارد کرده و پس از هر خط اینتر را بزنید. به مسیر SPARK_HOME دقت کنید، چون باید مکانی باشد که پوشه unzip شده در آن قرار دارد.
export SPARK_HOME=’home/ubuntu/spark-2.1.0-bin-hadoop2.7' export PATH=@SPARK_HOME:$PATH export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH export PYSPARK_DRIVER_PYTHON=”jupyter” export PYSPARK_DRIVER_PYTHON_OPTS=”notebook” export PYSPARK_PYTHON=python3
اگر در تمام طول این مسیر با ما همراه بوده و دستورها را اجرا کرده باشید، اینک همه چیز آماده شده است. یک پنجره ترمینال باز کنید و به مسیر زیر cd کنید:
cd /spark-2.1.0-bin-hadoop2.7/python
زمانی که در دایرکتوری صحیح قرار گرفتید، ژوپیتر نتبوک را باز کنید:
jupyter notebook
اکنون باید مرورگر خود را ببینید که با سیستم ژوپیتر نتبوک باز شده است. یک نتبوک جدید پایتون ایجاد کنید و در یک سلول خالی دستور زیر را وارد کرده و Ctrl+Enter بزنید.
import pyspark
اینک ماشین مجازی ما به همراه اسپارک نصب شده آماده است و میتوانیم کار خود را آغاز کنیم.
2. Databricks
Databricks پلتفرمی است که از سوی خالقان اصلی آپاچی اسپارک ساخته شده و روشی عالی برای بهرهبرداری از قدرت اسپارک در یک مرورگر محسوب میشود. Databricks زحمت نصب دشوار و استفاده از توان محاسباتی اسپارک در مرورگر را از دوش ما بر میدارد. اگر میخواهید به سرعت با اسپارک آشنا شود این بهترین راهی است که میتوانید امتحان کنید. اگر نصب لوکال یک غذای خانگی باشد، Databricks را میتوان یک بشقاب غذای لذیذ آماده تصور کرد. اینک تنها چیزی که نیاز دارید یک مرورگر و یک اتصال اینترنتی خوب است.
با این که Databricks به منظور استفاده از سوی شرکتهایی که به سمت کلانداده و محاسبات توزیع یافته حرکت میکنند طراحی شده است، اما یک نسخه کامیونیتی نیز دارد که برای منظور ما مناسب است.
برای شروع کار به این لینک (+) بروید و در نسخه کامیونیتی ثبت نام کنید. شما باید آدرس ایمیل خود را اعتبارسنجی کنید تا بتوانید برای نخستین بار وارد شوید. زمانی که این کار را انجام دادید امکان کار با محیط نتبوک پایتون که از قبل نصب شده را خواهید یافت.
هنگامی که لاگین کردید، روی Create a Blank Notebook کلیک کنید تا کار را آغاز کنید. در این هنگام یک ژوپیتر نتبوک عرضه میشود که میتوان کد پایتون را در هر سلول آن وارد کرده و به صورت مستقل اجرا کرد.
Databricks برای اسپارک ساخته شده است و نیازی به نگرانی در مورد نصب موارد اضافی وجود ندارد. شما میتوانید بیدرنگ عبارت spark را در سلول نخست وارد کنید و با زدن کلیدهای Ctrl+Enter یا دکمه پخش کوچک در سمت راست سلول آن را اجرا کنید:
در نخستین دفعه اجرا از شما خواسته میشود که یک کلاستر را لانچ و اجرا کنید. این کار را انجام دهید و پس از آن میبینید که چیزی مانند تصویر فوق ظاهر میشود. اینک میتوانید سلولهای اضافی ایجاد کرده و به ارزیابی اسپارک ادامه دهید. شما اینک میتوانید به بررسی مجموعه دادهها پرداخته و عملیات مختلف یادگیری ماشین را اجرا کنید.
نکته: ابزار Databricks به دلایل مختلف جالب است و مهمتر از همه این که مخزن داده عظیمی ارائه میکند که با استفاده از آن میتوانید همه قدرتش را مورد آزمایش قرار دهید.
برای بررسی اجمالی آن چه که Databricks ارائه میکند، باید با استفاده از دستور magic به «file system» مربوط به Databricks بروید. در یک سلول جدید عبارت fs% را وارد کنید و سپس ls را وارد کرده و سلول را اجرا کنید. بدین ترتیب مسیرهای dbfs را به صورت فهرستبندی شده مشاهده میکنید:
سپس روی ls /databricks-datasets/ کلیک کنید تا همه مجموعه دادههای موجود را ببینید. اگر به هر کدام از آنها علاقهمند هستید میتوانید به سادگی از آنها در کد خود استفاده کنید. برای نمونه ما دادههای ساده people/people.json/ را دوست داریم و میخواهیم از آن در کد خود استفاده کنیم. این کار به صورت زیر میسر است:
data = spark.read.json(“/databricks-datasets/samples/people/people/.json”)
به بررسی این پلتفرم بپردازید و مجموعههای داده مختلف را امتحان کنید، مسلماً ناامید نخواهید شد. شاید این سادهترین روش استفاده از اسپارک باشد.
3. Google Colab
Google Colaboratory (+) یک محیط رایگان ژوپیتر نتبوک است که شباهت زیادی به Databricks دارد و به طور کامل روی کلود اجرا میشود، اما همه شهرت آن از این ناشی نمیشود که یک سیستم رایگان نتبوک است، بلکه بخش عمده آن ناشی از ارائه GPU رایگان است. بله درست شنیدهاید، Colab امکان استفاده رایگان از GPU را فراهم میسازد. این یک پیشنهاد عالی برای افرادی است که میخواهند یادگیری ماشین را بیاموزند. البته این موضوع مجزایی است و با موضوع مقاله ما که معرفی اسپارک است ارتباط مستقیمی ندارد.
برای استفاده از Google Colab به یک مرورگر وب، یک اتصال اینترنتی خوب و یک حساب گوگل نیاز دارید. به این لینک (+) بروید و از طریق حساب گوگل وارد شوید تا صفحهای برای ایجاد «New Python 3 Notebook» مشاهده کنید. در ادامه یک نتبوک بسازید.
این مرحله ما را وارد سرزمین آشنایی میکند که یک نتبوک پایتون یا یک سلول خالی است. Google Colab برخلاف Databricks آماده استفاده با اسپارک است و از این رو نیازی به همان تنظیمات اندک آغازین هم نداریم. اگر pyspark را در سلول خالی اجرا کنید با خطایی به صورت زیر مواجه خواهید شد.
در ادامه این خطا را اصلاح میکنیم. Google Colab هم شبیه به یک ماشین مجازی و هم یک نتبوک عمل میکند. دستور زیر را در یک سلول خالی وارد کرده و با زدن Ctrl+Enter جاوا را نصب میکنیم:
!apt install openjdk-8-jdk-headless -qq > /dev/null
با استفاده از علامت (!) در ابتدای دستور آن را در یک پوسته (Shell) اجرا میکنیم و نشان میدهیم که یک کد پایتون نیست. اینک اسپارک و هادوپ را دانلود میکنیم.
!wget -q http://www-eu.apache.org/dist/spark/spark-2.3.3/spark-2.3.3-bin-hadoop2.7.tgz
زمانی که دانلود پایان یافت، میتوانید با اجرای ls -l! همانند یک پوسته لینوکسی در عمل ببینید که آیا فایل دانلود شده یا نه.
چنان که میبینید فایل با فرمت یک فایل zip دانلود شده، پس باید آن را از حالت فشرده خارج کنیم:
!tar xf spark-2.3.3-bin-hadoop2.7.tgz
اکنون قبل از شروع به کار با اسپارک باید چند کار دیگر نیز انجام دهیم که تنظیم متغیرهای جاوا و اسپارک به صورت زیر است:
import os os.environ[“JAVA_HOME”] = “/usr/lib/jvm/java-8-openjdk-amd64” os.environ[“SPARK_HOME”] = “/content/spark-2.3.3-bin-hadoop2.7”
این همه کاری است که برای راهاندازی نیاز داریم. اکنون به بررسی کد نمونه زیر میپردازیم:
کد فوق با ایجاد یک SparkSession جدید اقدام به مقداردهی اسپارک میکند و سپس یک فریم داده جدید اسپارک به صورت on fly با استفاده از list comprehension پایتون میسازد و در نهایت فریم داده نمایش مییابد. آن را در یک سلول جدید امتحان کنید.
سخن پایانی
بدین ترتیب به پایان این مقاله رسیدهایم و امیدواریم راهنمای اطلاعات تنظیم اسپارک مورد توجه شما قرار گرفته باشد. ما نهایت تلاش خود را کردهایم که کل فرایند برای خواننده روشن باشد و از این رو امیدواریم بتوانید بدون نگرانی در مورد حجم بالای اطلاعات، اسپارک را نصب و راهاندازی کنید و صرفاً روی شروع کار متمرکز شوید.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی پایتون Python
- مجموعه آموزشهای برنامهنویسی
- ابزارهای تحلیل کلان داده (Big Data) — راهنمای کامل
- ۱۳ کتابخانه یادگیری عمیق پایتون — راهنمای کاربردی
- یادگیری علم داده (Data Science) با پایتون — از صفر تا صد
==
سلام..
خیلی ممنون، عالی و پر واضح بود.