Môi trường chạy: Google Cloud VPS
Stack: Apache Airflow, Google Cloud Storage(GCS), BigQuery.
Data Pipeline: Google Drive
-> Google Cloud Storage
-> BigQuery
Data Source: Dữ liệu test sinh ra từ dummydata_generator.py
- > Google Drive
Tại màn hình console của GCP, chọn hoặc tạo project mới.
Điền tên project sau đó chọn Create
.
Tại màn hình console chính, nhấn vào biểu tượng Navigation menu
-> Billing
-> Link a billing account
để liên kết tài khoản thanh toán với project.
Nhấn vào biểu tượng Navigation menu
-> APIs & Services
-> Enable APIs and Services
.
Chọn ENABLE APIS AND SERVICES
, tìm kiếm và ENABLE
các API sau:
- Google Drive API
- Compute Engine API
Service Account là một loại tài khoản đặc biệt của Google, không đại diện cho bất cứ người dùng cụ thể nào. Service Account được sử dụng để thực hiện xác thực và phân quyền cho các ứng dụng cần truy cập vào tài nguyên của GCP. Cùng với cơ chế Role-based Access Control (Kiểm soát truy cập dựa trên vai trò), mỗi Role tương ứng với một tập hợp các quyền (permissions) cho phép thực hiện các thao tác lên tài nguyên GCP. Mỗi Service Account có thể được gán một hoặc nhiều Role, và mỗi Role có thể được gán cho một hoặc nhiều Service Account. Các Role được gán cho một Service Account sẽ xác định các quyền mà Service Account đó có thể thực hiện trên các tài nguyên của GCP.
Để tạo Service Account, nhấn vào biểu tượng Navigation menu
-> IAM & Admin
-> Service Accounts
-> Create Service Account
.
Điền tên Service Account, chọn CREATE AND CONTINUE
.
Lần lượt tìm và chọn các Role sau:
- Cloud Storage -> Storage Admin
- Cloud Storage -> Storage Object Admin
- Big Query -> BigQuery Data Owner
- Big Query -> BigQuery User
Chọn DONE
để hoàn tất tạo Service Account.
Tại màn hình Service Accounts
, tìm tới Service Account vừa tạo, nhấn vào biểu tượng Actions
-> Manage keys
.
Chọn ADD KEY
-> Create new key
-> JSON
-> CREATE
để tạo file json key và tải về máy.
Nhấn vào biểu tượng Navigation menu
-> Cloud Storage
-> Buckets
-> Create
.
Điền tên bucket và nhấn CONTINUE
.
Chọn như hình dưới và nhấn CREATE
.
Cửa sổ Confirm Public access will be prevented
sẽ hiện ra, chọn CONFIRM
để xác nhận chặn truy cập public và hoàn tất tạo bucket.
Default Storage Class và Location có thể chọn theo nhu cầu sử dụng. Trong đó Storage Class là metadata của object, xác định cách lưu trữ và giá cả của object. Location là vị trí lưu trữ của object, ảnh hưởng đến tốc độ truy cập và giá cả. Có 4 loại Storage Class:
- Standard: Lưu trữ dữ liệu trên nhiều thiết bị và nhiều vị trí, đảm bảo độ tin cậy và khả năng khôi phục dữ liệu cao nhất. Giá cả cao nhất.
- Nearline: Dành cho dữ liệu ít truy cập, giá cả thấp hơn Standard nhưng phí truy cập cao hơn.
- Coldline: Dành cho dữ liệu ít truy cập, giá cả thấp nhất nhưng phí truy cập cao nhất.
- Archive: Dành cho dữ liệu ít truy cập, giá cả thấp nhất nhưng phí truy cập cao nhất, thời gian truy cập dữ liệu lâu nhất.
Để giúp tối ưu chi phí lưu trữ, Goole cung cấp cơ chế Object Lifecycle Management giúp tự động chuyển đổi giữa các loại Storage Class dựa trên các Rule xác định.
Trong dự án này, dữ liệu được download từ Google Drive lưu trữ trên Cloud Storage Bucket hàng ngày, sau đó dữ liệu được insert vào BigQuery để phục vụ nhu cầu phân tích. Để tối ưu chi phí lưu trữ trong dự án này, ta sẽ sử dụng thiết lập các Rule như sau:
- Dữ liệu được download từ GG Drive sau đó ngay lập tức được insert vào BigQuery -> Default Storage Class: Standard
- Dữ liệu được insert vào BigQuery sẽ không còn cần lưu trữ trên Cloud Storage, tuy nhiên để tránh trường hợp quá trình insert từ GCS -> BigQuery gặp lỗi dẫn tới phải download lại dữ liệu từ GG Drive, ta sẽ lưu trữ dữ liệu trên GCS trong 7 ngày sau đó tự động xóa object khỏi GCS -> Rule: 7 ngày sau khi object được tạo, xóa object.
Tùy thuộc vào các yêu cầu cụ thể cũng như mục tiêu sử dụng, tần suất truy cập và kích thước dữ liệu, ta có thể lựa chọn Storage Class và thiết lập Rule phù hợp một cách linh hoạt.
Để thiết lập Object Lifecycle Management, nhấn vào bucket vừa tạo, chọn Lifecycle
-> Add A rule
.
Điền thông tin Rule như hình dưới và nhấn CREATE
.
Nhấn vào biểu tượng Navigation menu
-> Compute Engine
-> VM instances
-> CREATE INSTANCE
.
Điền thông tin như hình dưới và nhấn CREATE
.
Chọn machine type:
Chọn boot disk:
Chon Create
để tạo instance.
Để có thể truy cập vào Airfow Web UI, ta cần thiết lập Firewall Rule cho instance vừa tạo.
Tại màn hình VM instances
, chọn instance vừa tạo, chọn More Action
-> View network details
.
Tại section Network interface details
-> click vaò network default
Chọn Firewalls
-> Add firewall rule
.
Thiết lập thông tin như hình dưới và nhấn CREATE
.
Quay trở lại màn hình Compute Engine
-> VM instances
, chọn instance vừa tạo, chọn SSH
để truy cập vào instance.
Cửa sổ terminal hiện ra, thực hiện các bước sau:
- Setup Docker apt repository:
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- Cài đặt Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- Kiểm tra Docker đã cài đặt thành công:
sudo docker --version
- Cài đặt git và make:
sudo apt-get install git make
- Clone repository:
git clone https://github.com/NgQuangHuyit/GCP-Data-Pipeline.git
- Setup project:
cd GCP-Data-Pipeline
make init-dirs
Ở phía trên màn hình terminal, chọn UPLOAD
-> upload file json key đã tạo ở bước 3 .
Di chuyển file json key vào thư mục credentials
:
mv ~/<json-file-name> ~/GCP-Data-Pipeline/credentials/
Cài đặt biến môi trường:
make setup
Prompt hiện lên yêu cầu nhập vào lần lượt các thông tin sau:
- Airfow Webserver Username. Ex: airflow
- Airfow Webserver Password Ex: airflow
- Google credential file name Ex: my_key.json
- GCS Bucket Name (Tên bucket đã tạo) Ex: mybucket
- BigQuery dataset name Ex: mydataset
- BigQuery table name Ex: mytable
Chaỵ docker compose:
sudo make up
Quá trình build và chạy docker compose sẽ mất một khoảng một vài phút.
Truy cập vào Airflow Web UI bằng cách mở trình duyệt và truy cập vào địa chỉ http://<external-ip>:8081
với external ip của instance. Tài khoản và mật khẩu để truy cập vào Airflow Web UI là thông tin đã nhập ở bước 5.3.
Chọn nexar-pipeline
-> click vào Trigger Button
để chạy pipeline.
GCS bucket:
BigQuery:
Truy vấn dữ liệu từ BigQuery: