بررسی آپاچی Airflow معایب و مزایای آن

بررسی آپاچی Airflow معایب و مزایای آن

نوشته شده توسط: تیم فنی نیک آموز
تاریخ انتشار: ۲۷ دی ۱۴۰۰
آخرین بروزرسانی: ۲۱ مهر ۱۴۰۱
زمان مطالعه: 9 دقیقه
۱.۵
(۲)

مقدمه

هنگام شروع کار با آپاچی Airflow، مهندسان داده سوالاتی مشابه دو مورد زیر دارند:

نظر افراد متخصص در مورد آپاچی Airflow چیست؟
آپاچی Airflow چه مشکلاتی دارند که باید از آن مطلع باشم؟

در این مقاله، به این می‌پردازیم که چرا Airflow محبوب است (مزایا) و برخی از مشکلات آن (معایب) کدام است. در این مقاله فرض بر این است که شما دانش اولیه‌ای از آپاچی Airflow و مفهوم DAG ها و تسک‌ها دارید.

مزایای آپاچی Airflow

۱) مدیریت وابستگی

مدیریت وابستگی ارائه دهنده جریان داده از طریق خط پردازش داده است. می‌توان آن را به صورت روال انجام تسک‌ها، task A -> Task B -> Task C برای یک مورد ساده تجسم کرد، اما در موارد استفاده واقعی بسیار پیچیده‌‌تر است به عنوان مثال یک سناریوی fan-out را در نظر بگیرید که در آن Task A انجام می‌شود، تسک‌های Task B, Task C, Task D به صورت موازی انجام می‌شوند و سپس Task E انجام می‌شود.
قبل از Airflow، مدیریت وابستگی‌های پیچیده با نوشتن کل خط پردازش داده در یک اسکریپت یا داشتن پایگاه داده‌ای با قابلیت زمان‌بندی برنامه و تعداد اجرا انجام می‌شد. یکی از اهداف اصلی Airflow مدیریت وابستگی‌ها بود. Airflow این کار را بسیار خوب انجام می‌دهد، جریان داده استاندارد، شاخه‌های پیچیده با استفاده از BranchPythonOperator، تلاش مجدد تسک، اجرای catchup و غیره را امکان‌پذیر می‌کند.

۲) قالب‌ها و ماکروها

کل مدل Airflow طوری طراحی شده است که بر اساس یک برنامه زمان‌بندی شده کار کند، معمولاً این کار را با اجرای اسکریپت‌ها با بازه‌های زمانی متفاوت اجرا می‌کند. به این ترتیب گزینه‌ای برای داشتن اسکریپت‌های قالب وجود دارد که می‌توانند با مقدار زمانی مناسب در زمان اجرای DAG کامل شوند. به عنوان مثال:

from airflow import DAG
from airflow.operators.mysql_operator import MySqlOperator
default_arg = {'owner': 'airflow', 'start_date': '2020-02-28'}
dag = DAG('simple-mysql-dag',
default_args=default_arg,
schedule_interval='0 0 * * *')
mysql_task = MySqlOperator(dag=dag,
mysql_conn_id='mysql_default',
task_id='mysql_task'
sql='<path>/sample_sql.sql',
params={'test_user_id': -99})
mysql_task

و فایل SQL در sample_sql.sql به صورت زیر پیاده‌سازی می‌گردد:

USE your_database;
DROP TABLE IF EXISTS event_stats_staging;
CREATE TABLE event_stats_staging
AS SELECT date
, user_id
, sum(spend_amt) total_spend_amt
FROM event
WHERE date = {{ macros.ds }}
AND user_id <> {{ params.test_user_id }}
GROUP BY date, user_id;
INSERT INTO event_stats (
date
, user_id
, total_spend_amt
)
SELECT date
, user_id
, total_spend_amt
FROM event_stats_staging;
DROP TABLE event_stats_staging;

در کد بالا، هنگامی که DAG در حال اجرا است Macros.ds با Execution_time جایگزین می‌شود. علاوه بر ماکروهای داخلی، می‌توانید پارامترها را در زمان اجرا با ارسال آن در قسمت پارامترهای اپراتور تسک نیز ارسال کنید.

۳) اپراتورها

آپاچی Airflow اپراتورهای زیادی دارد که می‌توانید برای ساخت خط پردازش داده خود از آنها استفاده کنید. اگر در حال شروع کار با Airflow برای پروژه خود هستید، قبل از پیاده‌سازی، اپراتور مورد استفاده خود را جستجو کنید. در صورتی که یک مورد استفاده منحصر به فرد دارید، می‌توانید با ارث بردن از BaseOperator یا نزدیک‌ترین اپراتور موجود، اپراتور خود را بنویسید، شاید تنها چیزی که نیاز دارید یکسری تغییرات کوچک در یک اپراتور موجود باشد.

۴) رابط کاربری و لاگ‌ها

آپاچی Airflow یک رابط کاربری عالی دارد که در آن می‌توانید وضعیت DAG های خود را ببینید، زمان‌های اجرا را بررسی کنید، لاگ‌ها را بررسی کنید، تسک‌ها را دوباره اجرا کنید و موارد دیگر. به طور پیش‌فرض، این موارد برای هر کسی که به سرور دسترسی دارد باز است، اما در صورت نیاز می‌توانید احراز هویت اضافی را تنظیم کنید. لاگ‌ها را می‌توان با حافظه خارجی همگام‌سازی کرد و راهی آسان برای بررسی خطاها و غیره فراهم کرد.

۵) بر اساس اصول تابعی

آپاچی Airflow بر اساس اصول تابعی طراحی شده است. ایده‌های کلیدی تغییرناپذیری داده‌ها و idempotence هستند.
تغییرناپذیری داده‌ها به معنای، ذخیره داده‌های خام و پردازش آنها و ذخیره داده‌های پردازش شده به طور جداگانه است. این روال گزینه‌ای را در اختیار ما قرار می‌دهد تا در صورت بروز خطا، فرآیند داده را دوباره اجرا کنیم. فرآیند idempotence فرآیندی است که در آن با یک ورودی یکسان در اجراهای متعدد، خروجی همیشه یکسان خواهد بود. این روال باعث می‌شود که فرآیند تست و اجرای مجدد آسان‌تر شود.
با پیروی از این اصول، داده‌ها از طریق خط پردازش داده جریان می‌یابد، در هر تسک تبدیل داده انجام شده و خروجی‌ای تولید می‌شود که در تسک بعدی مورد استفاده است. در انتهای خط پردازش داده، داده‌های خام و داده‌های تبدیل شده را خواهید داشت. این مفاهیم به ما در مدیریت، عیب‌یابی و Backfill داده‌ها کمک می‌کند. Backfill فرآیندی است که در آن به دلیل تغییر در منطق تجاری، خطای کد و غیره باید خط پردازش داده خود را دوباره اجرا کنید.

۶) متن باز

آپاچی Airflow یک پروژه متن باز بسیار فعال با یک جامعه فعال بزرگ است. این بدان معناست که برای اکثر مشکلاتی که با آن مواجه هستید، می‌توانید به صورت آنلاین پاسخی پیدا کنید، می‌توانید کد منبع را بخوانید تا بفهمید که چگونه کار می‌کند و سپس پیاده‌سازی خود را انجام دهید.

معایب آپاچی Airflow

۱) مدل پردازش داده برای مهندسان تازه کار گویا نیست

مهندسان تازه کار برای درک روشی که قرار است از آپاچی Airflow استفاده شود، مشکل دارند. رایج‌ترین شکایت نوشتن موارد تست است. نوشتن موارد تست برای خطوط پردازش داده که داده‌های خام را مدیریت می‌کنند بسیار دشوار است. پیشرفت‌هایی در این زمینه صورت گرفته است، مانند great_expectations. شکایات دیگر از نوشتن تسک‌های non-idempotent ناشی می‌شود که در صورت شکست و تلاش مجدد منجر به داده‌های تکراری یا داده‌های نامرتب یا خرابی می‌شود.

۲) تغییر زمان‌بندی نیاز به تغییر نام DAG دارد

اگر تصمیم به تغییر زمان‌بندی در پروژه خود داشته باشید، باید نام DAG خود را نیز تغییر دهید. زیرا نمونه‌های تسک قبلی با زمان‌بندی جدید هماهنگ نمی‌شوند.

۳) مشکل CI/CD

اگر آپاچی Airflow را در داکر مستقر می‌کنید، فرآیند CI/CD که کانتینر داکر را مجدداً راه‌اندازی می‌کند، فرآیندهای در حال اجرا را از بین می‌برد، باید استقرار را برای موقعی برنامه ریزی کنید که هیچ فعالیتی در میانه اجرا قرار نداشته باشد. در زمان راه اندازی مجدد یا اجرای مجدد اگر تعدادی DAG دارید، این روش خوب است، اما اگر تعداد DAG ها زیاد است، توصیه می‌شود از ابزاری مانند git-sync یا S3 sync استفاده کنید، که باعث می‌شود فایل های DAG شما با حافظه خارجی همگام‌سازی شوند و استقرار شما اساسا همگام می‌شود.

۴) از ویندوز بومی پشتیبانی نمی کند

اجرای بومی Airflow روی ویندوز کار ساده‌ای نیست. اما این مشکل را تا حدی می‌توان با استفاده از داکر پوشش داد.

نتیجه‌گیری

با وجود تمام معایب آپاچی Airflow، همچنان یک فریم‌ورک پردازش دسته‌ای عالی برای مدیریت خطوط پردازش داده ETL است. شرکت‌های زیادی وجود دارند که از Airflow برای مزایایی که ارائه می‌دهد استفاده می‌کنند. امیدواریم این مقاله ایده‌های خوبی در مورد مزایا و معایب آپاچی Airflow به شما داده باشد.

منابع

https://www.startdataengineering.com/post/apache-airflow-review-the-good-the-bad

چه رتبه ای می‌دهید؟

میانگین ۱.۵ / ۵. از مجموع ۲

اولین نفر باش

title sign
معرفی نویسنده
تیم فنی نیک آموز
مقالات
402 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
تیم فنی نیک آموز
title sign
دیدگاه کاربران