Mục tiêu học tập
- Phân biệt các loại Glue job: Spark ETL, Streaming, Python shell, Ray
- Hiểu worker types, DPU, Glue versions (4.0/5.0) và Flex execution
- Nắm cơ chế Job Bookmarks để xử lý incremental
- Biết Glue Studio, triggers và các tham số job quan trọng
1. Các loại Glue job
| Loại | Engine | Use case | Billing |
|---|---|---|---|
| Spark ETL | Apache Spark (distributed) | ETL batch dữ liệu lớn | DPU-hour, min 1 phút |
| Spark Streaming | Spark Structured Streaming | Đọc Kinesis/Kafka micro-batch | DPU-hour |
| Python shell | Python thuần (1 node) | Task nhẹ: gọi API, file nhỏ, glue code | 0.0625 hoặc 1 DPU |
| Ray | Ray (Python distributed) | Xử lý Python song song không cần Spark | Ray workers |
Glue versions: Glue 4.0 (Spark 3.3, Python 3.10), Glue 5.0 (12/2024 — Spark 3.5, Python 3.11, Java 17, hỗ trợ Iceberg/Hudi/Delta mới hơn, nhanh hơn). Chọn version mới nhất trừ khi có dependency cũ.
Worker types
| Worker | DPU | Ghi chú |
|---|---|---|
| G.1X | 1 (4 vCPU, 16GB) | Mặc định, workload thường |
| G.2X | 2 (8 vCPU, 32GB) | Job cần memory hơn |
| G.4X / G.8X | 4 / 8 | Transform nặng, dữ liệu lớn (Glue 3.0+) |
| G.025X | 0.25 | Chỉ cho streaming job nhỏ |
- Auto Scaling (Glue 3.0+): job tự thêm/bớt worker theo tải — set max workers, tránh over-provision
- Flex execution: chạy trên capacity dư của AWS, rẻ hơn (~34%) cho job không nhạy thời gian (test, batch không SLA) — "most cost-effective" cho batch chậm cũng được
2. Job Bookmarks — xử lý incremental
Vấn đề
Job chạy hàng ngày trên s3://lake/raw/orders/ — làm sao không xử lý lại file đã xử lý?
Cơ chế
Job bookmark lưu state của lần chạy trước (theo file S3 đã đọc / cột bookmark key với JDBC) và lần sau chỉ đọc phần mới.
| Chế độ | Hành vi |
|---|---|
| Enable | Xử lý incremental — chỉ dữ liệu mới từ lần chạy thành công trước |
| Disable | Luôn xử lý toàn bộ (mặc định) |
| Pause | Xử lý dữ liệu mới nhưng không cập nhật bookmark (dùng khi reprocess dải cụ thể với job-bookmark-from/to) |
- Với S3: bookmark theo timestamp/danh sách object đã đọc
- Với JDBC: cần cột tăng đơn điệu (primary key, timestamp) làm
jobBookmarkKeys - Reset bookmark: chạy lại từ đầu (
job-bookmark-reset) khi cần reprocess toàn bộ - Bookmark chỉ cập nhật khi job kết thúc thành công — job fail thì lần sau đọc lại từ điểm cũ (at-least-once → downstream cần idempotent)
# Trong script: bookmark yêu cầu transformation_ctx trên mỗi source/sink
datasource = glueContext.create_dynamic_frame.from_catalog(
database="sales_db",
table_name="orders",
transformation_ctx="datasource0" # BẮT BUỘC để bookmark hoạt động
)
Bẫy hay thi: bookmark bật nhưng "job vẫn xử lý lại toàn bộ" → thiếu transformation_ctx, hoặc job.init/job.commit không được gọi trong script.
3. Triggers và chạy job
| Cách kích hoạt | Chi tiết |
|---|---|
| Schedule trigger | Cron trong Glue (vd cron(0 2 * * ? *)) |
| Conditional trigger | Chạy khi job/crawler khác SUCCEEDED/FAILED — xây chuỗi trong Glue Workflows |
| On-demand | API/console/Step Functions/Airflow |
| EventBridge | S3 file đến → EventBridge rule → Glue workflow/job |
Tham số job đáng nhớ
--job-bookmark-option: job-bookmark-enable/disable/pause--enable-metrics,--enable-continuous-cloudwatch-log: observability--enable-auto-scaling--additional-python-modules: cài thư viện pip lúc chạy- Retry:
MaxRetriesở job definition; timeout mặc định 2880 phút (48h) — nên đặt thấp hơn
4. Glue Studio và các công cụ liên quan
- Glue Studio: giao diện visual kéo-thả tạo ETL job (source → transform → target), sinh code PySpark — "no-code/low-code ETL"
- Glue interactive sessions / notebooks: phát triển và test PySpark tương tác, tính tiền theo phút
- Glue DataBrew: chuẩn bị dữ liệu no-code cho data analyst — 250+ transformation qua UI (profile, clean, normalize); khác Studio ở chỗ hướng người dùng business/analyst, không sinh Spark code để tự quản
- So sánh nhanh: cần visual ETL cho engineer → Studio; cần data prep cho analyst không biết code → DataBrew
5. Chi phí và giới hạn nhanh
- Billing: DPU-hour, tính theo giây, tối thiểu 1 phút (Glue 2.0+)
- Python shell rẻ nhất cho việc nhỏ — đừng dùng Spark job 10 DPU để copy 1 file
- Concurrency:
Max concurrent runsper job — tăng khi cần chạy song song nhiều partition ngày
Câu hỏi ôn tập
-
Job chạy nightly trên S3 phải bỏ qua dữ liệu đã xử lý. Cấu hình gì và điều kiện gì trong code?
Xem đáp án
Bật job bookmark (
--job-bookmark-option job-bookmark-enable) và trong script mọi source/sink phải cótransformation_ctxduy nhất, kèmjob.init()/job.commit(). Bookmark ghi lại object đã đọc; lần chạy sau chỉ đọc file mới. Thiếutransformation_ctxlà lý do phổ biến khiến bookmark "không ăn". -
Khi nào chọn Python shell job thay vì Spark job?
Xem đáp án
Khi task không cần xử lý phân tán: gọi API, thao tác file nhỏ/metadata, chạy SQL trên warehouse, orchestration glue code. Python shell chạy 1 node với 0.0625-1 DPU — rẻ hơn nhiều so với Spark job tối thiểu 2 worker. Dùng Spark khi dữ liệu lớn cần parallel transform.
-
Batch job hàng đêm không có SLA chặt, muốn giảm chi phí Glue. Lựa chọn nào?
Xem đáp án
Flex execution — job chạy trên spare capacity, giảm ~34% giá DPU-hour, đổi lại thời gian khởi động/hoàn thành không đảm bảo. Kết hợp Auto Scaling để không over-provision worker. Đây là đáp án "most cost-effective" cho non-urgent batch; job có SLA thì giữ standard.
-
Cần reprocess toàn bộ dữ liệu lịch sử một lần do đổi logic transform. Xử lý bookmark thế nào?
Xem đáp án
Reset job bookmark (console/API
ResetJobBookmarkhoặc--job-bookmark-reset) rồi chạy lại — job đọc từ đầu. Nếu chỉ reprocess một dải: dùng bookmark pause kèmjob-bookmark-from/job-bookmark-tođể đọc lại khoảng run cụ thể mà không phá state hiện tại. -
Glue job fail giữa chừng sau khi đã ghi một phần output. Lần chạy sau (bookmark enable) sẽ thế nào và cần lưu ý gì?
Xem đáp án
Bookmark chỉ commit khi job thành công, nên lần sau job đọc lại từ điểm sau lần thành công gần nhất → dữ liệu của lần fail có thể bị xử lý lại (at-least-once). Downstream phải idempotent: ghi đè theo partition (overwrite), dùng khóa dedupe, hoặc ghi vào bảng Iceberg với MERGE — tránh append mù dẫn tới duplicate.
-
DataBrew và Glue Studio khác nhau thế nào?
Xem đáp án
Glue Studio: visual ETL cho data engineer, sinh PySpark code, chạy như Glue job đầy đủ. DataBrew: data preparation no-code cho analyst — profile dữ liệu, 250+ transform có sẵn qua UI, xuất "recipe" chạy được thành job. Đề bài nhấn "business analysts, no coding" → DataBrew; "ETL pipeline, engineers" → Studio/Glue job.
Bài tập thực hành
- Tạo Glue Studio job đọc bảng CSV tuần 1 → transform (drop cột) → ghi Parquet vào curated
- Bật job bookmark, chạy 2 lần, thêm file mới giữa 2 lần chạy và xác nhận chỉ file mới được xử lý
- Thử một DataBrew project với dataset mẫu, xem profile dữ liệu
- Đọc Glue job parameters reference
Tài liệu tham khảo chính thức
Tiếp theo: AWS DMS - Database Migration Service