</>Học Dev
Bài học

Tuần 2 - Ngày 2: Glue Jobs và Job Bookmarks

Tuần 2 – Ngày 2

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ạiEngineUse caseBilling
Spark ETLApache Spark (distributed)ETL batch dữ liệu lớnDPU-hour, min 1 phút
Spark StreamingSpark Structured StreamingĐọc Kinesis/Kafka micro-batchDPU-hour
Python shellPython thuần (1 node)Task nhẹ: gọi API, file nhỏ, glue code0.0625 hoặc 1 DPU
RayRay (Python distributed)Xử lý Python song song không cần SparkRay 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

WorkerDPUGhi chú
G.1X1 (4 vCPU, 16GB)Mặc định, workload thường
G.2X2 (8 vCPU, 32GB)Job cần memory hơn
G.4X / G.8X4 / 8Transform nặng, dữ liệu lớn (Glue 3.0+)
G.025X0.25Chỉ 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
EnableXử lý incremental — chỉ dữ liệu mới từ lần chạy thành công trước
DisableLuôn xử lý toàn bộ (mặc định)
PauseXử 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ạtChi tiết
Schedule triggerCron trong Glue (vd cron(0 2 * * ? *))
Conditional triggerChạy khi job/crawler khác SUCCEEDED/FAILED — xây chuỗi trong Glue Workflows
On-demandAPI/console/Step Functions/Airflow
EventBridgeS3 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 runs per job — tăng khi cần chạy song song nhiều partition ngày

Câu hỏi ôn tập

  1. 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_ctx duy nhất, kèm job.init()/job.commit(). Bookmark ghi lại object đã đọc; lần chạy sau chỉ đọc file mới. Thiếu transformation_ctx là lý do phổ biến khiến bookmark "không ăn".

  2. 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.

  3. 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.

  4. 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 ResetJobBookmark hoặ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èm job-bookmark-from/job-bookmark-to để đọc lại khoảng run cụ thể mà không phá state hiện tại.

  5. 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.

  6. 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