Spark chạy theo mô hình một driver điều phối, nhiều executor làm việc. Driver giữ kế hoạch tính toán; executor là các process trên worker node, thực sự đọc dữ liệu và chạy task.
- Driver — process chạy hàm
main()và tạoSparkSession. Nó dựng DAG từ code, chia thành stage và task, gửi task đi và gom kết quả. - Cluster manager — cấp tài nguyên (CPU, RAM) cho ứng dụng: Standalone, YARN hoặc Kubernetes.
- Executor — process JVM trên worker node, chạy nhiều task song song (mỗi core một task), giữ dữ liệu cache và ghi file shuffle.
Luồng một job: driver xin executor từ cluster manager → gặp một action (count, write) thì dựng DAG → cắt thành stage tại các điểm shuffle → mỗi stage sinh một task cho mỗi partition → executor chạy task và báo kết quả về driver.
Hình dung driver là quản đốc cầm bản vẽ, executor là tổ thợ: quản đốc chia việc chứ không tự bê gạch.
Lưu ý: collect() kéo toàn bộ dữ liệu về driver. Với bảng lớn, driver bị OOM trong khi executor vẫn còn dư RAM — đây là lỗi thường gặp ở người mới dùng Spark.