DAG Là Gì? Một Ví Dụ Thực Tế

Hướng dẫn, Định nghĩa

Tìm hiểu các khái niệm cơ bản về Biểu đồ Chu kỳ Hướng (DAG) và cách DAG giúp điều phối các tác vụ phức tạp, quản lý luồng dữ liệu và các pipeline!

Các luồng dữ liệu và pipeline thường yêu cầu sự phối hợp chính xác để đảm bảo các tác vụ được thực thi theo thứ tự chính xác. Biểu đồ Chu kỳ Hướng (Directed Acyclic Graph – DAG) là công cụ mạnh mẽ giúp quản lý các luồng công việc này một cách hiệu quả và tránh lỗi.

Trong bài viết này, chúng ta sẽ tìm hiểu về DAG và tầm quan trọng của nó trong kỹ thuật dữ liệu, xem xét một số ứng dụng của DAG và học cách sử dụng chúng thông qua một ví dụ thực tế bằng Airflow.

DAG là gì?

Để hiểu DAG là gì, trước tiên hãy định nghĩa một số khái niệm cơ bản. Trong khoa học máy tính, đồ thị (graph) là một cấu trúc dữ liệu phi tuyến tính bao gồm các nút (node) và cạnh (edge). Các nút đại diện cho các thực thể hoặc đối tượng riêng lẻ, trong khi các cạnh kết nối các nút và biểu diễn các mối quan hệ hoặc kết nối giữa chúng.

Trong một đồ thị có hướng, các cạnh có một hướng cụ thể, chỉ ra mối quan hệ một chiều giữa các nút. Điều này có nghĩa là nếu có một cạnh từ nút A đến nút B, nó biểu thị mối liên kết từ A đến B, nhưng không nhất thiết phải có từ B đến A.

Một đường dẫn (path) là một chuỗi các nút được kết nối bởi các cạnh có hướng, bắt đầu từ một nút cụ thể và theo hướng của các cạnh để đến một nút khác. Đường dẫn có thể có độ dài bất kỳ, từ một nút đơn lẻ đến một chuỗi nhiều nút, miễn là luôn tuân theo hướng của các cạnh.

Giờ đây, chúng ta hãy tìm hiểu DAG là gì: DAG là một đồ thị có hướng nhưng không có chu kỳ, trong đó mỗi nút đại diện cho một tác vụ cụ thể và mỗi cạnh biểu thị sự phụ thuộc giữa chúng.

Điều quan trọng về DAG là chúng không có chu kỳ, nghĩa là một khi bạn bắt đầu từ một nút, bạn chỉ có thể di chuyển về phía trước, không bao giờ quay lại nút trước đó. Điều này đảm bảo các tác vụ có thể được thực thi theo thứ tự mà không gặp phải vòng lặp vô tận.

Tại sao DAG quan trọng trong Kỹ thuật dữ liệu?

Là một kỹ sư dữ liệu hoặc ai đang thực hiện các tác vụ liên quan đến kỹ thuật dữ liệu, bạn thường phải đối mặt với thách thức xây dựng các pipeline dữ liệu phức tạp, đòi hỏi thực thi các bước theo thứ tự, mỗi bước đều phụ thuộc vào bước trước. Đó chính là nơi DAG phát huy tác dụng!

Do khả năng biểu diễn các tác vụ như nút và sự phụ thuộc như cạnh, DAG đảm bảo một trình tự thực thi hợp lý, đảm bảo rằng các tác vụ được thực thi theo thứ tự dựa trên sự phụ thuộc của chúng. Điều này ngăn ngừa lỗi và sự không nhất quán do chạy các tác vụ không đúng thứ tự. Ngoài ra, nếu một bước thất bại, DAG có thể xác định và chạy lại các tác vụ bị ảnh hưởng, tiết kiệm thời gian và công sức.

Tính chất không có chu kỳ của DAG là một trong những đặc điểm quan trọng giúp DAG lý tưởng cho các pipeline dữ liệu. Nó đảm bảo các tác vụ được thực hiện mà không gây ra các vòng lặp vô tận hoặc sự phụ thuộc đệ quy có thể dẫn đến sự không ổn định của hệ thống.

Ngoài ra, DAG còn cho phép bạn tạo ra các luồng công việc dữ liệu tự động và có khả năng mở rộng, đặc biệt trong các hệ thống phân tán và môi trường đám mây. DAG chia nhỏ các tác vụ xử lý dữ liệu phức tạp thành các tác vụ nhỏ hơn, độc lập, từ đó giúp thực thi song song và tối ưu hóa tài nguyên hiệu quả. Tính khả mở này đặc biệt quan trọng khi làm việc với các bộ dữ liệu lớn và pipeline dữ liệu phức tạp, giúp tiết kiệm chi phí xử lý dữ liệu.

Cuối cùng, DAG cung cấp một biểu diễn trực quan cho bất kỳ pipeline dữ liệu nào, giúp bạn dễ dàng hiểu và giao tiếp luồng công việc. Sự rõ ràng này rất quan trọng khi làm việc với các thành viên khác trong nhóm hoặc các bên liên quan không chuyên về kỹ thuật. Nếu bạn hiểu được luồng dữ liệu và các mối phụ thuộc giữa các tác vụ, việc xác định và sửa lỗi, tối ưu hóa tài nguyên và đưa ra các quyết định cải tiến pipeline trở nên dễ dàng hơn.

Ứng dụng phổ biến của DAG trong Kỹ thuật Dữ liệu

DAG được ứng dụng rộng rãi trong kỹ thuật dữ liệu và có nhiều ứng dụng khác nhau. Chúng ta đã đề cập đến một số trong chúng trước đó. Giờ hãy tìm hiểu chi tiết hơn.

Pipeline ETL

Một trong những ứng dụng phổ biến nhất của DAG là điều phối các quá trình Extract, Transform, Load (ETL). Pipeline ETL liên quan đến việc trích xuất dữ liệu từ nhiều nguồn khác nhau, biến đổi nó thành định dạng phù hợp và tải vào hệ thống đích. Các công cụ như Apache Airflow và Luigi sử dụng DAG để điều phối pipeline ETL một cách hiệu quả.

Ví dụ, bạn có thể sử dụng DAG để tích hợp dữ liệu từ hệ thống CRM, biến đổi dữ liệu sao cho phù hợp với nhu cầu kinh doanh của bạn và tải vào kho dữ liệu Snowflake để phân tích.

Quản lý quy trình công việc phức tạp

DAG cũng phù hợp cho việc quản lý các luồng công việc phức tạp bao gồm nhiều tác vụ và phụ thuộc. Ví dụ, một luồng công việc trong machine learning có thể bao gồm các tác vụ như chọn lựa đặc trưng, huấn luyện mô hình, và triển khai mô hình.

Ví dụ, một DAG trong Apache Airflow có thể thực hiện các script chọn lựa đặc trưng và kích hoạt huấn luyện mô hình chỉ sau khi các đặc trưng đã được xử lý, đảm bảo quản lý sự phụ thuộc và tính tái sản xuất.

Pipeline xử lý dữ liệu

DAG được sử dụng rộng rãi trong các pipeline xử lý dữ liệu để quản lý luồng dữ liệu từ nhiều nguồn và biến đổi nó thành những thông tin có giá trị. Ví dụ, một DAG trong Apache Spark có thể xử lý dữ liệu clickstream từ một trang web, thực hiện tổng hợp để tính toán thời gian phiên truy cập và đưa kết quả vào một bảng điều khiển.

Pipeline Machine Learning

Trong lĩnh vực machine learning, DAG giúp quản lý tính chất lặp đi lặp lại và tính module của các luồng công việc. Chúng cho phép bạn thử nghiệm với các bước tiền xử lý, thuật toán, và tham số khác nhau trong khi vẫn giữ pipeline có tổ chức.

Các công cụ như Kubeflow Pipelines và MLflow sử dụng DAG để quản lý các luồng công việc machine learning, cho phép thử nghiệm và triển khai liền mạch. Ví dụ, bạn có thể sử dụng DAG để kích hoạt lại pipeline huấn luyện khi phát hiện thấy dữ liệu đã thay đổi, đảm bảo mô hình của bạn luôn chính xác và phù hợp.

Công cụ phổ biến cho việc quản lý DAG trong Kỹ thuật dữ liệu

Có nhiều công cụ giúp bạn quản lý và điều phối DAG một cách hiệu quả. Hãy khám phá một số lựa chọn phổ biến:

  • Apache Airflow: Là nền tảng phổ biến để tạo, lập lịch và giám sát luồng công việc. Airflow nổi bật trong việc định nghĩa các pipeline dữ liệu phức tạp dưới dạng DAG. Airflow cung cấp giao diện thân thiện để trực quan hóa và quản lý DAG, giúp dễ dàng hiểu và khắc phục sự cố trong các luồng công việc dữ liệu.
  • Prefect: Là công cụ điều phối hiện đại giúp đơn giản hóa việc tạo và quản lý các luồng công việc dữ liệu. Prefect ưu tiên tính tin cậy và khả năng quan sát, cung cấp các tính năng như tự động retry, backfill, và giám sát mạnh mẽ.
  • Dask: Là thư viện tính toán song song cho Python, quản lý các luồng công việc dữ liệu phân tán. Dask sử dụng mô hình thực thi dựa trên DAG để lập lịch và phối hợp các tác vụ, đảm bảo tối ưu hóa tài nguyên hiệu quả.
  • Kubeflow Pipelines: Là nền tảng mã nguồn mở để xây dựng và triển khai luồng công việc machine learning. Kubeflow sử dụng DAG để định nghĩa các luồng công việc end-to-end, từ tiền xử lý dữ liệu đến triển khai mô hình. Kubeflow tích hợp chặt chẽ với Kubernetes, làm cho nó trở thành lựa chọn mạnh mẽ cho việc chạy các luồng công việc trong môi trường đám mây.
  • Dagster: Là nền tảng điều phối được thiết kế cho các luồng công việc dữ liệu hiện đại. Dagster nhấn mạnh tính module và an toàn kiểu dữ liệu, giúp việc kiểm thử và duy trì DAG trở nên dễ dàng hơn. Dagster tích hợp với các công cụ phổ biến như Apache Spark, Snowflake, và dbt, làm cho nó trở thành lựa chọn tuyệt vời cho các nhóm kỹ thuật dữ liệu với công nghệ đa dạng.

Ví dụ thực tế: Tạo DAG cơ bản trong Apache Airflow

Cài đặt Apache Airflow

Trước khi tạo một DAG, bạn cần cài đặt Apache Airflow. Bạn có thể cài đặt nó bằng Docker hoặc sử dụng pip:

pip install apache-airflow

Sau khi cài đặt, cần cấu hình web server và scheduler của Airflow bằng cách khởi tạo các kết nối cơ sở dữ liệu và bắt đầu web server:

airflow db init
airflow webserver --port 8080

Định nghĩa một DAG đơn giản

Với Airflow đã được cài đặt, bạn có thể tạo DAG của mình bằng cách sử dụng Python để định nghĩa DAG và các tác vụ của nó:

from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime

with DAG(
    'simple_dag',
    start_date=datetime(2023, 1, 1),
    schedule_interval=None,
    catchup=False
) as dag:
    task1 = BashOperator(
        task_id='task_1',
        bash_command='echo "Hello, World!"'
    )
    task2 = BashOperator(
        task_id='task_2',
        bash_command='echo "This is task 2"'
    )
    task1 >> task2

Trong ví dụ này, DAG đơn giản bao gồm hai tác vụ: task_1task_2. Toán tử >> thiết lập sự phụ thuộc giữa các tác vụ, đảm bảo rằng task_2 chỉ thực thi sau khi task_1 hoàn thành.

Chạy và giám sát DAG

Sau khi DAG của bạn được định nghĩa và triển khai lên Airflow, bạn có thể tương tác với nó thông qua giao diện web.

DAG có thể được chạy bằng hai cách:

  • Kích hoạt thủ công hoặc thông qua API.
  • Định nghĩa lịch trình. DAG không bắt buộc phải có lịch trình, nhưng việc định nghĩa một lịch trình thông qua tham số schedule_interval là rất phổ biến.

Mỗi lần bạn chạy DAG, một phiên bản mới của DAG, được gọi là DAG run, sẽ được tạo ra. DAG run có thể chạy song song cho cùng một DAG, và mỗi lần chạy có một data interval xác định khoảng thời gian dữ liệu mà các tác vụ cần xử lý.

Sau khi kích hoạt, bạn có thể giám sát tiến trình của nó trong chế độ xem DAG, cung cấp một biểu diễn trực quan cho luồng công việc.

Chế độ xem DAG trong giao diện Airflow cho phép bạn dễ dàng theo dõi tiến trình của các tác vụ, xem các quan hệ phụ thuộc, và kiểm tra nhật ký để phát hiện các lỗi. Điều này giúp việc xác định và khắc phục sự cố trở nên nhanh chóng và hiệu quả.

Kết luận

DAG là một khái niệm cơ bản trong kỹ thuật dữ liệu, cung cấp một cách biểu diễn trực quan và có cấu trúc để quản lý các luồng công việc phức tạp. Việc hiểu các nút, cạnh và sự phụ thuộc giúp bạn thiết kế và quản lý pipeline dữ liệu hiệu quả.

DAG được sử dụng rộng rãi để điều phối quá trình ETL, quản lý pipeline xử lý dữ liệu, và tự động hóa các luồng công việc machine learning. Bạn có thể tận dụng các công cụ như Apache Airflow, Prefect, và Dask để tạo và quản lý DAG một cách hiệu quả. Những công cụ này cung cấp giao diện thân thiện, khả năng lập lịch, giám sát nâng cao, xử lý lỗi, và khả năng mở rộng.

Hãy tiếp tục xem thêm các bài viết khác của chúng tôi tại ThueGPU.vn hoặc Fanpage. Nếu có nhu cầu Thuê máy chủ GPU, CLOUD GPU hãy liên hệ với chúng tôi.

CÔNG TY TNHH CÔNG NGHỆ EZ

  • VP HCM: 211 Đường số 5, Lake View City, An Phú, Thủ Đức.
  • Tel: 0877223579
  • Email: [email protected]
5/5 - (182 bình chọn)