当前位置: 首页 > news >正文

Yarn上Streaming流自动调节资源设计

Streaming流自动调节资源

自动资源调节简单来说就是根据数据的输入速率和数据的消费速率来判断是否应该调节资源。如果输入速率大于消费速率,并且在输入速率还在攀升,则将该Job停止并调高Job的资源等级然后重启。如果消费速率大于输入速率,并且消费速率在上升,则停止Job并调低资源等级然后重启。

1.数据源数据收集

目前Yarn上的Streaming Job有两种数据源,一种是Kafka另一种是Delta Table Stream,两种数据源在sources中的strartOffset跟endOffset不同。运行的通过Job内嵌的KafkaStreamingQueryListener来采集数据输入信息,并将数据输入到指定的Kafka的Topic中。由于采集到的输入数据不同,所以在采集层不进行数据的解析,统一在DAG中处理。

Job数据源输入
Job数据源输入
数据源信息输入
Delta Table
Yarn Structured Streaming
Kafka
Kafka

2.数据源数据处理

DAG运行之后,会先进行数据源数据的处理,从Variables中获取到上次消费的offset位置,从kafka中获取当前最后数据的offset,然后消费两个offset之前的数据,数据处理完之后将Variables的offset位置置为当前最后数据的offset。

​ 2.1. Delta Stream处理:从1中获取到的数据源数据Delta Table没有具体的offset信息,所以将reservoirVersion作为消费的offset标识,然后将相同数据源的数据的消费标识组合成source_info,根据数据源中JobName跟source_info的Delta Table地址,用DeltaTable的history方法获取Delta表中这个版本之后的版本numOutputRows之和作为未消费的数据量unconsume_nums

​ 2.2. Kafka数据处理:从1中获取到的数据源Kafka数据能够获取到具体的offset信息,将startOffset作为消费标识,然后将相同数据源的数据的消费标识组合成source_info,把startOffset和endOffset中相同分区的offset做差再求和得到未消费的数据量unconsume_nums

然后将处理完之后的数据持久化到Mysql中,表结构如下:

表名streaming_consume_status
显示名称实时流消费情况表
描述记录流消费情况信息
Schema
粒度每条记录表示每五分钟一个Job的消费情况
更新周期每5分钟
表字段:
列名描述数据类型空值
id主键intN
unconsume_nums未消费的数据量intN
resource_level资源等级stringN
create_time创建时间timestampN
示例:
idjob_nameunconsume_numsresource_levelcreate_time
1name11212020-10-19 15:31:14
2name21512020-10-19 15:31:14
CREATE TABLE `streaming_consume_status` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`job_name` varchar(64) COMMENT 'Job名称',`source_type` varchar(64) COMMENT '数据源类型',`unconsume_nums` int(11) COMMENT '未消费的数据数量',`resource_level` int(5) COMMENT '资源等级',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`)
);CREATE TABLE `streaming_query_offset` (`job_name` varchar(64) COMMENT 'Job名称',`query_name` varchar(64) COMMENT 'QUERY名称',`delta_path` varchar(500) COMMENT 'delta路径',`offset` int(11) COMMENT 'query当前消费的offset/version',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`job_name`, `query_name`, `delta_path`)
);insert into streaming_query_offset (job_name, query_name, offset) values('product2.ods.streamingLogSinkJob', 'jclog_delta', 1000)INSERT INTO monitor.streaming_query_offset (job_name, query_name, delta_path, offset) values ("stage2.cdm.dim.streamingDimSCDJob", "gggg", 'cccc', 888) ON DUPLICATE KEY UPDATE offset = 888;INSERT INTO streaming_query_offset (job_name, query_name, offset) VALUES ('product2.ods.streamingLogSinkJob', 'elog_delta', 1003) ON DUPLICATE KEY UPDATE offset = 1003; 

3.资源调整策略

调整策略是根据一段时间内,输入数据量跟消费数据量的差值计算出的斜率曲线来判断。比如说取近30分钟的输入输出数据,从数据库会获得6条数据,根据消费数据量consumer_nums和生产数据量producer_nums计算出消费差值,看这个周期内的差值变化。

调高等级:如果计算出来的5个斜率都大于设置的阈值,就认为消费速率比生产速率慢很多,需要调高资源等级并重启流任务。

调低等级:如果计算出来的5个斜率都小于设置的阈值,就认为消费速率比生产速率快很多,需要调低资源等级并重启流任务来节省资源。

特殊情况,如果斜率都为0,会查看当前资源等级,如果不是最低则逐次降低资源等级。

如果斜率在-1到1之前,则认为消费速率正常,不需要调整资源等级。

DAG在运行到这步时,会从Mysql中读job_name为XX,并且时间最晚的6条数据,通过这六条数据来计算出斜率曲线。

4.资源调整

DAG在上一步判断出是否要调整资源之后,会向企业微信发报警通知当前Job发生资源调整操作,然后根据对应的JobName通过yarn client api获取当前的ApplicationId,然后调用api的kill方法将当前正在执行的流停止。然后修改从容器外映射到容器内的资源文件,调高或者调低配置,然后等待流自动重启即可。

相关文章:

Yarn上Streaming流自动调节资源设计

Streaming流自动调节资源 自动资源调节简单来说就是根据数据的输入速率和数据的消费速率来判断是否应该调节资源。如果输入速率大于消费速率,并且在输入速率还在攀升,则将该Job停止并调高Job的资源等级然后重启。如果消费速率大于输入速率,并…...

微信小程序的个人博客--【小程序花园】

微信目录集链接在此: 详细解析黑马微信小程序视频–【思维导图知识范围】难度★✰✰✰✰ 不会导入/打开小程序的看这里:参考 让别人的小程序长成自己的样子-更换window上下颜色–【浅入深出系列001】 文章目录 本系列校训啥是个人博客项目里的理论知识…...

智慧园区楼宇合集 | 图扑数字孪生管控系统

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施,以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网,实现数据的传输、共享和响应,提高园区的管理效率和运营效益,为居…...

【代码随想录day21】二叉搜索树中的众数

题目 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST 满足如下定义&am…...

【防火墙】iptables防火墙(一)

防火墙具有隔离功能 主要部署在网络边缘或者主机边缘,防火墙的主要作用是决定哪些数据可以被外网访问,哪些数据可以进入内网访问 网络层(路由器):数据的转发 安全技术 1.入侵监测系统:在检测到威胁&…...

微信小程序之富文本特殊处理

文章目录 前言一、video的处理二、img的处理总结 前言 小程序中使用富文本编辑器,由于rich-text受限 部分富文本内容无法渲染或排版错乱。以img和video为例,处理起来让人头疼。网上各种长篇大论,实际上没有任何帮助。接下来我们就一起聊聊im…...

react-draft-wysiwyg富文本编辑器

在React项目中使用 yarn add react-draft-wysiwyg draft-js or npm i react-draft-wysiwyg draft-js推荐在项目中单独创建一个富文本编辑器组件 import { Editor } from "react-draft-wysiwyg"; import { EditorState, convertToRaw, ContentState } from draft-js…...

P5721 【深基4.例6】数字直角三角形

【深基4.例6】数字直角三角形 题目描述 给出 n n n,请输出一个直角边长度是 n n n 的数字直角三角形。所有数字都是 2 2 2 位组成的,如果没有 2 2 2 位则加上前导 0 0 0。 输入格式 输入一个正整数 n n n。 输出格式 输出如题目要求的数字直…...

【电子设计大赛】2023 年全国大学生电子设计竞赛 仪器和主要元器件清单

2023 年全国大学生电子设计竞赛仪器设备和主要元器件及器材清单 [本科组] 1. 仪器设备清单 直流稳压电源(具有恒流/恒压模式自动切换功能,0~30V/3A,双路) 数字示波器(100MHz, 双通道) 函数发…...

(八九)如何与InfluxDB交互InfluxDB HTTP API

以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦! 第 8 章 前言:如何与InfluxDB交互 1、InfluxDB启动后,会向外提供一套HTTP API。外部程…...

excel 生成sql技巧

"update 表名 set 字段名"&A2&" where 字段名"&B2&";"...

2023牛客暑期多校训练营2(D/E/F/H/I/K)

目录 D.The Game of Eating E.Square F.Link with Chess Game H.0 and 1 in BIT I.Link with Gomoku K.Box D.The Game of Eating 思路:倒着贪心。因为正着贪会导致一种局面:我选了当前喜爱值最大的菜,但是就算我不选这个菜&#xff0…...

Ubuntu搭建Samba服务-学习记录

文章目录 Ubuntu安装Samba流程Samba配置文件Samba添加账户配置文件修改Samba服务控制设置开机自动启动通过systemctl 启动服务通过 rc.local 启动 Windows访问参考链接 当前文章仅用于记录,在 Ubuntu中安装使用Samba,在Windows访问 系统环境:…...

Unity Shader - if 和 keyword 的指令比较

文章目录 环境TestingIf4Sampleunity shaderlab 中的 TestingIf4Sample.shadergraphics analyzer 中的 TestingIf4Sample.glsl TestingKW4Sampleunity shaderlab 中的 TestingKW4Sample.shadergraphics analyzer 中的 TestingKW4Sample.glsl 比较 环境 Unity : 2020.3.37f1 Pi…...

【C++入门到精通】C++入门 —— 类和对象(了解类和对象)

目录 一、类和对象的历史由来 二、面向过程和面向对象的初步认识 三、类 1.引子 2.类的定义 3.类的访问限定符及封装 ⭕访问限定符 🚩访问限定符解释说明 🚩struct 与 class 的区别 1. 默认访问级别: 2. 继承权限(默认的…...

DRS 迁移本地mysql 到华为云

准备工作: 源端的IP地址(公网),用户明和密码。如果通过公网迁移,需要在安全组放通drs访问源端数据库的3306端口。目标端的IP地址,用户名和密码。 创建DRS迁移任务 创建迁移任务 登录华为云控制台。单击管…...

腾讯云 Cloud Studio 实战训练营——快速构建React完成点餐H5页面

目录 ​编辑 一、前言 1、什么是腾讯云 Cloud Studio 2、本文实验介绍 二、前期准备工作 1、注册 Cloud Studio 2、初始化工作空间 三、开发一个简版的点餐系统页面 1、安装依赖 1.1、安装 antd-mobile 1.2、安装 less 和 less-loader 1.3、暴露 webpack 配置文件 …...

在 React 中,props(属性)用于在组件之间传递数据

在 React 中,props(属性)用于在组件之间传递数据。它是父组件向子组件传递信息的一种方式,通过 props,父组件可以向子组件传递数据、回调函数、配置项等。 注意: props 是只读的,它的值由父组件…...

Unity实现camera数据注入RMP推送或轻量级RTSP服务模块

技术背景 随着技术的不断进步和应用的不断深化,Unity3D VR应用的前景非常广阔,它广泛应用于教育、医疗、军事、工业设计、虚拟数字人等多个领域。 教育领域:Unity3D VR技术可以用来创建虚拟现实教室,让学生能够身临其境地体验课…...

CVPR2023新作:3D感知的AI换脸算法

Title: 3D-Aware Face Swapping (3D感知的人脸交换) Affiliation: 上海交通大学人工智能研究所 Authors: Yixuan Li, Chao Ma, Yichao Yan, Wenhan Zhu, Xiaokang Yang Keywords: Face swapping, 3D human faces, Generative Adversarial Network, geometry Summary: (1):…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

docker 部署发现spring.profiles.active 问题

报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

Vue ③-生命周期 || 脚手架

生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14

什么是 Pattern Matching(模式匹配) ❝ 模式匹配就是一种“描述式”的写法,不需要你手动判断、提取数据,而是直接描述你希望的数据结构是什么样子,系统自动判断并提取。❞ 你给的定义拆解: ✴ Instead of …...

若依项目部署--传统架构--未完待续

若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加,传统开发模式存在效率低,重复劳动多等问题。若依项目通过整合主流技术框架&…...

ubuntu清理垃圾

windows和ubuntu 双系统,ubuntu 150GB,开发用,基本不装太多软件。但是磁盘基本用完。 1、查看home目录 sudo du -h -d 1 $HOME | grep -v K 上面的命令查看$HOME一级目录大小,发现 .cache 有26GB,.local 有几个GB&am…...