Hướng Dẫn Thiết Lập và Sử Dụng Spark Operator trên Kubernetes
Giới thiệu về Spark Operator
Spark Operator là một Kubernetes Operator được thiết kế đặc biệt cho Spark. Nó giúp định nghĩa và thực thi các ứng dụng Spark một cách dễ dàng như các workload khác trên Kubernetes, bằng cách sử dụng và quản lý các tài nguyên tùy chỉnh (CRDs) trong Kubernetes để chỉ định, chạy và cập nhật trạng thái của các ứng dụng Spark. Tất cả mã nguồn phát triển có sẵn tại Bigdata-Repo.
Để tìm hiểu thêm, bạn có thể tìm thấy thông tin tại phần Thiết kế, Đặc điểm API và Hướng dẫn Người dùng trên GitHub.
Tại sao nên chọn Spark Operator?
Spark Operator đơn giản hóa việc triển khai và quản lý các ứng dụng Spark trên Kubernetes. Nó cung cấp một cách tiếp cận khai báo để chạy các ứng dụng Spark, xử lý sự phức tạp trong quản lý tài nguyên, lập lịch và giám sát. Điều này cho phép các nhà phát triển tập trung vào việc viết mã Spark thay vì quản lý cơ sở hạ tầng. Thêm vào đó, Spark Operator hỗ trợ cả khối lượng công việc theo lô và luồng, giúp đáp ứng đa dạng nhu cầu xử lý dữ liệu lớn.
Lợi ích chính của Spark Operator gồm có:
- Quản lý ứng dụng khai báo: Định nghĩa các ứng dụng Spark trong các tệp YAML, giúp dễ dàng quản lý và triển khai ứng dụng bằng cách sử dụng các công cụ của Kubernetes như kubectl.
- Quản lý tài nguyên tự động: Tự động phân bổ tài nguyên cho các tác vụ Spark, đảm bảo sử dụng hiệu quả các tài nguyên của cụm.
- Đa dạng: Hỗ trợ cả khối lượng công việc theo lô và luồng, phục vụ cho một loạt các nhu cầu xử lý dữ liệu lớn.
- Giám sát đơn giản: Tích hợp với các công cụ giám sát của Kubernetes, cung cấp cái nhìn rõ hơn về hiệu suất công việc và việc sử dụng tài nguyên.
Cách hoạt động của Spark Operator
Bước 1: Định nghĩa ứng dụng Spark trong tệp YAML
Bạn sẽ tạo một tệp YAML mô tả ứng dụng Spark của mình. Tệp này sẽ bao gồm các thông số xác định như loại ứng dụng (ví dụ: Python, Java), Docker image sử dụng, yêu cầu tài nguyên cho driver và executor, cùng với các thiết lập cấu hình khác.
Bước 2: Áp dụng tệp YAML bằng kubectl
Khi tệp YAML đã sẵn sàng, bạn có thể sử dụng kubectl
để áp dụng tệp này vào cụm Kubernetes của bạn. Spark Operator sẽ đọc tệp này, tạo các tài nguyên Kubernetes cần thiết và quản lý vòng đời của ứng dụng Spark.
1. Các bước thiết lập Spark Operator với Kubernetes
Các yêu cầu trước khi bắt đầu
Trước khi bắt đầu, hãy đảm bảo bạn có những thứ sau đây:
- Một cụm Kubernetes đang chạy.
- Công cụ dòng lệnh
kubectl
đã được cài đặt và cấu hình. - Git được cài đặt trên máy tính của bạn.
Bước 1: Nhân bản kho mã nguồn
Nhân bản kho mã chứa cấu hình và các script cần thiết để triển khai Spark Operator:
git clone https://github.com/dnguyenngoc/big-data.git
Bước 2: Bắt đầu Spark Operator
Chuyển đến thư mục k8s
và sử dụng script _start.sh
để triển khai Spark Operator. Script này tự động hóa quá trình thiết lập:
cd big-data/k8s
sh _start.sh spark-operator
Bước 3: Xác minh việc triển khai
Sau khi triển khai Spark Operator, hãy xác minh rằng các pod và stateful set đang chạy đúng cách trong namespace spark-operator
:
kubectl get pod,statefulset -n spark-operator
Kết quả nên hiển thị các pod và stateful set đang chạy có liên quan đến Spark Operator.
2. Nộp ứng dụng
SparkApplication
về cơ bản là một tài nguyên CRD
có thể được áp dụng lên cụm bằng cách sử dụng kubectl
, như trong ví dụ dưới đây:
---
apiVersion: 'sparkoperator.k8s.io/v1beta2'
kind: SparkApplication
metadata:
name: pyspark-pi
namespace: spark-operator
spec:
type: Python
pythonVersion: '3'
mode: cluster
image: 'duynguyenngoc/spark:3.5.1'
imagePullPolicy: Always
mainApplicationFile: local:///opt/spark/examples/src/main/python/pi.py
sparkVersion: '3.5.1'
restartPolicy:
type: OnFailure
onFailureRetries: 3
onFailureRetryInterval: 10
onSubmissionFailureRetries: 5
onSubmissionFailureRetryInterval: 20
driver:
cores: 1
coreLimit: '1200m'
memory: '512m'
labels:
version: 3.5.1
serviceAccount: sparkoperator
executor:
cores: 1
instances: 1
memory: '512m'
labels:
version: 3.5.1
Để nộp ứng dụng Spark Pi này lên Kubernetes, bạn chỉ cần sử dụng:
kubectl apply -f spark-pi.yaml
kubectl get sparkapp -n spark-operator
source: viblo