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 中保持“完成”状态,直到最终被垃圾收集或手动清理。

在这里插入图片描述

优点

简单直接:

使用 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 应用程序的状态。

在这里插入图片描述
核心组件
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 使用经验的用户。它操作简便,无需额外组件,灵活性较高。但在大规模和自动化需求较高的场景中,管理和扩展的能力相对较弱。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/39499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01 Docker 概述

目录 1.Docker简介 2.传统虚拟机 vs 容器 3.Docker运行速度快的原因 4.Docker基本组成三要素 5.Docker 平台架构 入门版 架构版 1.Docker简介 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是:Build, Ship and Run Any App, Anywhere&#xff0c…

我不小心把生产的数据改错了!同事帮我用MySQL的BinLog挽回了罚款

之前在生产做修改数据的时候不小心改错了一行数据,本来以为会被通报批评,但是同事利用binlog日志查看到了之前的旧数据,并且帮我回滚了,学到了,所以写了一篇binlog的文章分享给大家。 MySQL的Binary Log(简…

elasticsearch 8.14.1 和 Spring Data elasticsearch 实例演示

创建工程和配置 实现三类api. 根据名字检索根据分类检索根据价格区间创建spring boot工程,添加elasticsearch依赖 配置Elasticsearch @Configuration @EnableElasticsearchRepositories(basePackages = "github.io.truongbn.elasticsearch.repository") public c…

《知识点扫盲 · 过滤器 Filter》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻一周,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

mac 安装homebrew

vim brew_install.sh 输入: #!/bin/bash set -u# First check if the OS is Linux. if [[ "$(uname)" "Linux" ]]; thenHOMEBREW_ON_LINUX1 fi# Check if macOS is ARM if [[ "$(uname)" "Darwin" ]] && [[ &q…

Java--Map集合

Map 映射(map)是存储键和值间关联(即,键值对)的对象。给定一个键,可以找到其值。键和值都是对象。键必须唯一,但是值可以重复。 支持映射的接口 接 口 描 述 Map 将唯一键映射到值 NavigableMap 扩展SortedMap接口,以处理…

yarn的安装与配置(秒懂yarn用法)

Yarn 是一个快速、可靠和安全的 JavaScript 包管理工具。下面是关于在 Windows 上安装和配置 Yarn 的步骤,以及一些基本的用法介绍。 ### 一、安装 Yarn #### 1. 通过安装 Node.js 和 npm 安装 Yarn Yarn 依赖于 Node.js 和 npm,因此首先需要安装 Nod…

Spring Boot与Redis的缓存一致性问题

Spring Boot与Redis的缓存一致性问题 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨一下在Spring Boot中使用Redis时,如何处理缓存一…

使用PID算法实现DAC模拟量输出的快速调节

目录 概述 1 系统框架和算法 1.1 框架结构介绍 1.2 PID算法实现 1.2.1 理论介绍 1.2.2 离散化位置式PID 1.2.3 位置式PID算法 2 STM32Cube 配置项目 2.1 配置参数 2.2 GENERATE项目 3 功能实现 3.1 ADC采样数据功能 3.2 DAC数据转换 3.3 PID相关的调制函数 4 …

基于YOLOv10深度学习的CT扫描图像肾结石智能检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

第10天:字典和集合任务

学习内容: 字典的创建和操作集合的创建和操作 字典(Dictionary) 字典的创建 # 创建一个空字典 my_dict {}# 创建一个带有初始值的字典 my_dict {"name": "Alice", "age": 25, "city": "N…

【Python】已解决:ModuleNotFoundError: No module named ‘pyhanlp’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例五、注意事项 已解决:ModuleNotFoundError: No module named ‘pyhanlp’ 一、分析问题背景 在使用Python进行自然语言处理时,有时我们可能会用到pyhanlp这个库,它是一个基于J…

【JVM】Java虚拟机运行时数据分区介绍

JVM 分区(运行时数据区域) 文章目录 JVM 分区(运行时数据区域)前言1. 程序计数器2. Java 虚拟机栈3. 本地方法栈4. Java 堆5. 方法区6. 运行时常量池7. 直接内存 前言 之前在说多线程的时候,提到了JVM虚拟机的分区内存…

HarmonyOS APP应用开发项目- MCA助手(Day01持续更新中~)

简言: gitee地址:https://gitee.com/whltaoin_admin/money-controller-app.git端云一体化开发在线文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/agc-harmonyos-clouddev-view-0000001700053733-V5 注&#xff1…

MySQL 9.0 悄悄上线,支持面向AI的向量数据库

MySQL狂热粉丝群已经发现MySQL官网上MySQL9.0这两天悄然上线,已经可以下载体验了,目前被定义为创新版本(Innovation)。 下载地址:https://dev.mysql.com/downloads/mysql/ 支持主流的操作系统,安装后可以直…

DDD学习笔记六

基类与继承 领域模型中何时发掘和应用基类与继承: 1)基类概念必须是通用语言的一部分,并且对应领域中的一个抽象概念。 2)这个概念必须被进一步细化,才能具备实际业务含义。 3)基类概念被细化的子类存在着不…

QT 线程计时器

qt自带的计时器QTimer是与界面主线程绑定在一起的&#xff0c;如果操作界面有可能会影响计时器的执行&#xff0c;所以查找一些资料写了一个长期运行的线程计时器。 1.线程类的头文件 #ifndef WORKTH_H #define WORKTH_H#include <QDebug> #include <QThread> #i…

分布式服务——注册中心

介绍 想象一下&#xff0c;一个繁忙的周末&#xff0c;阳光明媚&#xff0c;公园里的孩子们在尽情玩耍&#xff0c;大人们则坐在长椅上享受着难得的闲暇时光。突然&#xff0c;一个小女孩跑到一位陌生的先生面前&#xff0c;甜甜地说&#xff1a;“叔叔&#xff0c;你能不能帮…

论坛入门与提升

前言 明确设计思路&#xff0c;精准定位问题&#xff0c;对于我们后期理解迭代工程有很大的帮助。 这就是我们常说的40%设计&#xff0c;20%编写和剩下的40%时间进行调试优化。 今天为大家带来的是通过对论坛的深入了解&#xff0c;来解决大家遇到问题时的迷茫&#xff0c;合…

基于字符和词特征融合的恶意域名检测

传统的恶意域名检测方法在检测由域名生成算法&#xff08;DGA&#xff09;随机生成的恶意域名方面性能不佳&#xff0c;尤其是对于那些由随机单词组成的域名。文章提出了一种新的检测算法&#xff0c;通过融合字符和词特征来提高对恶意域名的检测能力&#xff0c;特别是对于更具…