نصب آپاچی ایرفلو در داکر
یکی از تسکهای مهم در مهندسی داده، مدیریت جریانهای کاری است. ازجمله ابزارهای برتر و معروفی که برای این منظور بهکار میرود، آپاچی ایرفلو (Apache Airflow) است. استفاده از این ابزار و تسلط بر آن تا اندازهای اهمیت دارد که نحوه کار با آن، تقریباً پای ثابت تمامی آزمونهای استخدام بهعنوان متخصص داده است. در این مقاله، قصد داریم علاوهبر ارائه جزئیات مهمی درباره این ابزار، نحوه نصب آن روی Docker را نیز به شما آموزش دهیم.
Apache Airflow چیست و چه کاربردی دارد؟
قبل از اینکه بهسراغ معرفی آپاچی ایرفلو برویم، اجازه دهید درباره موضوعی بنیادیتر، یعنی «جریان کار»، صحبت کنیم. جریان کار به فعالیتهایی گفته میشود که با استفاده از زمانبندی و بهصورت گامبهگام، در بازه زمانی تعریفشدهای انجام میشود. مثالی موردی به درک بیشتر این موضوع میتواند به شما کمک کند. فرض کنید قرار است برنامهای هر سه ساعت یک بار اطلاعاتی از دیتابیس دریافت و تغییراتی ازپیشتعیینشده را روی آنها اِعمال کند. درنهایت نیز، قرار است این اطلاعات ویرایششده در دیتابیس ذخیره شوند.
همین مسئله در Apache Airflow بهصورت ساده و گرافیکی میتواند برنامهریزی شود. در ایرفلو، روابط بین تسکهای مختلف با استفاده از گراف بیان میشود که در آن، نودها نشاندهنده تسکهایی هستند که در این فرایند وجود دارند و یالها نیز این تسکها را به یکدیگر ارتباط میدهند. استفاده از این ابزار، مزایای فراوانی دارد. بهعنوان مثال، همین ارتباط گرافیکال بین تسکها باعث میشود تا فهم این روابط سادهتر شود. همچنین، با استفاده از ایرفلو این امکان برایتان فراهم میشود تا تسکهای مختلف را بهصورت موازی با یکدیگر پیش ببرید. توجه کنید که در برخی از پروژهها، این روابط پیچیدگیهای زیادی دارند؛ بههمیندلیل، آنها را با روابط خطی و ساده نمیتوان مدلسازی کرد.
اجرای Apache Airflow روی Docker
حالا میخواهیم نحوه اجرای ایرفلو را روی داکر آموزش دهیم. برای این منظور از CeleryExecutor استفاده کنید. توصیه ما این است که برای این کار Kubernetes را با Helm Chart اصلی بهکار ببرید. اگر نمیدانید Helm Chart چیست، جواب سؤال اول از قسمت سؤالات متداول را مطالعه کنید.
قبل از شروع به کار
ابتدا گامهای زیر را برای نصب ابزارهای موردنیاز طی کنید:
- ابتدا Docker Community Edition یا CE را نصب کنید. فراموش نکنید که بسته به سیستمعاملتان، ممکن است نیاز داشته باشید پیکربندی Docker را برای استفاده از ۴ گیگابایت از حافظه، برای تمامی کانتینرها انجام دهید.
- Docker Compose را نیز روی سیستم خود نصب کنید. باتوجهبه اینکه نسخههای قدیمیتر از تمامی ویژگیهای موردنیاز برای فایل docker-compose.yaml پشتیبانی نمیکند، فقط از نسخه 1.29.1 یا نسخههای جدیدتر استفاده کنید.
نکته: حافظه پیشفرض موجود در سیستمعامل MacOS در اغلب مواقع برای اجرای Airflow کافی نیست. توجه کنید که حداقل میزان RAM اختصاصدادهشده برای موتور داکر ۴ گیگابایت و حداکثر آن نیز ۸ گیگابایت است. درصورتیکه این حداقل تأمین نشود، احتمال ریاستارتشدن وبسرور Airflow وجود دارد. با استفاده از دستور زیر، میتوانید بررسی کنید که آیا حافظه کافی دارید یا خیر:
docker run –rm “debian:bullseye-slim” bash -c ‘numfmt –to iec $(echo $(($(getconf _PHYS_PAGES) * $(getconf PAGE_SIZE))))’
برای پیادهسازی Airflow در داکر، باید docker.compose.yaml را در اصطلاح واکشی (فچ) کنید. این کار با استفاده از کدنویسی بهصورت زیر امکانپذیر است:
curl -LfO ‘https://airflow.apache.org/docs/apache-airflow/2.3.3/docker-compose.yaml’
این فایل شامل چندین سرویس است که درادامه به آنها اشاره کردهایم:
- Airflow–Scheduler: وظیفه Scheduler زمانبندی تمامی تسکها و DAGهاست.
- Airflow–Webserver: وبسرور روی پورت ۸۰۸۰، یعنی آدرس http://localhost:8080 دردسترس است.
- Airflow–Worker: وظیفه این سرویس اجراکردن تسکهایی است که سرویس Scheduler ارائه میدهد.
- Airflow–Init: این سرویس وظیفه مقداردهی اولیه را برعهده دارد.
- Postgres: این سرویس به پایگاهداده مربوط است.
- Redis: حین انجام تسکها، پیغامهایی که Scheduler میفرستد، باید به طریقی به سرویس Worker منتقل شود. Redis این وظیفه را برعهده دارد.
بهطورکلی، اگر میخواهید از Airflow بهصورت Local استفاده کنید، DAGها ممکن است به سرورهایی متصل شوند که روی هاست خود دارید. برای دسترسی به این بخش، باید یک پیکربندی اضافی را در docker-compose.yaml انجام دهید. بهعنوان نمونه، اگر از سیستمعامل لینوکس استفاده میکنید، این پیکربندی باید در بخش Service انجام شود. برای این منظور، باید تغییرات زیر را انجام دهید:
- در بخش Airflow-Worker، باید کدهای زیر را اضافه کنید: extra_hosts: – “host.docker.internal:host-gateway”
- بهجای Localhost نیز، باید از Host.doker.internal استفاده کنید.
تمامی این سرویسها به شما امکان میدهد که Apache Airflow را با استفاده از CeleryExecutor اجرا کنید. البته باید توجه کنید که این پیکربندی در سیستمعاملهای متفاوت، ممکن است تغییراتی کند.
استفاده از تصاویر سفارشی
گاهی اوقات پیش میآید که نیاز دارید تا از Apache Airflow بهصورت Local استفاده کنید. حالا اگر بخواهید در محیط Local از تصاویر گسترشیافته استفاده کنید، احتمالاً احتیاج خواهید داشت تا از برخی از ویژگیهای دیگر نیز استفاده کنید. برای مثال، ممکن است به پکیجهای جدیدی از Python یا ارتقای Apache Airflow به نسخههای جدیدتر نیاز پیدا کنید.
این کار با استفاده از قراردادن Dockerfile سفارشی درکنار docker-compose.yaml بهسادگی امکانپذیر است. سپس، میتوانید از دستور docker-compose برای ساخت تصویر موردنیاز خود بهره ببرید؛ البته فقط یک بار باید این کار را انجام دهید. علاوهبراین، میتوانید Docker Flag را به دستورهای docker-compose اضافه کنید تا پسازآن، هنگام اجرای دستورهای docker-compose، تصاویر نیز مستقیماً ساخته شوند.
محیط اولیه
قبل از اینکه برای اولینبار از Apache Airflow استفاده کنید، باید محیط استفاده از آن را آماده کنید. بهعنوان نمونه، در ابتدا باید فایلها و پوشههای لازم را ایجاد و پایگاهداده را نیز مقداردهی اولیه کنید.
تنظیمات مربوط به کاربر در Airflow
در سیستمعامل لینوکس، قابلیت Quick Start باید شناسه کاربری Host را بشناسد. همچنین، شناسه گروه (Group ID) باید روی 0 تنظیم شده باشد؛ درغیراینصورت، فایلهایی که در DOGها و گزارشها و پلاگینها ایجاد میشوند، با کاربر Root ایجاد خواهند شد. علاوهبراین، باید مطمئن شوید که این موارد را روی docker-compose پیکربندی کردهاید. این کار با کدنویسی بهصورت زیر امکانپذیر است:
mkdir -p ./dags ./logs ./plugins
echo -e “AIRFLOW_UID=$(id -u)“ > .env
مقداردهی اولیه دیتابیس
درمجموع در تمامی سیستمعاملها، باید انتقال پایگاهداده را انجام دهید و اولین حساب کاربری را نیز بسازید. برای این منظور، میتوان بهصورت زیر کدنویسی کرد:
docker-compose up airflow-init
درصورتیکه مقداردهی به پایگاهداده بهدرستی انجام شده باشد، باید پیغامی مشابه پیغام زیر دریافت کنید:
airflow-init_1 | Upgrades done
airflow-init_1 | Admin user airflow created
airflow-init_1 | 2.3.3
start_airflow-init_1 exited with code 0
در این مثال، حساب ساختهشده هم Login و هم رمزعبور Airflow دارد.
برطرفکردن خطاها و راهاندازی مجدد
فراموش نکنید docker-compose که ما به این شیوه ایجاد میکنیم، درواقع مسیری برای شروع سریع (Quick Start) است؛ بههمیندلیل، ممکن است که تعدادی خطا نیز داشته باشد. بنابراین، باید کدهای خطا را رفع و دوباره راهاندازی کنیم.
بهترین راه برای انجام این کار، ازاینقرار است:
- در همان پوشهای که دانلود docker-compose.yaml را انجام دادهاید، فرمان docker-compose down –volumes –remove-orphans را اجرا کنید.
- کل پوشهای را حذف کنید که docker-composer.yaml را در آن دانلود کردهاید.
- مجدداً فایل docker-composer.yaml را دانلود کنید.
- دستورالعمل ارائهشده در این مقاله را از ابتدا انجام دهید.
اجرای Apache Airflow
حالا میتوانید تمامی سرویسهای Airflow را راهاندازی کنید. برای این منظور، از فرمان زیر استفاده کنید:
docker-compose [catcbll pid=”Please change it to your product ID” background=”#fff” font_size=”12″ font_color=”#000″ font_awesome=”fas fa-adjust” border_color=”red” border_size=”2″ icon_position=”right” image=”false”]up
در ترمینال دوم نیز، میتوانید وضعیت کانتینرها را بررسی کنید و از سالمبودن تمامی کانتینرها مطمئن شوید. این کار با استفاده از فرمان زیر امکانپذیر است:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
247ebe6cf87a apache/airflow:2.3.3 “/usr/bin/dumb-init …” 3 minutes ago Up 3 minutes (healthy) 8080/tcp compose_airflow-worker_1
ed9b09fc84b1 apache/airflow:2.3.3 “/usr/bin/dumb-init …” 3 minutes ago Up 3 minutes (healthy) 8080/tcp compose_airflow-scheduler_1
7cb1fb603a98 apache/airflow:2.3.3 “/usr/bin/dumb-init …” 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:8080->8080/tcp compose_airflow-webserver_1
74f3bbe506eb postgres:13 “docker-entrypoint.s…” 18 minutes ago Up 17 minutes (healthy) 5432/tcp compose_postgres_1
0bd6576d23cb redis:latest “docker-entrypoint.s…” 10 hours ago Up 17 minutes (healthy) 0.0.0.0:6379->6379/tcp compose_redis_1
جمعبندی
ابزارهای متعددی برای مهندسی داده بهکار برده میشوند. یکی از این ابزارهای مهم، Apache Airflow محسوب میشود و در علم داده، تسلط بر آن بسیار اهمیت دارد. بههمیندلیل، در آزمونهای استخدامی سؤالات متعددی از همین ابزار مطرح میشود. یکی از مسائل مهم برای استفاده از Apache Airflow، نصب آن روی Docker است. در این مقاله، نحوه انجام این کار را بهصورت عملی و گامبهگام توضیح دادیم.
سؤالات متداول
۱. Helm Chart چیست؟
Helm ابزاری است که با استفاده از آن میتوان برنامهها را با استفاده از Kubernetes بهسادگی نصب کرد. همچنین، مدیریت نسخههای نرمافزارهای نصبشده با این ابزار بسیار راحتتر است.
۲. DAG چیست؟
DAG مخفف Directed Acyclic Graph و بهمعنای «گراف غیرمدوّر و هدایتشده» است. این مفهوم یکی از مفاهیم اساسی در Apache Airflow بهشمار میرود.
۳. Docker چیست؟
داکر یکی از پلتفرمهای متنبازی است که برپایه سیستمعامل Linux طراحی شده است. در تعریفی ساده، داکر ابزاری است که با کمک آن، برنامهها را با استفاده از Container بسیار ساده و سریع میتوانید ایجاد و اجرا کنید.
۴. Apache Airflow چیست؟
آپاچی ایرفلو یکی از نرمافزارهای بسیار مهم در مهندسی داده است. با استفاده از این نرمافزار، میتوانید بهصورت کاملاً حرفهای مدیریت جریانهای کاری را انجام دهید.
دیدگاهتان را بنویسید