K8S应用笔记 —— 部署Dolphinscheduler及简单应用(一)

news2024/11/17 16:44:55

一、Dolphinscheduler简介

Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。

Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中的关系。 解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。 DolphinSchedulerDAG(Directed Acyclic Graph,DAG)流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。

在这里插入图片描述

二、本章目标

  • 基于K8S环境完成Dolphinscheduler部署
  • 使用本地文件存储而非 HDFSS3
  • 基于K8S环境Dolphinscheduler简单应用(支持Python3MySQL数据源及工作流编排)

三、前提条件

  • 具备 Kubernetes 1.12+ 集群(必须),使用Kuboard v3作为集群管理工具(可选)

    具体操作可见:
    K8S安装笔记(一)—— master节点完整安装配置
    K8S安装笔记(二)—— 多公网服务器搭建集群

  • PV 供应(存储使用NFS,存储类为nfs-storage

    具体操作可见:
    搭建NFS Server及创建 NFS 存储类

四、安装helm

helm官方文档,https://helm.sh/docs/intro/install/

4.1 下载所需版本

下载路径:https://github.com/helm/helm/releases

在这里插入图片描述

我选择的选择的版本是:helm-v3.12.2-linux-amd64

4.2 上传至服务器并解压

tar -zxvf helm-v3.12.2-linux-amd64.tar.gz

4.3 移到到可执行目录

helm在解压后的目录中找到二进制文件,然后将其移至所需的目标位置

mv linux-amd64/helm /usr/local/bin/helm

4.4 从脚本安装

安装脚本:

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

五、安装 dolphinscheduler

5.1 下载解压

请下载源码包 apache-dolphinscheduler--src.tar.gz,下载地址。

发布一个名为 dolphinscheduler 的版本(release),官方给出的参照如下:

tar -zxvf apache-dolphinscheduler-<version>-src.tar.gz
cd apache-dolphinscheduler-<version>-src/deploy/kubernetes/dolphinscheduler
helm repo add bitnami https://charts.bitnami.com/bitnami
helm dependency update .
helm install dolphinscheduler . --set image.tag=<version>

我选择的是3.1.8版本,具体执行命令如下:

tar -zxvf apache-dolphinscheduler-3.1.8-src.tar.gz
cd apache-dolphinscheduler-3.1.8-src/deploy/kubernetes/dolphinscheduler

5.2 变更RAW资源请求地址

原请求地址为:https://raw.githubusercontent.com/,国内可能连接不上,变更RAW资源加速地址:https://raw.gitmirror.com

修改Chart.yaml文件中下面的配置项:

vi Chart.yaml
#原地址
#repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
#资源加速地址
repository: https://raw.gitmirror.com/bitnami/charts/archive-full-index/bitnami

在这里插入图片描述

5.3 支持本地文件存储而非 HDFS和S3

修改 values.yaml 文件中下面的配置项:

common:
  configmap:
    RESOURCE_STORAGE_TYPE: "NONE"
    RESOURCE_UPLOAD_PATH: "/dolphinscheduler"
    FS_DEFAULT_FS: "file:///"
  fsFileResourcePersistence:
    enabled: true
    accessModes:
    - "ReadWriteMany"
    storageClassName: "-"
    storage: "20Gi"

storageClassNamestorage 按需修改为实际值,注意:storageClassName 必须支持访问模式:ReadWriteMany

在这里插入图片描述

5.4 部署

helm dependency update .
helm install dolphinscheduler . -n dolphinscheduler

部署效果:

kubectl get pod,svc,pvc -o wide -n dolphinscheduler

在这里插入图片描述
在这里插入图片描述

5.5 访问前端页面

port-forward 端口转发:

kubectl port-forward --address 0.0.0.0 -n dolphinscheduler svc/dolphinscheduler-api 12345:12345

其他NodePortingress访问方式请自行探索。

访问前端页面:http://localhost:12345/dolphinscheduler/ui

默认的用户是admin,默认的密码是dolphinscheduler123

六、支持Python3和MySQL

6.1 dolphinscheduler-worker 镜像构建

下载 MySQL 驱动包 mysql-connector-java-8.0.16.jar

目录结构:
在这里插入图片描述

创建一个新的 Dockerfile,用于添加 MySQL 的驱动包和安装Python 3

FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.1.8
# 添加mysql驱动
COPY ./mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs
# 添加自定义requirements.txt
COPY ./requirements.txt /tmp
RUN apt-get update && \
    apt-get install -y --no-install-recommends python3-pip && \
	pip3 install --no-cache-dir -r /tmp/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ && \
    rm -rf /var/lib/apt/lists/*

requirements.txt

Flask_Cors==3.0.10
pandas==1.4.2
PyMySQL==1.0.2
SQLAlchemy==1.4.32
xlwt==1.3.0
xlsxwriter==3.0.3
gunicorn
greenlet
eventlet
gevent
pypinyin
openpyxl

构建一个包含新镜像:

docker build -t apache/dolphinscheduler-worker:python3-mysql .

在这里插入图片描述

将构建好的新镜像进行分发。

6.2 dolphinscheduler-api 镜像构建

创建一个新的 Dockerfile,用于添加 MySQL 的驱动包和安装Python 3

FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-api:3.1.8
# 添加mysql驱动

构建一个包含新镜像:

docker build -t apache/dolphinscheduler-api:support-mysql .

将构建好的新镜像进行分发。

6.3 修改PYTHON_HOME

  • 修改 values.yaml 文件中的 PYTHON_HOME/usr/bin/python3
  • 或在Kuboard - dolphinscheduler 名称空间 - 配置中心 - 配置字典 - dolphinscheduler-common - 编辑
    在这里插入图片描述

6.4 修改dolphinscheduler-worker 运行镜像版本

在这里插入图片描述

6.5 修改dolphinscheduler-api 运行镜像版本

在这里插入图片描述

七、简单使用验证

7.1 登录

在这里插入图片描述

7.2 创建租户

在这里插入图片描述

7.3 创建项目

在这里插入图片描述

7.4 创建数据源

在这里插入图片描述

7.5 创建项目

在这里插入图片描述

7.6 创建工作流

[{
	"processDefinition": {
		"id": 1,
		"code": 10577001612288,
		"name": "测试",
		"version": 1,
		"releaseState": "OFFLINE",
		"projectCode": 10576969989760,
		"description": "",
		"globalParams": "[]",
		"globalParamList": [],
		"globalParamMap": {},
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"flag": "YES",
		"userId": 1,
		"userName": null,
		"projectName": null,
		"locations": "[{\"taskCode\":10576976496512,\"x\":175,\"y\":216},{\"taskCode\":10576980784256,\"x\":498,\"y\":216},{\"taskCode\":10576997351040,\"x\":834,\"y\":216}]",
		"scheduleReleaseState": null,
		"timeout": 0,
		"tenantId": -1,
		"tenantCode": null,
		"modifyBy": null,
		"warningGroupId": 0,
		"executionType": "PARALLEL"
	},
	"processTaskRelationList": [{
		"id": 1,
		"name": "",
		"processDefinitionVersion": 1,
		"projectCode": 10576969989760,
		"processDefinitionCode": 10577001612288,
		"preTaskCode": 0,
		"preTaskVersion": 0,
		"postTaskCode": 10576976496512,
		"postTaskVersion": 1,
		"conditionType": "NONE",
		"conditionParams": {},
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
		"id": 2,
		"name": "",
		"processDefinitionVersion": 1,
		"projectCode": 10576969989760,
		"processDefinitionCode": 10577001612288,
		"preTaskCode": 10576976496512,
		"preTaskVersion": 1,
		"postTaskCode": 10576980784256,
		"postTaskVersion": 1,
		"conditionType": "NONE",
		"conditionParams": {},
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
		"id": 3,
		"name": "",
		"processDefinitionVersion": 1,
		"projectCode": 10576969989760,
		"processDefinitionCode": 10577001612288,
		"preTaskCode": 10576980784256,
		"preTaskVersion": 1,
		"postTaskCode": 10576997351040,
		"postTaskVersion": 1,
		"conditionType": "NONE",
		"conditionParams": {},
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}],
	"taskDefinitionList": [{
		"id": 1,
		"code": 10576976496512,
		"name": "sql",
		"version": 1,
		"description": "",
		"projectCode": 10576969989760,
		"userId": 1,
		"taskType": "SQL",
		"taskParams": {
			"localParams": [],
			"resourceList": [],
			"type": "MYSQL",
			"datasource": 1,
			"sql": "show tables",
			"sqlType": "0",
			"preStatements": [],
			"postStatements": [],
			"segmentSeparator": "",
			"displayRows": 10
		},
		"taskParamList": [],
		"taskParamMap": null,
		"flag": "YES",
		"taskPriority": "MEDIUM",
		"userName": null,
		"projectName": null,
		"workerGroup": "default",
		"environmentCode": -1,
		"failRetryTimes": 0,
		"failRetryInterval": 1,
		"timeoutFlag": "CLOSE",
		"timeoutNotifyStrategy": null,
		"timeout": 0,
		"delayTime": 0,
		"resourceIds": "",
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"modifyBy": null,
		"taskGroupId": 0,
		"taskGroupPriority": 0,
		"cpuQuota": -1,
		"memoryMax": -1,
		"taskExecuteType": "BATCH",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
		"id": 2,
		"code": 10576980784256,
		"name": "shell",
		"version": 1,
		"description": "",
		"projectCode": 10576969989760,
		"userId": 1,
		"taskType": "SHELL",
		"taskParams": {
			"localParams": [],
			"rawScript": "echo \"hello shell\"",
			"resourceList": []
		},
		"taskParamList": [],
		"taskParamMap": null,
		"flag": "YES",
		"taskPriority": "MEDIUM",
		"userName": null,
		"projectName": null,
		"workerGroup": "default",
		"environmentCode": -1,
		"failRetryTimes": 0,
		"failRetryInterval": 1,
		"timeoutFlag": "CLOSE",
		"timeoutNotifyStrategy": null,
		"timeout": 0,
		"delayTime": 0,
		"resourceIds": "",
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"modifyBy": null,
		"taskGroupId": 0,
		"taskGroupPriority": 0,
		"cpuQuota": -1,
		"memoryMax": -1,
		"taskExecuteType": "BATCH",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
		"id": 3,
		"code": 10576997351040,
		"name": "python",
		"version": 1,
		"description": "",
		"projectCode": 10576969989760,
		"userId": 1,
		"taskType": "PYTHON",
		"taskParams": {
			"localParams": [],
			"rawScript": "print(\"hello python\")",
			"resourceList": []
		},
		"taskParamList": [],
		"taskParamMap": null,
		"flag": "YES",
		"taskPriority": "MEDIUM",
		"userName": null,
		"projectName": null,
		"workerGroup": "default",
		"environmentCode": -1,
		"failRetryTimes": 0,
		"failRetryInterval": 1,
		"timeoutFlag": "CLOSE",
		"timeoutNotifyStrategy": null,
		"timeout": 0,
		"delayTime": 0,
		"resourceIds": "",
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"modifyBy": null,
		"taskGroupId": 0,
		"taskGroupPriority": 0,
		"cpuQuota": -1,
		"memoryMax": -1,
		"taskExecuteType": "BATCH",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}],
	"schedule": null
}]

在这里插入图片描述

7.7 上线运行

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

SpringBoot 基础篇

SpringBooot基本配置 Web容器基本配置 学习了SpringBoot框架之后&#xff0c;我们了解到SpringBoot内嵌了 Tomcat、Jetty、Undertow 三种容器&#xff0c;其默认嵌入的容器是 Tomcat&#xff0c;这个在我们启动 Spring Boot 项目的时候&#xff0c;在控制台上就能看到&#x…

使用 EasyExcel 实现 百万级数据导入导出

前言 在项目开发中往往需要使用到数据的导入和导出&#xff0c;导入就是从Excel中导入到DB中&#xff0c;而导出就是从DB中查询数据然后使用POI写到Excel上。 大数据的导入和导出&#xff0c;相信大家在日常的开发、面试中都会遇到。 很多问题只要这一次解决了&#xff0c;总…

调整数组使奇数全部都位于偶数前面

题目内容&#xff1a; 输入一个整数数组&#xff0c;实现一个函数&#xff0c; 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c; 所有偶数位于数组的后半部分。 题目思路&#xff1a; 将奇数部分放在前半部分&#xff0c;偶数部分放在后半部分&am…

PySpark-核心编程

2. PySpark——RDD编程入门 文章目录 2. PySpark——RDD编程入门2.1 程序执行入口SparkContext对象2.2 RDD的创建2.2.1 并行化创建2.2.2 获取RDD分区数2.2.3 读取文件创建 2.3 RDD算子2.4 常用Transformation算子2.4.1 map算子2.4.2 flatMap算子2.4.3 reduceByKey算子2.4.4 Wor…

手把手教你制作印刷包装小程序商城

印刷包装行业越来越受到人们的重视&#xff0c;为了更好地满足消费者的需求&#xff0c;搭建一个专属的小程序商城是一种不错的选择。那么&#xff0c;接下来就让我们一起来学习如何搭建印刷包装小程序商城吧&#xff01; 第一步&#xff1a;登录【乔拓云】网后台&#xff0c;进…

学习笔记230818---对于promise失败状态处理的重要性

问题描述&#xff1a; 在项目中经常会出现如上的问题&#xff0c;这是因为&#xff0c;用promise封装的接口或第三方组件方法&#xff0c;如果只对成功的状态做处理&#xff0c;就会造成页面出错&#xff0c;报error。 解决方法 then()的末尾加上.catch(()>{})对失败的状态…

3.小程序的通信模型

通信主体 小程序中通信的主体是渲染层和逻辑层&#xff0c;其中&#xff1a; xxx.scss和xxx.wxml是渲染层 xxx.ts是逻辑层 通信模型 小程序的通信模型发为两部分&#xff1a; 渲染层和逻辑层之间的通信由微信客户端进行转发 逻辑层和第三方服务器之前的通信由微信客户端进行…

Maven介绍_下载_安装_使用_原理

文章目录 1 Maven介绍1.1 Maven是介绍1.2 Maven的作用 2 Maven下载与安装2.1 官网下载2.2 文件目录2.3 环境配置 3 Maven基础概念3.1 仓库分类3.2 依赖坐标3.3 坐标组成 4 Maven配置4.1 本地仓库配置4.2 远程仓库的设置4.3 镜像仓库配置4.4 IDEA配置Maven 5 Maven项目创建5.1 M…

robotframework如何做接口测试?

robotframework(后续简称为robot)是一款自动化测试框架&#xff0c;可能做各种类型的自动化测试。 本文介绍通过robotframework来做接口测试。 在robot当中&#xff0c;python语言的接口测试库名称为RequestsLibrary 安装语法如下&#xff1a; pip install -U requests pip …

AP5414 DC-DC升压恒流 升降压电源驱动IC

产品简介 AP5414 是一种输入电压范围宽&#xff08;0.8~5.5V&#xff09;&#xff0c;可调恒定电流和限定电流两种模式来 驱动白光 LED 而设计的升压型 DC/DC 变换器。该器件能利用单节或双节干电池驱动单 颗大功率白光 LED&#xff0c;同样可以利用一节锂电池驱动两颗、三颗…

基于Opencv的虚拟拖拽项目

预备知识 勾股定理 跟随移动算法 手势识别图解 项目源代码 """ 演示一个简单的虚拟拖拽 步骤&#xff1a; 1、opencv 读取视频流 2、在视频图像上画一个方块 3、通过mediapipe库获取手指关节坐标 4、判断手指是否在方块上 5、是&#xff0c;方块跟着移动 6、…

天津报web前端培训班一定要选贵的吗?

根据这几年数据显示&#xff0c;IT行业飞速发展&#xff0c;岗位需求增多&#xff0c;Web前端是个很新的职业&#xff0c;在国内乃至国际上真正开始受到重视的时间不超过五年&#xff0c;Web前端开发是从网页制作演变而来&#xff0c;名称是有很明显的时代特性。 Web前端就业形…

腾讯大佬用了8小时讲完的Python,整整315集,拿走不谢!

Python在近几年越来越受追捧&#xff0c;很多童鞋或者职场小伙伴想要提升技能-学习Python。 这是非常好的事情&#xff0c;但问题在于很多人不知道学Python做什么&#xff0c;所以什么零碎细末、艰难晦涩、长篇大论的都去看&#xff0c;很容易陷入学不下去的困境。必须要有针对…

C++笔记之std::move和右值引用的关系、以及移动语义

C笔记之std::move和右值引用的关系、以及移动语义 code review! 文章目录 C笔记之std::move和右值引用的关系、以及移动语义1.一个使用std::move的最简单C例子2.std::move 和 T&& reference_name expression;对比3.右值引用和常规引用的经典对比——移动语义和拷贝语…

基础数学问题

目录 P1143 进制转换 P1100 高低位交换 P1866 编号 P3913 车的攻击 P3383 【模板】线性筛素数 P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题 P1572 计算分数 P4057 [Code#1] 晨跑 P2651 添加括号III P2660 zzc 种田 P1403 [AHOI2005] 约数研究 P1469 找筷子 …

未来网络的选择:100G光模块与400G光模块的对比

随着互联网的快速发展和数据传输需求的不断增长&#xff0c;光通信技术在网络领域中扮演着至关重要的角色。光模块是光通信系统中的核心组件之一&#xff0c;而100G光模块和400G光模块是目前应用广泛的两种主要类型。本文将对这两种光模块进行详细的区别对比。 一、传输速率 …

亿级短视频,如何架构?

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常指导大家面试架构&#xff0c;拿高端offer。 前几天&#xff0c;指导一个年薪100W小伙伴&#xff0c;拿到字节面试邀请。 遇到一个 非常、非常高频的一个面试题&#xff0c;但是很不好回答&#xff0…

Python3的print用法

目录 一&#xff1a;print语法 二&#xff1a;print结尾参数end用法 三&#xff1a;print分隔符参数sep用法 四&#xff1a;print固定宽度字符输出 一&#xff1a;print语法 print(*objects, sep , end\n, filesys.stdout, flushFalse) 参数解释&#xff1a; &q…

薅羊毛!Dify升级并可领400万token额度;YC 23夏季营创业团队清单;开源版妙鸭及原理揭秘;清华大模型课程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; YC 2023年夏季营入选160创业团队&#xff0c;其中6成是AI方向 YC 2023年夏令营有160创业团队入选&#xff0c;遵从了其一贯的价值主张…

Spring AOP简单介绍

什么是AOP 面向切面编程(Aspect-Oriented Programming)是一种编程范式&#xff0c;旨在通过将横切关注点与主要业务逻辑分离&#xff0c;提供一种更好的代码组织和模块化的方式。 AOP的思想是将这些横切关注点从主要业务逻辑中抽离出来&#xff0c;形成一个独立的模块&#x…