Lý thuyết đã có thực hành đã có, qua 5 phần trong series chắc hẳn các bạn đã có được những kiến thức nhất định về Apache Spark, từ kiến trúc đến làm quen coding với API.
Để kết thúc series Apache Spark Fundamentals, hôm nay mình sẽ giới thiệu nội dung cuối cùng về cách mà 1 ứng dụng Spark run trên cụm phân tán, kiến thức rất quan trọng trong việc triển khai 1 ứng dụng thực tế. Do Spark là thư viện thực thi phân tán nên phần Triển khai cũng có rất nhiều điều để bàn, bắt đầu nhé.
1. The Architecture of a Spark Application
The Spark Driver: Trong mô hình master — slave thì Spark Driver chính là Master, nó chứa Spark Session, thứ mà giúp các bạn tương tác với hàng chục, hàng trăm máy tính khác để giao các công việc tính toán. Những tính toán không thông qua RDD hoặc DataFrame sẽ được thực thi trên Driver.
The Spark Executors: Trong thực tế, 1 chương trình spark chỉ có 1 Driver nhưng lại có thể có đến hàng trăm, hàng nghìn executor, chúng làm nhiệm vụ tính toán và trả về kết quả cho Driver.
The Cluster Manager: nghĩ 1 chút nhé, lại là về phân tán, nếu thông thường bạn chạy 1 ứng dụng, hệ điều hành sẽ cung cấp ram, cpu, data cho tiến trình của bạn, tuy nhiên do Spark chạy phân tán trên nhiều máy tính nên ta cần 1 “ai đó” đứng ra điều phối tài nguyên giữa các máy này, đó chính là Cluster Manager. Bản thân Cluster Managercũng có mô hình master — salve như sau:
Spark đang hỗ trợ các loại cluster manager như sau:
- Hadoop YARN
- Apache Mesos
- Kubernetes
- Spark Standalone
Execution Modes
Spark cung cấp sẵn cho người dùng spark-submit
Dùng để lựa chọn cách mà bạn “đặt” các thành phần của chương trình Spark như Driver hay Executor ở đâu. Có 3 lựa chọn:
- Cluster mode
- Client mode
- Local mode
Cluster mode:
Trong chế độ này, toàn bộ Spark Driver và Spark Executor sẽ được Cluster Manager quản lý, nói cách khác, Cluster Manager sẽ coi Driver và Executor đều là các , tỏngcontainer của chúng.
Client mode:
Ở chế độ này, Cluster Manager chỉ quản lý Executor, Driver sẽ sử dụng tài nguyên trên máy tính mà người dùng submit job.
Local mode:
Ngược lại vs 2 cách trên, Local mode sẽ chạy cả Spark Driver và Executor trên máy tính của bạn, đây là cách đơn giản để có môi trường học và thực hành Spark.
2. The Life Cycle of a Spark Application
Vòng đời 1 ứng dụng Spak có thể được chia là 4 giai đoạn như sau:
- Client Request
- Launch
- Execution
- Completion
Client request:
Một chương trình bắt đầu khi bạn submit, ví dụ 1 gói jar chứa code cần thực thi phân tán sử dụng thư viện Apache Spark, tùy từng mode ở trên mà sẽ có 1 chút khác biệt, tuy nhiên có thể tổng quan như hình sau:
Spark submit sẽ contact với master của Cluster Manager, yêu cầu tạo Spark Driver (Spark Session sẽ là 1 object trong Driver) sau đó, giả sử với mode cluster, Cluster Manager sẽ tạo các Container tương ứng cho Spark Driver.
Cú pháp cho Spark Submit như sau:
./bin/spark-submit \ --class <main-class> \ --master <master-url> \ --deploy-mode cluster \ --conf <key>=<value> \... # other options<application-jar> \[application-arguments]
Launch
Khi có Spark Driver, ứng dụng sẽ tùy theo cấu hình mà yêu cầu cấp phát thêm tài nguyên để khởi chạy Spark Executor.
Execution
Đây là lúc thực thi logic trên tài nguyên đã xin cấp phát, các logic map, reduce, filter sẽ chạy ở bước này. Do đóng vai trò điều phối, Driver thường xuyên contact với Executor để giao task hoặc cập nhật trạng thái, bản thân các Executor cũng contact với nhau khi cần move dữ liệu nếu cần.
Completion
Là giai đoạn cuối cùng, khi các tính toán đã xong hoặc vì 1 lý do nào đó Spark Driver down, Cluster Manager sẽ thực hiện thu hồi lại các tài nguyên đã cấp cho Executor.
Hy vọng 6 bài trong series Apache Spark Fundamentals giúp các bạn mới dễ dàng hơn tiếp cận với Apache Spark, một thư viện mạnh mẽ trong rất nhiều các công nghệ xử lý dữ liệu trong 1 hệ thống Big Data hiện đại.
Link gốc bài viết tại đây
Bài viết đăng tải lại dưới sự cho phép của tác giả : thầy Nguyễn Chí Thanh là giảng viên khoá Big Data tại Techmaster
Bình luận