Airflow Tutorial for Beginners – P1: Introduction

6 min read


Xin chào! Cảm ơn bạn đã tham gia loạt hướng dẫn Airflow cho người mới. Trong series bài viết này, chúng tôi sẽ hướng dẫn bạn qua các demo để giới thiệu Airflow. Phù hợp với mọi trình độ, và chỉ cần biết Python cơ bản.
Trong loạt bài viết này, các bạn sẽ được hướng dẫn qua các phần chính sau:

  1. Giới thiệu về Airflow
  2. Cài đặt và chạy Airflow trên môi trường Python
  3. Cài đặt và chạy Airflow với Docker
  4. Các khái niệm cơ bản và trọng tâm của Airflow
  5. Vòng đời của một Task trong Airflow
  6. Kiến trúc cơ bản của Airflow
  7. Lập lịch DAG trong Airflow với Bash Operator
  8. Lập lịch DAG trong Airflow với Python Operator

What is Airflow™?

Apache Airflow™ là nền tảng mã nguồn mở để phát triển, lập lịch, và theo dõi workflows batch, sử dụng Python. Nó kết nối được với nhiều công nghệ, có giao diện web dễ quản lý, và có thể triển khai từ máy cá nhân đến cấu hình phân tán.

Workflows as code

Điểm đặc trưng chính của các quy trình công việc trong Airflow là chúng đều được định nghĩa dưới dạng mã Python. Cách tiếp cận này mang lại nhiều lợi ích:

  • Động: Các pipeline trong Airflow được cấu hình dưới dạng mã Python, cho phép tạo ra pipeline một cách linh hoạt.
  • Mở rộng: Khung làm việc Airflow™ bao gồm các operator để kết nối với nhiều công nghệ khác nhau. Tất cả các thành phần của Airflow đều có thể được mở rộng để dễ dàng thích nghi với môi trường của bạn.
  • Linh hoạt: Khả năng parameterize quy trình công việc được tích hợp sẵn, tận dụng động cơ mẫu Jinja.

Hãy xem xét đoạn mã sau đây:

from datetime import datetime

from airflow import DAG
from airflow.decorators import task
from airflow.operators.bash import BashOperator

# A DAG represents a workflow, a collection of tasks
with DAG(dag_id="demo", start_date=datetime(2022, 1, 1), schedule="0 0 * * *") as dag:
    # Tasks are represented as operators
    hello = BashOperator(task_id="hello", bash_command="echo hello")

    @task()
    def airflow():
        print("airflow")

    # Set dependencies between tasks
    hello >> airflow()
  • Đoạn mã trên mô tả một DAG với tên “demo”, bắt đầu từ ngày 1 tháng 1 năm 2022 và được lập lịch chạy hàng ngày. Một DAG là biểu diễn của một quy trình công việc trong Airflow.
  • Có hai nhiệm vụ, một là chạy một kịch bản Bash và một là hàm Python được định nghĩa sử dụng bộ trang trí @task.
  • Ký hiệu >> giữa các nhiệm vụ định nghĩa mối phụ thuộc và kiểm soát thứ tự thực thi các nhiệm vụ.

Airflow đánh giá mã này và thực thi các nhiệm vụ theo khoảng thời gian đã định và theo thứ tự đã xác định. Trạng thái của DAG “demo” có thể được xem trong giao diện web.

Ví dụ này minh họa một kịch bản Bash và Python đơn giản, nhưng những nhiệm vụ này có thể chạy bất kỳ mã tùy ý nào. Hãy nghĩ đến việc chạy một công việc Spark, di chuyển dữ liệu giữa hai bucket, hoặc gửi email. Cấu trúc tương tự cũng có thể được thấy khi chạy theo thời gian.

Mỗi cột đại diện cho một lần chạy DAG. Đây là hai trong số các giao diện sử dụng nhiều nhất trong Airflow, nhưng còn nhiều giao diện khác cho phép bạn đi sâu vào trạng thái của các quy trình công việc của mình.

Tại Sao Nên Sử Dụng Airflow™?

Airflow™ là một nền tảng điều phối quy trình công việc dạng batch. Khung làm việc Airflow bao gồm các operator để kết nối với nhiều công nghệ và dễ dàng mở rộng để kết nối với công nghệ mới. Nếu quy trình công việc của bạn có điểm bắt đầu và kết thúc rõ ràng, và chạy theo các khoảng thời gian định kỳ, chúng có thể được lập trình như một DAG trong Airflow.

Nếu bạn ưu tiên viết mã hơn là thao tác click, Airflow là công cụ dành cho bạn. Quy trình công việc được định nghĩa dưới dạng mã Python, có nghĩa là:

  • Quy trình công việc có thể được lưu trữ trong kiểm soát phiên bản, giúp bạn có thể quay lại các phiên bản trước đó.
  • Quy trình công việc có thể được phát triển bởi nhiều người cùng một lúc.
  • Có thể viết kiểm thử để xác thực chức năng.
  • Các thành phần có thể được mở rộng và bạn có thể xây dựng dựa trên một bộ sưu tập các thành phần hiện có.
  • Lập lịch phong phú và ngữ pháp thực thi cho phép bạn dễ dàng định nghĩa các pipeline phức tạp, chạy theo các khoảng thời gian định kỳ. Khả năng backfill cho phép bạn chạy lại các pipeline trên dữ liệu lịch sử sau khi thay đổi logic. Và khả năng chạy lại một phần của pipeline sau khi giải quyết lỗi giúp tối đa hóa hiệu quả.

Giao diện người dùng của Airflow cung cấp:

  • Các cái nhìn sâu sắc về hai thứ: Pipelines và Tasks
  • Tổng quan về các pipeline của bạn theo thời gian

Từ giao diện, bạn có thể kiểm tra nhật ký và quản lý các nhiệm vụ, ví dụ như thử lại một nhiệm vụ trong trường hợp thất bại.

Bản chất mã nguồn mở của Airflow đảm bảo bạn làm việc trên các thành phần được phát triển, kiểm tra, và sử dụng bởi nhiều công ty khác trên toàn thế giới. Trong cộng đồng hoạt động, bạn có thể tìm thấy nhiều nguồn tài nguyên hữu ích dưới dạng bài viết trên blog, bài báo, hội nghị, sách, và nhiều hơn nữa.

Airflow như một nền tảng rất dễ tùy chỉnh. Bằng cách sử dụng giao diện công khai của Airflow, bạn có thể mở rộng và tùy chỉnh hầu như mọi khía cạnh của Airflow.

Nhược Điểm của Airflow™?

Airflow™ được xây dựng cho các quy trình công việc dạng batch có hạn. Mặc dù CLI và API REST cho phép kích hoạt các quy trình công việc, Airflow không được thiết kế cho các quy trình công việc dựa trên sự kiện chạy không giới hạn. Airflow không phải là một giải pháp streaming.

Tuy nhiên, một hệ thống streaming như Apache Kafka thường được sử dụng cùng với Apache Airflow. Kafka có thể được sử dụng cho việc nhập và xử lý dữ liệu thời gian thực, dữ liệu sự kiện được ghi vào một vị trí lưu trữ, và Airflow định kỳ khởi động một quy trình công việc xử lý một batch dữ liệu.

Nếu bạn ưu tiên thao tác click hơn là viết mã, có lẽ Airflow không phải là giải pháp phù hợp. Giao diện web nhằm mục đích làm cho việc quản lý các quy trình công việc dễ dàng nhất có thể và khung làm việc Airflow liên tục được cải thiện để làm cho trải nghiệm phát triển mượt mà nhất có thể.

Tuy nhiên, triết lý của Airflow là định nghĩa quy trình công việc dưới dạng mã, vì vậy việc viết mã luôn là bắt buộc.

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *