“Nó chạy được thì cứ để đó chạy thôi…”
Câu nói kinh điển mở đầu cho... một chuỗi tai họa.

🧪 All-purpose Compute – Người Bạn Thân Thuở Khởi Đầu

Nếu bạn là người mới tiếp cận Databricks, hẳn bạn từng yêu thích cảm giác:

  • Mở một notebook → chọn All-purpose compute → chạy Spark code mượt mà.

  • Không cần quan tâm cluster config.

  • Có giao diện đẹp, feedback realtime, mọi thứ “auto”.

Chính vì sự tiện lợi và linh hoạt, nhiều team chọn luôn All-purpose để chạy cả các job ETL production hàng ngày, thậm chí là batch pipelines quy mô lớn.


🚨 Nhưng Sự Tiện Lợi Luôn Có Giá Của Nó

Câu chuyện thực tế:

Trong một dự án mình từng triển khai, team đã:

  • Dùng chung 1 cluster All-purpose cho việc:

    • Chạy notebook cá nhân.

    • Chạy production job định kỳ qua dbutils.notebook.run().

  • Không dùng Job compute, không có autologging chuẩn, không có cleanup.

Mọi thứ chạy ổn... cho đến khi không còn ổn nữa.


🧨 Chuyện Gì Đã Xảy Ra?

🚧 1. Log sinh ra quá nhiều

  • Mỗi job chạy tạo log trên DBFS (hoặc local driver).

  • Không có cleanup sau khi job chạy xong.

  • Notebook sử dụng display(), print() rất nhiều → tạo gigabyte log mỗi ngày.

🗂️ Sau 2 tuần: /driver/ chứa hơn 100K file .log, .ipynb, .html,...


🔥 2. Driver bị “gãy” sau một đêm

Vào một sáng thứ Hai, job ETL quan trọng chạy lúc 2AM bị crash:

lua
java.io.IOException: No space left on device at java.io.FileOutputStream.writeBytes(Native Method) ... Driver terminated unexpectedly.

Driver node bị hết disk do:

  • Log file không được dọn.

  • Không tự restart lại như Job compute.

Hậu quả:

  • Job bị fail, dữ liệu không cập nhật.

  • Dev phải SSH vào cluster để dọn /tmp, restart compute.


🧠 Bài Học Rút Ra

❌ Đừng dùng All-purpose compute để chạy job hàng ngày hoặc production pipelines.

Vì sao?

Vấn đềHệ quả
Không tự tắt khi job xongTốn chi phí
Không tự restart driver khi crashDễ chết job
Không cleanup logHết disk
Không gắn liền với job trackingKhó trace lỗi
Không versioned log hoặc MLFlow integration chuẩnKhông tái hiện job history

✅ Cách Làm Đúng

Nhu cầuGiải pháp
Chạy định kỳDùng Job compute
Chạy ETL lớnDùng Job với instance pool
Giảm startup timeDùng instance pools
SQL tự độngDùng SQL warehouse (serverless)
Test và khám phá dữ liệu✅ Lúc này mới dùng All-purpose

📌 Kết luận

All-purpose compute là công cụ tuyệt vời cho tương tác, khám phá, học tập. Nhưng đừng để sự tiện lợi đánh lừa bạn trong môi trường production.

Nếu bạn không cleanup, không giám sát log, và không tách riêng job pipelines – cái giá phải trả là những buổi sáng khủng hoảng khi driver gãy.


Bạn từng gặp trường hợp tương tự? Hãy chia sẻ câu chuyện của bạn cùng #DataEngineerVN nhé!