Chuỗi: lakehouse-glossary · Phần 5
Năng suất & công cụ dev
Compaction và chiến lược quản lý file
Compaction và quản lý file trong Lakehouse: OPTIMIZE, VACUUM, ZORDER, lập lịch. Giảm file nhỏ và cải thiện hiệu năng truy vấn.
2026-03-173 phút đọcVI
Chuỗi: lakehouse-glossary
- 1.Delta Lake / Apache Iceberg / Apache Hudi — Định dạng bảng cho Lakehouse
- 2.Data versioning và time travel trong Lakehouse
- 3.Schema evolution và enforcement trong Lakehouse
- 4.Tối ưu định dạng file – Parquet, Delta, Z-Ordering
- 5.Compaction và chiến lược quản lý file(bài này)
- 6.Tối ưu bảng và chiến lược clustering
- 7.Định dạng bảng và quản lý metadata
- 8.Governance — Data catalog, lineage, kiểm soát truy cập
- 9.Security – Mã hóa, masking, tokenization
- 10.Metadata – Metadata store, lineage, discovery
- 11.Change Data Capture (CDC) trong Lakehouse
1. Khái niệm
Compaction là quá trình hợp nhất nhiều file nhỏ thành file lớn hơn để:
- Giảm số lượng file trong một partition
- Tối ưu hóa hiệu suất truy vấn và ghi
- Giảm áp lực lên hệ thống file như S3, GCS, HDFS (metadata, open/close operations)
File Management Strategy bao gồm các quy tắc và lịch trình để:
- Điều phối việc ghi file theo kích thước tối ưu
- Tự động chạy
OPTIMIZE,VACUUM,ZORDER - Theo dõi và dọn dẹp các file cũ không còn tham chiếu
2. Vì sao phải compaction?
| Tình huống phổ biến | Vấn đề tạo ra |
|---|---|
| Streaming ingest ghi mỗi event thành file | Tạo hàng ngàn file nhỏ → Spark scan rất chậm |
| Batch job ghi song song (spark partition) | Tạo nhiều file <10MB → file listing chậm, query chậm |
| Frequent update / merge | Dễ tạo file tombstone → tốn dung lượng + query chậm |
3. Kỹ thuật compaction
a. Manual Compaction
# Gộp file nhỏ (dưới 100MB) thành file lớn hơn
spark.read.format("delta").load("/lake/silver/transactions") \
.repartition(10) \
.write.format("delta").mode("overwrite").option("overwriteSchema", "true") \
.save("/lake/silver/transactions")b. Delta Lake OPTIMIZE
OPTIMIZE delta.`/lake/silver/transactions`
WHERE date >= '2025-01-01'
ZORDER BY (customer_id)c. Auto Compaction trong streaming
spark.conf.set("spark.databricks.delta.autoCompact.enabled", "true")4. Quản lý file Delta với VACUUM
-- Xóa file không còn tham chiếu sau 7 ngày
VACUUM delta.`/lake/silver/transactions` RETAIN 168 HOURS;- Lưu ý: Không nên dùng
VACUUMvới thời gian < 7 ngày nếu có query "time travel" vì dữ liệu có thể bị mất.
5. Lập lịch Compaction
| Tầng dữ liệu | Tần suất chạy compaction | Kỹ thuật |
|---|---|---|
| Bronze | Hằng ngày (off-peak hours) | Repartition + overwrite |
| Silver | Hằng tuần | OPTIMIZE + ZORDER |
| Gold | Theo mỗi batch hoặc demand | Auto-merge + vacuum |
6. Theo dõi & cảnh báo
| Metric | Ngưỡng cần cảnh báo |
|---|---|
| Số file nhỏ (<10MB) / bảng | > 500 |
| Số lượng file / partition | > 1000 |
| % file không còn sử dụng | > 20% |
| Thời gian query tăng đột biến | > 2x bình thường |
7. Tự động hóa với Airflow hoặc Prefect
# Example Airflow task
BashOperator(
task_id="optimize_transaction_table",
bash_command="spark-submit optimize_transactions.py",
schedule_interval="@daily"
)8. Hành động đề xuất
- Tạo dashboard giám sát file nhỏ theo bảng và partition
- Lập cronjob compaction bằng
OPTIMIZEcho bảng lớn: giao dịch, call log, tracking - Tích hợp tự động
VACUUM+ backup định kỳ - Với bảng nhiều
update, cấu hình Delta merge + compact + GC - Dọn bảng lỗi thời bằng
VACUUM + deletesau mỗi quý
Kết luận
Compaction không chỉ giúp tăng tốc độ truy vấn, mà còn giảm đáng kể chi phí lưu trữ và vận hành. Trong môi trường Lakehouse quy mô hàng TB trở lên, đây là một kỹ thuật bắt buộc phải triển khai chuyên nghiệp và có chiến lược.
