梦应逍遥 发表于 2024-8-21 22:39:53

spark on k8s两种方式的原理与对比

spark on k8s两种方式的原理与对比

1、spark on k8s 方式

spark-submit可以直接用来向 Kubernetes 集群提交 Spark 应用,提交机制如下:
1、Spark 创建一个在Kubernetes pod中运行的 Spark 驱动程序。
2、驱动程序创建在 Kubernetes Pod 中运行的执行器并毗连到它们,然后执行应用程序代码。
3、当应用程序完成时,执行器容器停止并被清算,但驱动程序容器会保留日志并在 Kubernetes API 中保持“完成”状态,直到最终被垃圾网络或手动清算。
https://img-blog.csdnimg.cn/direct/f894058bf5984eecad737ec5df781998.png#pic_center
长处

简朴直接:

使用 spark-submit 命令直接提交作业,无需额外学习和设置 Spark Operator。
原生 Spark 体验:

提供原生的 Spark 使用体验,认识 Spark 的用户可以更快上手。
机动性高:

通过 spark-submit 可以直接控制 Spark 作业的设置和运行参数,顺应不同的需求。
无需额外组件:

不需要安装和维护 Spark Operator 这个额外的组件,减少了系统复杂性。
缺点

手动管理:

需要手动管理 Spark 作业的生命周期,包括提交、监控、重启等任务,增加了运维负担。
缺乏集中管理:

每次提交作业都需要单独设置,缺乏集中化管理和版本控制的能力。
2、spark on k8s Operator 方式

使用 Spark Operator 是一种更高级的方式,它提供了一个 Kubernetes 原生的方法来管理 Spark 作业。Spark Operator 是一个 Kubernetes 控制器,负责处理 SparkApplication CRD(自定义资源定义)。
1、安装 Spark Operator,然后定义 spark-app.yaml,再执行 kubectl apply -f spark-app.yaml,这种申明式 API 和调用方式是 K8S 的典范应用方式。
2、使用 Kubernetes 自定义资源来指定、运行和显示 Spark 应用程序的状态。
https://img-blog.csdnimg.cn/e3ae6aac491d4c868e28660d577351f0.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pS-5a2mLeWIq-i1sA==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center
核心组件
Custom Resource Definition (CRD):
Spark Operator 定义了一个自定义资源类型,称为 SparkApplication。这个 CRD 形貌了一个 Spark 应用程序的设置,包括应用程序名称、主类、部署模式(Cluster 或 Client)、资源设置等。
Spark Operator Controller:
Spark Operator Controller 是一个 Kubernetes 控制器,它负责监视 SparkApplication CRD 的变革(如创建、更新、删除)。当检测到变革时,它会根据 CRD 的设置来创建和管理相应的 Kubernetes 资源。
工作流程

1、提交 Spark 应用:
用户通过 kubectl 或 CI/CD 管道等方式提交一个 SparkApplication CRD 对象到 Kubernetes 集群。
监视和相应:
Spark Operator Controller 监视 Kubernetes 集群中的 SparkApplication 对象。当检测到一个新的 SparkApplication 对象时,控制器会读取其设置,并创建相应的 Kubernetes 资源(如 Pod、Service 等)来运行 Spark 应用程序。
创建 Driver 和 Executor Pods:
根据 SparkApplication 的设置,Spark Operator 会创建 Spark Driver Pod 和相应数量的 Executor Pods。Driver Pod 负责协调 Spark 应用的执行,而 Executor Pods 则执行详细的盘算任务。
管理生命周期:
Spark Operator 负责管理整个 Spark 应用程序的生命周期,包括启动、监视、失败重启和删除等操作。它会根据 Spark 应用的状态更新 SparkApplication 对象的状态字段,用户可以通过查询 SparkApplication 对象来了解应用的当前状态。
长处

1、自动化管理:

Spark Operator 提供声明式设置,简化了 Spark 作业的提交和管理过程。自动处理作业的创建、监控、重启等任务。
2、Kubernetes 原生集成:

使用 CRD(自定义资源定义)和控制器,深度集成 Kubernetes 的功能,充分利用其调度、扩展和管理能力。
3、作业设置集中化:

SparkApplication CRD 提供了集中管理和版本控制的能力,可以通过 GitOps 等工具更好地管理作业设置。
4、易于扩展和管理:

通过 Helm Charts 部署和管理 Spark Operator 及其相关资源,简化了安装和维护过程。
缺点

增加了复杂性:

需要额外学习和维护 Spark Operator,自带的控制器和 CRD 增加了系统复杂性。
调试困难:

调试 Spark Operator 相关题目可能较为复杂,需要了解 Kubernetes 和 Spark 的运行机制和日志分析。
版本兼容性:

可能存在 Spark Operator 和 Spark 版本之间的兼容性题目,需要确保两者的版本匹配。
总结

Spark on k8s Operator 更得当大规模、需要自动化和集中管理的场景。它利用 Kubernetes 的原生功能,实现自动化管理和设置集中化,固然增加了一些复杂性,但在动态和多租户情况中表现出色。
Spark on k8s 得当简朴、直接的 Spark 作业提交和管理场景,特殊是对于那些已有 Spark 使用经验的用户。它操作简便,无需额外组件,机动性较高。但在大规模和自动化需求较高的场景中,管理和扩展的能力相对较弱。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: spark on k8s两种方式的原理与对比