از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
اجرای جریان هوا به صورت محلی با داکر: راهنمای فنی
سرفصلهای مطلب
معرفی
Apache Airflow و Docker دو ابزار قدرتمندی هستند که شیوه مدیریت داده ها و استقرار نرم افزار را متحول کرده اند. Apache Airflow یک پلت فرم منبع باز است که به شما امکان می دهد تا به صورت برنامه نویسی، برنامه ریزی و نظارت بر گردش کار را انجام دهید. داکر، روی از سوی دیگر، پلتفرمی است که توسعه دهندگان را قادر می سازد تا برنامه ها را در کانتینرها بسته بندی کنند – اجزای اجرایی استاندارد شده که کد منبع برنامه را با کتابخانه های سیستم عامل و وابستگی های مورد نیاز برای اجرای آن کد در هر محیطی ترکیب می کنند.
اجرای Airflow به صورت محلی با Docker به دلایل مختلفی ایده خوبی است. ابتدا، Docker یک محیط منزوی و ثابت برای تنظیم جریان هوای شما فراهم میکند و احتمال مواجهه با مشکلات را به دلیل تفاوت در وابستگیها، کتابخانهها یا حتی سیستمعامل کاهش میدهد. دوم، Docker نسخه، توزیع و تکرار تنظیمات جریان هوا را آسان میکند، که میتواند به ویژه در یک محیط تیمی یا هنگام انتقال از توسعه به تولید مفید باشد.
راه اندازی شما Local محیط
برای شروع، باید نرم افزار زیر را نصب کنید روی ماشین شما:
- پایتون (نسخه 3.6 یا بالاتر)
- داکر (نسخه 20.10.11)
- Docker Compose (نسخه 2.2.1)
نصب Python، Docker و Airflow ساده است. برای پایتون و داکر، می توانید راهنمای نصب رسمی سیستم عامل خاص خود را دنبال کنید. برای جریان هوا، می توانید آن را با استفاده از آن نصب کنید pip، نصب کننده بسته پایتون.
پایتون را نصب کنید
Apache Airflow به زبان پایتون نوشته شده است، بنابراین باید پایتون را نصب کنید روی ماشین شما می توانید آن را از وب سایت رسمی پایتون. در زمان نگارش، Airflow به پایتون 3.6 یا بالاتر نیاز دارد.
برای بررسی نصب پایتون و دیدن نسخه آن، a را باز کنید terminal پنجره و نوع:
$ python --version
Docker را نصب کنید
Docker به ما اجازه می دهد تا تنظیمات جریان هوا را کانتینری کنیم. می توانید Docker را از وب سایت رسمی داکر. نسخه ای را انتخاب کنید که برای سیستم عامل شما مناسب است.
پس از نصب، می توانید با باز کردن a بررسی کنید که آیا Docker به درستی نصب شده است terminal پنجره و تایپ:
$ docker --version
Docker Compose را نصب کنید
Docker Compose ابزاری است که به ما امکان تعریف و مدیریت چندcontainer برنامه های Docker، که همان چیزی است که راه اندازی جریان هوا ما خواهد بود. معمولاً با نصب Docker همراه است روی ویندوز و مک، اما ممکن است نیاز به نصب جداگانه داشته باشد روی برخی از توزیع های لینوکس می توانید بررسی کنید که آیا Docker Compose نصب شده است و نسخه آن را با تایپ کردن ببینید:
$ docker-compose --version
اگر نصب نشده است، می توانید دنبال کنید راهنمای نصب رسمی Docker Compose.
ساختار پروژه
برای حفظ ساختار پروژه تمیز و سازماندهی شده، نگهداری همه فایل های مربوط به جریان هوا در یک فهرست اختصاصی، تمرین خوبی است.
در اینجا یک ساختار پیشنهادی برای پروژه شما آورده شده است:
my_project/
│
├── airflow/ # Directory for all Airflow-related files
│ ├── dags/ # Directory to store your Airflow DAGs
│ │ ├── dag1.py
│ │ ├── dag2.py
│ │ └── ...
│ │
│ ├── Dockerfile # Dockerfile for building your custom Airflow image
│ ├── docker-compose.yml # Docker Compose file for defining your services
│
└── ... # Other directories and files for your project
در این ساختار:
-
این
airflow/
دایرکتوری جایی است که همه فایل های مربوط به جریان هوا را در آن ذخیره می کنید. این کار تنظیم جریان هوا را از بقیه پروژهتان جدا نگه میدارد و مدیریت آن را آسانتر میکند. -
این
dags/
دایرکتوری داخلairflow/
دایرکتوری جایی است که شما Airflow DAG های خود را ذخیره می کنید. اینها اسکریپت های پایتون هستند که گردش کار شما را تعریف می کنند. در فایل Docker Compose خود، این دایرکتوری را به آن نگاشت می کنید/usr/local/airflow/dags
در ظروف جریان هوای شما -
این
Dockerfile
درونairflow/
دایرکتوری برای ساخت تصویر سفارشی Airflow Docker شما استفاده می شود. این فایل حاوی دستورالعملهایی برای مقداردهی اولیه پایگاه داده Airflow و کپی کردن سفارشی شما استairflow.cfg
فایل در تصویر -
این
docker-compose.yml
فایل داخلairflow/
دایرکتوری جایی است که شما خدمات خود (وب سرور، زمانبندی، پایگاه داده و غیره) را برای Docker Compose تعریف می کنید.
شخصی کردن راهاندازی Airflow-Docker
قبل از اینکه بتوانید Airflow را اجرا کنید، باید پایگاه داده آن را مقداردهی اولیه کنید. در یک راه اندازی Dockerized، مقداردهی اولیه پایگاه داده جریان هوا و سفارشی سازی آن airflow.cfg
فایل را می توان در داکر انجام داد container، نه روی را host دستگاه.
برای انجام این کار، می توانید از یک Dockerfile برای ساخت یک تصویر سفارشی Airflow Docker استفاده کنید. در این Dockerfile، می توانید دستوراتی را برای مقداردهی اولیه پایگاه داده Airflow و سفارشی کردن آن مشخص کنید airflow.cfg
فایل.
در اینجا یک نمونه Dockerfile آورده شده است:
FROM apache/airflow:latest
ENV AIRFLOW_HOME=/usr/local/airflow
USER root
RUN mkdir -p ${AIRFLOW_HOME} && chown -R airflow: ${AIRFLOW_HOME
USER airflow
RUN airflow db init
RUN echo "(core)" > ${AIRFLOW_HOME}/airflow.cfg && \
echo "airflow_home = ${AIRFLOW_HOME}" >> ${AIRFLOW_HOME}/airflow.cfg && \
echo "executor = LocalExecutor" >> ${AIRFLOW_HOME}/airflow.cfg && \
echo "" >> ${AIRFLOW_HOME}/airflow.cfg && \
echo "(webserver)" > ${AIRFLOW_HOME}/airflow.cfg && \
echo "base_url = http://localhost:8080" >> ${AIRFLOW_HOME}/airflow.cfg && \
echo "web_server_host = 0.0.0.0" >> ${AIRFLOW_HOME}/airflow.cfg && \
echo "web_server_port = 8080" >> ${AIRFLOW_HOME}/airflow.cfg{AIRFLOW_HOME}/airflow.cfg
در این Dockerfile ابتدا مقدار را تنظیم می کنیم AIRFLOW_HOME
متغیر محیطی به /usr/local/airflow
. سپس با استفاده از آن به کاربر ریشه سوئیچ می کنیم USER root
بخشنامه این امر ضروری است زیرا برای ایجاد دایرکتوری و تغییر مالکیت آن به مجوزهای ریشه نیاز داریم.
بعد، ما ایجاد می کنیم AIRFLOW_HOME
دایرکتوری و تغییر مالکیت آن به airflow
کاربر. این کار با استفاده از RUN mkdir -p ${AIRFLOW_HOME} && chown -R airflow: ${AIRFLOW_HOME}
فرمان این -p
گزینه در mkdir
فرمان تضمین میکند که اگر دایرکتوری وجود نداشته باشد، ایجاد میشود.
پس از آن، به حالت اولیه برمی گردیم airflow
کاربر با استفاده از USER airflow
بخشنامه این یک روش خوب به دلایل امنیتی است، زیرا اجرای کانتینرها به عنوان کاربر اصلی می تواند خطرات امنیتی ایجاد کند.
سپس پایگاه داده Airflow را با استفاده از RUN airflow db init
فرمان
در نهایت، ما آن را سفارشی می کنیم airflow.cfg
مستقیماً در داکر فایل کنید container. این کار با استفاده از RUN
بخشنامه با یک سری از echo
دستورات، که تنظیمات سفارشی ما را به airflow.cfg
فایل. این رویکرد به ما اجازه میدهد تا آن را سفارشی کنیم airflow.cfg
بدون نیاز به ایجاد و سفارشی کردن فایل روی را host دستگاه.
در این Dockerfile، ما از >
اپراتور به جای >>
عملگر زمانی که برای اولین بار به آن می نویسیم airflow.cfg
فایل. این >
اپراتور فایل را با متن مشخص شده بازنویسی می کند، در حالی که >>
اپراتور متن را به فایل اضافه می کند. با بازنویسی فایل، اطمینان حاصل می کنیم که هر بخش فقط یک بار اعلام شده است.
در اینجا مثالی از روش شما آورده شده است airflow.cfg
بخش های پیکربندی شده در فایل به شکل زیر خواهد بود:
(core)
airflow_home = ~/airflow
executor = LocalExecutor
(webserver)
base_url = http://localhost:8080
web_server_host = 0.0.0.0
web_server_port = 8080
هنگامی که این Dockerfile را ایجاد کردید، می توانید تصویر Airflow Docker سفارشی خود را با استفاده از آن بسازید docker build
فرمان در اینجا یک مثال است:
$ docker build -t my-airflow-image .
Docker Compose
Docker Compose ابزاری است که به شما امکان تعریف و مدیریت چندcontainer برنامه های Docker. از یک فایل YAML برای مشخص کردن سرویسها، شبکهها و حجم برنامه شما استفاده میکند و سپس تمام این مؤلفهها را در یک دستور واحد میآورد.
پیکربندی فایل Docker Compose
فایل Docker Compose جایی است که شما خدمات اپلیکیشن خود را تعریف می کنید. برای Airflow، یک فایل Docker Compose ممکن است شامل خدماتی برای وب سرور، زمانبندی و پایگاه داده باشد. این فایل باید در همان دایرکتوری Dockerfile شما باشد.
در اینجا یک مثال است:
version: "3"
services:
webserver:
build:
context: .
dockerfile: Dockerfile
command: webserver
volumes:
- ./dags:/usr/local/airflow/dags
ports:
- "8080:8080"
scheduler:
build:
context: .
dockerfile: Dockerfile
command: scheduler
volumes:
- ./dags:/usr/local/airflow/dags
postgres:
image: postgres:latest
environment:
- POSTGRES_USER=airflow
- POSTGRES_PASSWORD=airflow
- POSTGRES_DB=airflow
در این فایل Docker Compose سه سرویس را تعریف می کنیم: webserver
، scheduler
، و postgres
. این build
دستورالعمل به Docker Compose می گوید که با استفاده از Dockerfile در فهرست فعلی یک تصویر بسازد. این volumes
دستورالعمل نقشه می دهد ./dags
فهرست راهنما روی شما host ماشین به /usr/local/airflow/dags
در داکر container، به شما امکان می دهد DAG های خود را ذخیره کنید روی شما host دستگاه. این ports
دایرکتوری مپ پورت 8080 روی شما host دستگاه به پورت 8080 در داکر container، به شما امکان می دهد به وب سرور Airflow در آدرس دسترسی داشته باشید http://localhost:8080
.
این postgres
خدمات استفاده می کند postgres:latest
تصویر و متغیرهای محیطی را مستقیماً در فایل Docker Compose تنظیم می کند. این متغیرهای محیطی برای پیکربندی پایگاه داده Postgres استفاده می شوند.
راه اندازی خدمات جریان هوا
برای راه اندازی خدمات Airflow خود، می توانید از docker-compose up
فرمان اضافه کردن -d
flag سرویس ها را در پس زمینه اجرا می کند. این دستور این است:
$ docker-compose up -d
این دستور تمام سرویس های تعریف شده در فایل Docker Compose شما را شروع می کند. می توانید وضعیت خدمات خود را با استفاده از docker-compose ps
فرمان
ایجاد کاربر در جریان هوا
هنگامی که Docker compose خود را با Airflow تنظیم کردید، باید کاربری ایجاد کنید تا بتوانید به رابط وب Airflow دسترسی داشته باشید. این را می توان با اجرای یک دستور در Docker در حال اجرا انجام داد container.
ابتدا باید آن را پیدا کنید container شناسه وب سرور Airflow در حال اجرا شما. با اجرای دستور زیر می توانید این کار را انجام دهید:
$ docker ps
این دستور همه کانتینرهای در حال اجرا Docker و جزئیات آنها را فهرست می کند. به دنبال container وب سرور Airflow را اجرا کرده و آن را یادداشت کنید container شناسه.
در مرحله بعد، می توانید با اجرای دستور زیر یک کاربر جدید در Airflow ایجاد کنید:
$ docker exec -it <container-id> airflow users create --username admin --password admin --firstname First --lastname Last --role Admin --email (email protected)
جایگزین کردن <container-id>
با container شناسه ای که قبلاً یادداشت کردید این دستور یک کاربر جدید با نام کاربری “admin”، رمز عبور “admin”، نام “First”، نام خانوادگی “Last”، نقش “Admin” و ایمیل “(email protected)” ایجاد می کند. شما باید این مقادیر را با ارزش های خود جایگزین کنید.
پس از اجرای این دستور، باید بتوانید با استفاده از اعتبار کاربری که ایجاد کرده اید، وارد رابط وب Airflow شوید.
بهینه سازی ها و کاربردها
افزایش عملکرد
بهینه سازی Airflow و تنظیمات Docker می تواند عملکرد خط لوله داده شما را به میزان قابل توجهی بهبود بخشد. برای جریان هوا، استفاده از LocalExecutor را برای اجرای کار موازی و تنظیم دقیق DAG ها برای کاهش وظایف غیر ضروری در نظر بگیرید. برای Docker، مطمئن شوید که تصاویر شما تا حد امکان سبک هستند و از ویژگیهای داخلی مدیریت منابع Docker برای محدود کردن استفاده از CPU و حافظه استفاده کنید.
به عنوان مثال، می توانید با افزودن عبارت، استفاده از حافظه ظروف Docker خود را محدود کنید mem_limit
پارامتر فایل Docker Compose شما:
services:
webserver:
build:
context: .
dockerfile: Dockerfile
command: webserver
volumes:
- ./dags:/usr/local/airflow/dags
ports:
- "8080:8080"
mem_limit: 512m
علاوه بر حافظه، می توانید منابع CPU را نیز مدیریت کنید container می توانید با تنظیم استفاده کنید cpu_shares
پارامتر:
services:
webserver:
build:
context: .
dockerfile: Dockerfile
command: webserver
volumes:
- ./dags:/usr/local/airflow/dags
ports:
- "8080:8080"
mem_limit: 512m
cpu_shares: 512
این cpu_shares
پارامتر به شما اجازه می دهد تا منابع CPU را کنترل کنید container می توانید استفاده کنید. ارزش یک وزن نسبی نسبت به سایر ظروف است. به عنوان مثال، اگر یکی container دارای مقدار 1024 و دیگری دارای ارزش 512، اولین container دو برابر بیشتر از دومی زمان CPU دریافت خواهد کرد.
این افزودن ساده می تواند تأثیر عمیقی داشته باشد روی عملکرد سیستم شما، حصول اطمینان از اینکه منابع شما به طور موثر استفاده می شود و خط لوله داده شما به خوبی اجرا می شود. همین ترفندها و بهینهسازیهای کوچک هستند که میتوانند در درازمدت تفاوت بزرگی ایجاد کنند و یک خط لوله داده خوب را به یک خط لوله عالی تبدیل کنند.
چه زمانی و چرا از Airflow با Docker استفاده می کنم
در سفرم به عنوان مهندس داده، این فرصت را داشتم که کار کنم روی انواع پروژه های پیچیده یکی از این پروژه ها شامل ایجاد خط لوله داده به process و حجم زیادی از داده ها را تجزیه و تحلیل کنید. پیچیدگی پروژه دلهره آور بود و نیاز به ابزاری بود که بتواند آن را ساده کند process مشهود بود. آن زمان بود که Airflow و Docker را کشف کردم.
جریان هوا، با برنامه ریزی قوی و orchestration قابلیت ها، برای نیازهای خط لوله داده ما مناسب بود. با این حال، تغییر دهنده واقعی بازی Docker بود. داکر به ما اجازه داد تا تنظیمات جریان هوای خود را کانتینری کنیم، که مزایای زیادی را به همراه داشت.
اول، داکر همکاری با تیم من را بسیار آسان کرد. ما توانستیم تصاویر Docker خود را به اشتراک بگذاریم و اطمینان حاصل کنیم که همه در یک محیط کار می کنند. این “اما کار می کند” را حذف کرد روی ماشین من” مشکل ایجاد کرد و باعث توسعه ما شد process بسیار نرم تر
دوم، داکر ما را قادر ساخت تا خطوط لوله جریان هوا را آزمایش کنیم روی ماشین های محلی ما با سهولت. ما میتوانیم محیط تولید خود را به صورت محلی تکرار کنیم، خطوط لوله خود را اجرا کنیم و هر مشکلی را در اوایل توسعه پیدا کنیم process. این پیشرفت قابل توجهی نسبت به گردش کار قبلی ما بود، جایی که آزمایش سخت بود process.
در آخر، زمانی که زمان استقرار خطوط لوله ما برای تولید فرا رسید، داکر آن را ساخت process بدون درز. ما به سادگی مجبور شدیم تصویر Docker خود را به سرور تولید فشار دهیم و آن را اجرا کنیم. نیازی به نگرانی در مورد نصب وابستگی ها یا پیکربندی سرور وجود نداشت. همه چیزهایی که نیاز داشتیم در تصویر داکر ما بسته بندی شده بود.
استفاده از Airflow با داکر یک تجربه متحول کننده بود. این نه تنها باعث پیشرفت ما شد process کارآمدتر است، اما همچنین به ما اجازه می دهد تا یک خط لوله داده با کیفیت بالا ارائه دهیم که نیازهای پروژه ما را برآورده می کند. من این راه اندازی را به هر توسعه دهنده یا تیمی که کار می کند بسیار توصیه می کنم روی پروژه های خط لوله داده
مطالعه موردی: گردش کار تجزیه و تحلیل داده های Quizlet
پذیرش کویزلت Apache Airflow ETLهای تحلیلی آنها را متحول کرده است. در ابتدا مستقر شد روی یک سرور واحد، Airflow استخراج داده های خود را از Google BigQuery ساده کرده است، تجزیه و تحلیل را در SQL اجرا می کند، و نتایج را برای گزارش ها و داشبورد ذخیره می کند. موفقیت این استقرار منجر به گسترش وظایف، از جمله آموزش طبقهبندیکنندههای یادگیری ماشین، محاسبه شاخصهای جستجو، تست A/B و هدفگیری کاربر شده است.
با نگاهی به آینده، Quizlet قصد دارد با انتقال پایگاه داده ابرداده به یک نمونه اختصاصی، ادغام با Google Cloud Storage و تغییر به یک سیستم صف توزیع شده، استقرار Airflow خود را بهبود بخشد. در اصل، Apache Airflow یک تغییر دهنده بازی برای Quizlet بوده است و به آنها قدرت می دهد تا کارهای بیشتری انجام دهند و تجارت خود را به جلو ببرند.
نتیجه
در این مقاله روش اجرای Airflow به صورت محلی با استفاده از Docker را بررسی کرده ایم. ما همه چیز را از راهاندازی محیط محلی شما و نصب نرمافزار لازم گرفته تا استقرار خدمات Airflow شما با Docker Compose پوشش دادهایم. ما همچنین نکات و ترفندهایی را برای بهینه سازی تنظیمات شما مورد بحث قرار داده ایم و برخی از تجربیات شخصی و برنامه های کاربردی دنیای واقعی را به اشتراک گذاشته ایم.
اجرای جریان هوا با داکر یک محیط منسجم و ایزوله را فراهم می کند که می تواند به راحتی نسخه، توزیع و تکرار شود. این راهاندازی برای مدیریت خطوط لوله داده پیچیده ایدهآل است، زیرا برنامهریزی قدرتمند Airflow را با هم ترکیب میکند orchestration قابلیتهایی با انعطافپذیری و ایزولهسازی Docker. چه یک مهندس داده باشید که به دنبال سادهسازی گردشهای کاری خود هستید، یا تیمی که به دنبال اطمینان از ثبات در محیط توسعه خود هستید، اجرای Airflow به صورت محلی با Docker یک راهحل قدرتمند است.
امیدوارم این راهنما مفید بوده باشد و دانش و اطمینان لازم را برای شروع راه اندازی Airflow-Docker خود در اختیار شما قرار داده باشد.
(برچسبها به ترجمه)# python
منتشر شده در 1402-12-30 15:11:05