Trong bài viết này, chúng ta sẽ cùng nhau khám phá cách Apache Spark vận hành trong môi trường cluster (cụm máy chủ). Đây là kiến thức nền tảng cực kỳ quan trọng nếu bạn muốn triển khai Spark trong môi trường thực tế, đặc biệt là khi làm việc với Big Data.

📌 Spark chạy trên cluster như thế nào?

Khi bạn viết một chương trình Spark, nó không chạy đơn độc. Thay vào đó, nó phân tán thành nhiều tiến trình (process) trên một cụm máy chủ. Người chỉ huy của toàn bộ quá trình này chính là SparkContext, được tạo ra trong chương trình chính (driver program) của bạn.


🧱 Các thành phần chính trong Spark Cluster

Hãy tưởng tượng kiến trúc này như một đội quân có tổ chức:

1. Driver Program

  • Chính là chương trình bạn viết (main()), nơi tạo ra SparkContext.

  • Là bộ não chỉ đạo mọi thứ, giao tiếp với cluster manager, gửi code đến executors, và lên lịch các tác vụ (tasks).

  • Quan trọng: Driver cần có địa chỉ mạng hợp lệ để các executor kết nối lại với nó.

2. Cluster Manager

  • Là người điều phối tài nguyên. Spark có thể làm việc với:

    • Standalone (tự quản lý)

    • YARN (Hadoop)

    • Kubernetes (container-based)

  • Spark không quan tâm bạn dùng cluster manager nào, miễn là có thể xin được executors.

3. Executor

  • Là các tiến trình chạy trên các worker node, nơi thực hiện tác vụ và lưu trữ dữ liệu.

  • Mỗi ứng dụng Spark sẽ có executor riêng biệt, không chia sẻ với nhau ➜ tăng tính độc lập và bảo mật.


🧭 Quy trình khi Spark chạy trên cluster

  1. SparkContext kết nối tới cluster manager.

  2. Cluster manager cấp phát executors trên các worker node.

  3. SparkContext gửi mã nguồn (Python script hoặc JAR) đến executors.

  4. Cuối cùng, SparkContext phân chia công việc thành tasks, rồi phân phối cho các executors thực thi.


🧩 Các khái niệm quan trọng

Thuật ngữGiải thích
ApplicationChương trình Spark của bạn, gồm Driver + Executors
Driver ProgramChương trình chính có chứa SparkContext
ExecutorTiến trình thực thi task và lưu trữ dữ liệu
Worker NodeMáy trong cụm có khả năng chạy executor
Cluster ManagerDịch vụ quản lý tài nguyên cho toàn cluster
Deploy ModeGồm "client" (driver chạy bên ngoài cluster) và "cluster" (driver chạy trong cluster)
TaskĐơn vị công việc nhỏ được gửi tới executor
StageTập hợp các task không phụ thuộc nhau
JobMột hành động Spark (như .collect() hoặc .save()) tạo ra một hoặc nhiều stages

🎯 Ưu điểm của kiến trúc này

  • Tách biệt hoàn toàn giữa các ứng dụng Spark ➜ tránh xung đột tài nguyên.

  • Dễ dàng triển khai trên các nền tảng cluster khác nhau.

  • Chủ động trong việc phân phối tài nguyên và lập lịch công việc.

Tuy nhiên, vì executor không chia sẻ với nhau, nên bạn không thể chia sẻ dữ liệu giữa các ứng dụng Spark nếu không lưu trữ tạm qua các hệ thống trung gian như HDFS, S3, hay Kafka.


⚙️ Cách gửi ứng dụng lên cluster

Bạn sử dụng lệnh spark-submit để triển khai ứng dụng của mình:

bash
spark-submit \ --master yarn \ --deploy-mode cluster \ my_spark_app.py

Tùy vào cluster manager bạn dùng (--master), Spark sẽ gửi job tương ứng đến nơi thích hợp.


📺 Giao diện giám sát (UI)

Khi một ứng dụng đang chạy, bạn có thể truy cập vào địa chỉ:

cpp
http://<địa-chỉ-driver>:4040

Đây là nơi bạn sẽ thấy:

  • Job nào đang chạy?

  • Executor nào đang làm việc?

  • Dung lượng RAM dùng là bao nhiêu?

  • Các stages đang chạy đến đâu?

Ngoài ra, Spark cũng hỗ trợ các công cụ giám sát nâng cao như Spark History Server hoặc tích hợp với Prometheus/Grafana.


🎓 Tổng kết – "Hiểu để vận hành"

Kiến trúc cluster của Spark được thiết kế để:

✅ Tối ưu hiệu suất cho xử lý phân tán
✅ Dễ tích hợp với các hệ thống hiện có
✅ Giúp lập trình viên kiểm soát tốt việc phân bổ tài nguyên và lập lịch job

Nếu bạn nắm vững những thành phần trong kiến trúc này, bạn sẽ có thể triển khai Spark một cách hiệu quả và an toàn trên hạ tầng thực tế – dù là on-premise, cloud, hay hybrid.


📘 Bạn thấy bài viết này hữu ích? Hãy chia sẻ cho người khác hoặc để lại bình luận nhé!



📚 Tài liệu tham khảo

Bài viết này được xây dựng dựa trên hướng dẫn chính thức từ Apache Spark:

🔗 Cluster Mode Overview – Spark Documentation

Nếu bạn muốn hiểu sâu hơn, mình khuyến khích bạn đọc tài liệu gốc để nắm được các chi tiết cấu hình, thông số mạng, và tương tác với các hệ thống khác.