Apache Airflow là gì?
Airflow là một nền tảng mã nguồn mở mà bạn có thể sử dụng để tự động hóa, sắp xếp và giám sát các luồng công việc và đường ống dữ liệu. Một trong những tính năng tuyệt vời nhất của Airflow là bạn có thể tạo và thực hiện các luồng công việc bằng mã. Khi bạn sử dụng các luồng công việc được hỗ trợ bởi mã, bạn có thể kiểm soát phiên bản, cộng tác và gỡ lỗi các luồng công việc của mình.
Airflow gọi các quy trình công việc là Đồ thị không có chu trình có hướng (DAG) . DAG bao gồm trình tự các tác vụ cần thực hiện cùng với mối quan hệ giữa các tác vụ và sự phụ thuộc của chúng. Bạn có thể thực hiện quy trình ETL (trích xuất, tải và chuyển đổi dữ liệu) bằng Airflow và cũng có thể tự động hóa email có tệp đính kèm CSV và tạo quy trình công việc Học máy (ML).
Bạn có thể kết nối các nguồn dữ liệu Airflow của mình với một kho dữ liệu trung tâm để các nhà phân tích dữ liệu của bạn có thể truy cập vào tất cả dữ liệu có liên quan, giúp ngăn chặn tình trạng dữ liệu bị phân mảnh trên toàn bộ tổ chức. Tương tự như vậy, các quy trình làm việc minh bạch và có thể tái tạo được dựa trên mã sẽ giảm thiểu tình trạng tắc nghẽn, vì bất kỳ ai có quyền truy cập vào mã của quy trình làm việc đều có thể gỡ lỗi.
Airflow cung cấp giao diện lập trình ứng dụng Python (API) mà bạn có thể sử dụng để mã hóa DAG và gọi bất kỳ tập lệnh kết nối nào bạn tạo.
Trong Hướng dẫn này
Hướng dẫn này cung cấp phần giới thiệu với các ví dụ cơ bản về hai khái niệm Airflow cơ bản, Biến và Kết nối . Bạn có thể kết hợp các ý tưởng được đề cập trong hướng dẫn này vào các tập lệnh Python phức tạp hơn khi tạo DAG và đường ống dữ liệu của mình.
Trong hướng dẫn Apache Airflow này, bạn sẽ học cách:
- lưu trữ các giá trị Airflow trong các biến bằng cách sử dụng giao diện dòng lệnh Airflow (CLI)
- tự động kết nối với các nguồn dữ liệu của bạn bằng cách sử dụng một tập lệnh đơn giản và Airflow CLI
Biến đổi luồng không khí và kết nối
Airflow cần truy cập dữ liệu từ các nguồn bên ngoài, như cơ sở dữ liệu , API và máy chủ . Bạn sử dụng Airflow Connections để tạo kết nối đến các nguồn dữ liệu của mình. Các kết nối của bạn tạo thành các khối xây dựng của Airflow DAG, vì chúng xác định nguồn dữ liệu, khu vực dàn dựng và đích đến của bạn.
Bạn sử dụng biến Airflow để lưu trữ các giá trị có thể tái sử dụng, như URI, tên người dùng cơ sở dữ liệu, cấu hình và bất kỳ giá trị nào khác mà DAG của bạn yêu cầu. Các biến được lưu trữ trong cơ sở dữ liệu siêu dữ liệu của Airflow.
Dòng khí CLI
Bạn có thể sử dụng Airflow CLI để quản lý DAG của mình và tạo, chỉnh sửa và xóa các đối tượng Airflow như kết nối và biến. Bạn có thể kết hợp các lệnh CLI vào các tập lệnh để tự động hóa các lệnh Airflow CLI thường dùng của mình. Trong hướng dẫn này, bạn sẽ tìm hiểu cách tận dụng Airflow CLI để tự động tạo Biến và Kết nối Airflow của mình.
Tự động tạo biến luồng khí và kết nối
Tạo Biến DAG của Bạn
Sử dụng tệp JSON để tải các biến Airflow là phương pháp tái tạo và nhanh hơn so với sử dụng giao diện người dùng đồ họa (GUI) của Airflow để tạo biến. Phần này sử dụng một ví dụ đơn giản để chứng minh cách tạo và lưu trữ các biến Airflow bằng Airflow CLI.
- Sử dụng trình soạn thảo văn bản, tạo tệp JSON mới để lưu trữ các cặp khóa-giá trị của bất kỳ giá trị nào bạn cần sử dụng lại trong DAG của mình. Tệp ví dụ bao gồm thông tin kết nối cho cơ sở dữ liệu MySQL.Tệp: ~/example_vars.json
1 2 3 4 5 6 7
{ "my_prod_db": "dbname", "my_prod_db_user": "username", "my_prod_db_pass": "securepassword", "my_prod_db_uri": "mysql://192.0.2.0:3306/" }
- Phát hành lệnh sau để tải tất cả các biến của bạn. Thay thế đường dẫn bằng vị trí
example_vars.json
tệp của bạn.airflow variables --import /home/username/example_vars.json
- Để lấy giá trị biến từ Airflow, hãy sử dụng lệnh sau:
airflow variables -g my_prod_db
Airflow trả về giá trị củamy_prod_db
biến.dbname
Ghi chú: Airflow lưu mật khẩu cho các kết nối và bất kỳ giá trị biến nào dưới dạng văn bản thuần túy trong cơ sở dữ liệu siêu dữ liệu. Xem phần Quy trình làm việc được đề xuất cho các biến nhạy cảm để biết cách giữ an toàn cho các biến của bạn.
Tạo tập lệnh kết nối của bạn
Có thể sử dụng Airflow CLI để tạo Kết nối của bạn với bất kỳ hệ thống bên ngoài nào mà DAG của bạn yêu cầu. Phần này chỉ cho bạn cách tạo kết nối đơn giản với tập lệnh bash có thể tái sử dụng mà bạn có thể áp dụng cho Kết nối Airflow của riêng mình. Ví dụ bên dưới bao gồm kết nối cho cơ sở dữ liệu MySQL.
- Tạo một tệp mới có tên
connection.sh
. Thay thế các giá trị bằng giá trị của riêng bạn hoặc mở rộng tập lệnh để tạo các Kết nối theo yêu cầu của DAG của bạn.Tập tin: connection.sh1 2 3 4 5 6
#!/usr/bin/env bash airflow connections -d --conn_id db_conn airflow connections -a --conn_id db_conn --conn_type mysql --conn_host 'mysql://192.0.2.0:3306/' --conn_schema 'dbname' --conn_login 'username' --conn_port '3306' --conn_password 'securepassword'
Dòng thứ ba của tập lệnh xóa mọi kết nối mà tập lệnh có thể đã tạo trước đó để duy trì tính bất biến . Điều này có nghĩa là tập lệnh của bạn có thể chạy nhiều lần tùy ý với cùng kết quả mong đợi. - Đảm bảo rằng bạn có thể thực thi tập lệnh Connections của mình:
chmod u+x /home/username/connection.sh
- Tải kết nối của bạn bằng cách thực thi tập lệnh đã hoàn thành:
bash /home/username/connection.sh
- Sử dụng Airflow CLI để xác minh rằng Kết nối mới của bạn đã được tạo. Thay thế
db_conn
bằng tên Kết nối của bạn.airflow connections --list | grep 'db_conn'
Một quy trình làm việc được đề xuất cho các biến nhạy cảm
Nếu bạn sử dụng tệp JSON để lưu trữ các biến kết nối nhạy cảm hoặc nếu bạn sử dụng tập lệnh để tự động hóa Kết nối Airflow của mình, bạn nên phát triển quy trình làm việc để mã hóa và giải mã các giá trị nhạy cảm. Airflow lưu mật khẩu cho các kết nối ở dạng văn bản thuần túy trong cơ sở dữ liệu siêu dữ liệu. Quy trình làm việc cho dữ liệu kết nối nhạy cảm của bạn đảm bảo rằng các giá trị này không bao giờ được hiển thị ở định dạng chuỗi thô. Phần bên dưới bao gồm bản phác thảo cho quy trình làm việc mà bạn có thể cân nhắc để giữ an toàn cho các biến nhạy cảm của mình.
- Mã hóa : Bạn có thể sử dụng các công cụ như Ansible Vault để mã hóa các giá trị nhạy cảm trước khi lưu trữ chúng trong kho lưu trữ từ xa, như GitHub . Một công cụ phổ biến khác để lưu trữ các giá trị nhạy cảm là HashiCorp Vault . Gói Python Crypto là một công cụ khác mà bạn có thể sử dụng để bật mã hóa cho mật khẩu.
- Giải mã : Để chạy bất kỳ tập lệnh tự động hóa nào chứa các giá trị biến được mã hóa của bạn, bạn phải bao gồm bước giải mã trước khi thực hiện chúng. Airflow cần các giá trị được giải mã để chạy DAG của bạn. Cả Ansible Vault và HaschiCorp Vault đều bao gồm các cơ chế cung cấp các giá trị biến được giải mã cho Airflow.
- Tải : Sau khi giải mã được các giá trị, hãy thực thi các tập lệnh của bạn.
- Mã hóa : Sau khi cơ sở hạ tầng tự động của bạn tải cả Biến Airflow và Kết nối, hãy mã hóa các giá trị nhạy cảm của bạn. Theo cách này, dữ liệu nhạy cảm chỉ được tiết lộ thông qua Cơ sở dữ liệu Airflow được mã hóa mà chỉ Airflow mới có thể truy cập.
Phần kết luận
Tự động tạo Biến và Kết nối Airflow của bạn là bước cơ bản hướng tới dữ liệu minh bạch để thử nghiệm, tạo mẫu và phân tích nhanh chóng. Việc có tất cả các kết nối dữ liệu có liên quan của bạn trong một kho lưu trữ trung tâm và an toàn sẽ thiết lập tổ chức của bạn để cộng tác. Điều này cho phép bạn dành ít thời gian hơn cho các bước trích xuất và tải của quy trình công việc và nhiều thời gian hơn cho bước chuyển đổi.
Sau khi hoàn thành hướng dẫn này, hãy tìm hiểu cách xây dựng đường ống dữ liệu bằng Python thông qua hướng dẫn Pipeline mẫu của Airflow .
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.