thảo luận Xin kinh nghiệm triển khai mô hình Spark as a service cho enduser cho cụm Kurbenetes on premise

ducgiang99

Junior Member
Dạ e chào mọi người ạ
Em hiện tại đang muốn migrate hệ thống chạy Spark App từ quản lý bằng Yarn sang cụm Kurbenetes on premise dùng cho end user sử dụng Spark Operator, nhưng thấy mô hình deploy này đần độn quá =( . E có một số thắc mắc khi deploy spark app trên K8S, rất mong mọi người ai deploy mô hình này có thể tư vấn giúp e được không ạ:
  • E muốn deploy spark history server nhưng hiện tại helm chart của nó đã deprecated, ko biết giờ mình nên sử dụng image nào.
  • Vấn đề về quản lý log, khi chương trình spark chạy xong thì chỉ còn lại mỗi log của driver, muốn tra log driver thì phải dùng kubecl logs driver-pods, nhưng về góc độ enduser thì ko đc truy cập vào trong cụm K8S, e có tra trên mạng thì thấy có giải pháp EFK và đã deploy thử, nhưng chỉ lưu log thô của chương trình để cho user dễ debug thì có cần thiết dùng EFK ko ạ (ko cần tính năng search, do ES nó lưu thêm nhiều trường quá mà e ko cần tính năng search trên Kibana). Chưa kể khi có nhiều chương trình, mỗi chương trình muốn lưu log vào riêng 1 folder thì ko biết phương án log lên S3 dùng fluentbit có khả thi ko ạ.
  • Vấn đề khi muốn expose sparkUI của chương trình thì nó chỉ expose service ở trong cụm, e muốn expose ra ngoài cho enduser thì mỗi khi deploy 1 spark app mình lại phải tạo ra 1 ingress mới đúng ko ạ, điều này có gây ra vấn đề j ko ạ.
  • Không biết trên K8S thì có tính năng queue như trên Hadoop YARN không, về tính năng quản lý, view các job đang RUNNING, FINISHED,...
  • Ai đã làm phần này rồi có thể cho e thêm 1 số kinh nghiệm khi triển khai được không ạ
Em cảm ơn mọi người !
 
Dạ e chào mọi người ạ
Em hiện tại đang muốn migrate hệ thống chạy Spark App từ quản lý bằng Yarn sang cụm Kurbenetes on premise dùng cho end user sử dụng Spark Operator, nhưng thấy mô hình deploy này đần độn quá =( . E có một số thắc mắc khi deploy spark app trên K8S, rất mong mọi người ai deploy mô hình này có thể tư vấn giúp e được không ạ:
  • E muốn deploy spark history server nhưng hiện tại helm chart của nó đã deprecated, ko biết giờ mình nên sử dụng image nào.
  • Vấn đề về quản lý log, khi chương trình spark chạy xong thì chỉ còn lại mỗi log của driver, muốn tra log driver thì phải dùng kubecl logs driver-pods, nhưng về góc độ enduser thì ko đc truy cập vào trong cụm K8S, e có tra trên mạng thì thấy có giải pháp EFK và đã deploy thử, nhưng chỉ lưu log thô của chương trình để cho user dễ debug thì có cần thiết dùng EFK ko ạ (ko cần tính năng search, do ES nó lưu thêm nhiều trường quá mà e ko cần tính năng search trên Kibana). Chưa kể khi có nhiều chương trình, mỗi chương trình muốn lưu log vào riêng 1 folder thì ko biết phương án log lên S3 dùng fluentbit có khả thi ko ạ.
  • Vấn đề khi muốn expose sparkUI của chương trình thì nó chỉ expose service ở trong cụm, e muốn expose ra ngoài cho enduser thì mỗi khi deploy 1 spark app mình lại phải tạo ra 1 ingress mới đúng ko ạ, điều này có gây ra vấn đề j ko ạ.
  • Không biết trên K8S thì có tính năng queue như trên Hadoop YARN không, về tính năng quản lý, view các job đang RUNNING, FINISHED,...
  • Ai đã làm phần này rồi có thể cho e thêm 1 số kinh nghiệm khi triển khai được không ạ
Em cảm ơn mọi người !
Hóng cao nhân giải đáp, và cũng hóng ông thớt đền ơn người giải đáp bằng card bao nhiêu :beauty:
 
Dạ e chào mọi người ạ
Em hiện tại đang muốn migrate hệ thống chạy Spark App từ quản lý bằng Yarn sang cụm Kurbenetes on premise dùng cho end user sử dụng Spark Operator, nhưng thấy mô hình deploy này đần độn quá =( . E có một số thắc mắc khi deploy spark app trên K8S, rất mong mọi người ai deploy mô hình này có thể tư vấn giúp e được không ạ:
  • E muốn deploy spark history server nhưng hiện tại helm chart của nó đã deprecated, ko biết giờ mình nên sử dụng image nào.
  • Vấn đề về quản lý log, khi chương trình spark chạy xong thì chỉ còn lại mỗi log của driver, muốn tra log driver thì phải dùng kubecl logs driver-pods, nhưng về góc độ enduser thì ko đc truy cập vào trong cụm K8S, e có tra trên mạng thì thấy có giải pháp EFK và đã deploy thử, nhưng chỉ lưu log thô của chương trình để cho user dễ debug thì có cần thiết dùng EFK ko ạ (ko cần tính năng search, do ES nó lưu thêm nhiều trường quá mà e ko cần tính năng search trên Kibana). Chưa kể khi có nhiều chương trình, mỗi chương trình muốn lưu log vào riêng 1 folder thì ko biết phương án log lên S3 dùng fluentbit có khả thi ko ạ.
  • Vấn đề khi muốn expose sparkUI của chương trình thì nó chỉ expose service ở trong cụm, e muốn expose ra ngoài cho enduser thì mỗi khi deploy 1 spark app mình lại phải tạo ra 1 ingress mới đúng ko ạ, điều này có gây ra vấn đề j ko ạ.
  • Không biết trên K8S thì có tính năng queue như trên Hadoop YARN không, về tính năng quản lý, view các job đang RUNNING, FINISHED,...
  • Ai đã làm phần này rồi có thể cho e thêm 1 số kinh nghiệm khi triển khai được không ạ
Em cảm ơn mọi người !
  • check version helm chart tương ứng version spark muốn dùng, nó dùng image nào không cần care.
  • nhu cầu vậy loki + node expoter + grafana là đủ, setup trong cụm k8s luôn, expose service grafana ra.
  • expose sparkUI bằng node port hoặc muốn dùng lb thì setup thêm metallb + ingress bất kì (nginx/kong) route theo domain hoặc path.
  • k8s là container orchestration không liên quan gì hadoop, thích thì deploy thêm hadoop để xài.
  • chốt là deploy bình trường trên bare metal hoặc vm cho khỏe chứ build cả cụm k8s chỉ để làm cái này chưa thấy ưu điểm gì :sweat:
 
  • k8s là container orchestration không liên quan gì hadoop, thích thì deploy thêm hadoop để xài.
  • chốt là deploy bình trường trên bare metal hoặc vm cho khỏe chứ build cả cụm k8s chỉ để làm cái này chưa thấy ưu điểm gì :sweat:
Chắc k muốn phụ thuộc Hadoop ecosystem my fen. Nó coi K8S là resource manager thay thế YARN thôi.

Btw, cắm mắt hóng. Bài này ngang build 1 service kiếm tiền của bọn tư bản aka cloud provider (AWS Glue for example) rồi :doubt:. Hỏi Gemini thấy nó break kha khá, mà overview thôi chứ detail như thớt chắc khó...
// Prompt, hope it useful
Code:
I want you to act as an IT Architect. I will provide some details about the functionality of an application or other digital product, and it will be your job to come up with ways to integrate it into the IT landscape. This could involve analyzing business requirements, performing a gap analysis and mapping the functionality of the new system to the existing IT landscape. Next steps are to create a solution design, a physical network blueprint, definition of interfaces for system integration, a blueprint for the deployment environment and issues that need attention. My first request is "I need help to implement Spark cluster on K8S for multi-tenant."
 
Dạ e chào mọi người ạ
Em hiện tại đang muốn migrate hệ thống chạy Spark App từ quản lý bằng Yarn sang cụm Kurbenetes on premise dùng cho end user sử dụng Spark Operator, nhưng thấy mô hình deploy này đần độn quá =( . E có một số thắc mắc khi deploy spark app trên K8S, rất mong mọi người ai deploy mô hình này có thể tư vấn giúp e được không ạ:
  • E muốn deploy spark history server nhưng hiện tại helm chart của nó đã deprecated, ko biết giờ mình nên sử dụng image nào.
  • Vấn đề về quản lý log, khi chương trình spark chạy xong thì chỉ còn lại mỗi log của driver, muốn tra log driver thì phải dùng kubecl logs driver-pods, nhưng về góc độ enduser thì ko đc truy cập vào trong cụm K8S, e có tra trên mạng thì thấy có giải pháp EFK và đã deploy thử, nhưng chỉ lưu log thô của chương trình để cho user dễ debug thì có cần thiết dùng EFK ko ạ (ko cần tính năng search, do ES nó lưu thêm nhiều trường quá mà e ko cần tính năng search trên Kibana). Chưa kể khi có nhiều chương trình, mỗi chương trình muốn lưu log vào riêng 1 folder thì ko biết phương án log lên S3 dùng fluentbit có khả thi ko ạ.
  • Vấn đề khi muốn expose sparkUI của chương trình thì nó chỉ expose service ở trong cụm, e muốn expose ra ngoài cho enduser thì mỗi khi deploy 1 spark app mình lại phải tạo ra 1 ingress mới đúng ko ạ, điều này có gây ra vấn đề j ko ạ.
  • Không biết trên K8S thì có tính năng queue như trên Hadoop YARN không, về tính năng quản lý, view các job đang RUNNING, FINISHED,...
  • Ai đã làm phần này rồi có thể cho e thêm 1 số kinh nghiệm khi triển khai được không ạ
Em cảm ơn mọi người !
Mình có thử qua provision 1 eks cluster cho spark, có vài điểm như sau
  • Zeppelin notebook chưa support k8s executor cho spark
  • Không nên dùng batch native của k8s (volcano) vì sẽ làm phức tạp trong việc manage resources
  • Nên dùng 1 restful API ở trước kubernetes cluster, cho kubeconfig vào con API đó để nó schedule.
  • Handle scheduling jobs và authenticate cũng ở restful API đó luôn
  • Recommend:
+ GitHub - exacaster/lighter: REST API for Apache Spark on K8S or YARN (https://github.com/exacaster/lighter)
+ Kubernetes support? · Issue #1038 · spark-jobserver/spark-jobserver (https://github.com/spark-jobserver/spark-jobserver/issues/1038)

Trả lời cho bạn 1 số câu
  • Bạn có thể ham khảo qua loki và grafana dashboard
  • Phần sparkUI, mình nghĩ chỉ có thể expose thông qua history server thôi, còn gần như là con restful api sẽ đóng vai trò là driver hoặc có 1 con pod đóng vai trò driver
  • spark on k8s không support batch và scheduling nên phải dùng thằng thứ 3 như volcano

Bạn đọc thêm blog của bạn duyệt này, trước đây mình có tham khảo trước khi làm
 
Mình có thử qua provision 1 eks cluster cho spark, có vài điểm như sau
  • Zeppelin notebook chưa support k8s executor cho spark
  • Không nên dùng batch native của k8s (volcano) vì sẽ làm phức tạp trong việc manage resources
  • Nên dùng 1 restful API ở trước kubernetes cluster, cho kubeconfig vào con API đó để nó schedule.
  • Handle scheduling jobs và authenticate cũng ở restful API đó luôn
  • Recommend:
+ GitHub - exacaster/lighter: REST API for Apache Spark on K8S or YARN (https://github.com/exacaster/lighter)
+ Kubernetes support? · Issue #1038 · spark-jobserver/spark-jobserver (https://github.com/spark-jobserver/spark-jobserver/issues/1038)

Trả lời cho bạn 1 số câu
  • Bạn có thể ham khảo qua loki và grafana dashboard
  • Phần sparkUI, mình nghĩ chỉ có thể expose thông qua history server thôi, còn gần như là con restful api sẽ đóng vai trò là driver hoặc có 1 con pod đóng vai trò driver
  • spark on k8s không support batch và scheduling nên phải dùng thằng thứ 3 như volcano

Bạn đọc thêm blog của bạn duyệt này, trước đây mình có tham khảo trước khi làm
Dạ e cảm ơn anh, spark history server thì e thấy h helm đã deprecate rồi, không biết trc a dùng gì để deploy phần UI này ạh
 
Dạ e cảm ơn anh, spark history server thì e thấy h helm đã deprecate rồi, không biết trc a dùng gì để deploy phần UI này ạh
Fork ra rồi maintain thôi bạn. Số lượng người dùng bên team mình cũng ít nên cứ đẩy log lên s3, rồi lấy logPath từ đó.

Off-topic:
Còn mình vẫn chưa thấy bên nào cung cấp được SaaS cho spark theo kiểu on-demand đâu, mà phải provision cả cluster. Vì cơ bản là scale lên = kubernetes thêm jar file vào phải build lại image

Và còn 1 hướng đi nữa là bạn có thể dùng zeppelin như FE Apache Zeppelin 0.11.1 Documentation: Install (https://zeppelin.apache.org/docs/latest/quickstart/kubernetes.html#spark-on-kubernetes)

Hỏi ngu 1 phát nữa là on-premise thì gần như không có s3 rồi, bạn phải tự maintain s3-compatible object storage như minio. Nên mình thật sự vẫn chưa thấy lợi ích move từ Yarn -> k8s nếu on-premise. Đến Flink cluster mình cũng setup = Yarn luôn :eek:

Còn bên mình peak usage với normal load nó khác xa nhau nên hướng qua spot instance mới cut được gần 70% chi phí, không biết bên bạn từ Yarn -> k8s on-premise cut được nhiêu ec2-spot-labs/cost-optimized-spark-on-kubernetes/README.md at master · awslabs/ec2-spot-labs (https://github.com/awslabs/ec2-spot-labs/blob/master/cost-optimized-spark-on-kubernetes/README.md)
 
Đúng là S3 thì phải xài hàng open source là MinIO rồi anh, về image thì e hiện chỉ đang xài base image thôi, còn file jar vs dependency thì spark operator nó hỗ trợ mount và copy vào trong base image lúc submit. Do mô hình cung cấp service thông suốt vs người dùng cuối nên chắc phải move lên K8S r a, Cái này là build giải pháp tổng thế, deploy cả database lên k8s làm warehouse nữa nên phải tận dụng deploy spark engine lên đấy luôn anh ạ, chứ dưới góc độ submit cho dễ thì e vẫn thấy YARN nó tiện hơn :D
 
Back
Top