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

这篇具有很好参考价值的文章主要介绍了Yarn上Streaming流自动调节资源设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Streaming流自动调节资源

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

1.数据源数据收集

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

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 主键 int N
unconsume_nums 未消费的数据量 int N
resource_level 资源等级 string N
create_time 创建时间 timestamp N
示例:
id job_name unconsume_nums resource_level create_time
1 name1 12 1 2020-10-19 15:31:14
2 name2 15 1 2020-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方法将当前正在执行的流停止。然后修改从容器外映射到容器内的资源文件,调高或者调低配置,然后等待流自动重启即可。文章来源地址https://www.toymoban.com/news/detail-608680.html

到了这里,关于Yarn上Streaming流自动调节资源设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spark介绍之spark streaming

    Spark Streaming类似于Apache Storm,用于流式数据的处理。根据其官方文档介绍,Spark Streaming有高吞吐量和容错能力强等特点。Spark Streaming支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象原语如:map、reduce、join、w

    2024年02月02日
    浏览(35)
  • Spark的生态系统概览:Spark SQL、Spark Streaming

    Apache Spark是一个强大的分布式计算框架,用于大规模数据处理。Spark的生态系统包括多个组件,其中两个重要的组件是Spark SQL和Spark Streaming。本文将深入探讨这两个组件,了解它们的功能、用途以及如何在Spark生态系统中使用它们。 Spark SQL是Spark生态系统中的一个核心组件,它

    2024年02月01日
    浏览(40)
  • Spark编程实验四:Spark Streaming编程

    目录 一、目的与要求 二、实验内容 三、实验步骤 1、利用Spark Streaming对三种类型的基本数据源的数据进行处理 2、利用Spark Streaming对Kafka高级数据源的数据进行处理 3、完成DStream的两种有状态转换操作 4、把DStream的数据输出保存到文本文件或MySQL数据库中 四、结果分析与实验

    2024年02月03日
    浏览(38)
  • Spark面试整理-解释Spark Streaming是什么

    Spark Streaming是Apache Spark的一个组件,它用于构建可扩展、高吞吐量、容错的实时数据流处理应用。Spark Streaming使得可以使用Spark的简单编程模型来处理实时数据。以下是Spark Streaming的一些主要特点: 1. 微批处理架构 微批处理: Spark Streaming的核心是微批处理模型。它将实

    2024年04月13日
    浏览(48)
  • [Spark、hadoop]Spark Streaming整合kafka实战

    目录 一.KafkaUtils.createDstream方式 二.KafkaUtils.createDirectStream方式  温习 Kafka是由Apache软件基金会开发的一个开源流处理平台,它使用Scala和Java语言编写,是一个基于Zookeeper系统的分布式发布订阅消息系统,该项目的设计初衷是为实时数据提供一个统一、高通量、低等待的消息

    2024年01月21日
    浏览(51)
  • Spark编程实验五:Spark Structured Streaming编程

    目录 一、目的与要求 二、实验内容 三、实验步骤 1、Syslog介绍 2、通过Socket传送Syslog到Spark 3、Syslog日志拆分为DateFrame 4、对Syslog进行查询 四、结果分析与实验体会 1、通过实验掌握Structured Streaming的基本编程方法; 2、掌握日志分析的常规操作,包括拆分日志方法和分析场景

    2024年02月20日
    浏览(39)
  • 带你从Spark官网啃透Spark Structured Streaming

    By 远方时光原创,可转载,open 合作微信公众号: 大数据左右手 本文是基于spark官网结构化流解读 Structured Streaming Programming Guide - Spark 3.5.1 Documentation (apache.org) 我浓缩了一些关键信息: 1.结构化流是 基于SparkSQL引擎构建 的可扩展且容错的流处理引擎。(也就是他摒弃了DStre

    2024年04月11日
    浏览(33)
  • Spark Streaming(头歌)

    第1关:套接字流实现黑名单过滤  代码: import org.apache.spark.SparkConf import org.apache.spark.streaming.StreamingContext import org.apache.spark.streaming.Seconds object TransformBlackList {   def main(args: Array[String]): Unit = {     /********** Begin **********/  //初始化     val sparkConf = new SparkConf

    2024年02月05日
    浏览(25)
  • Spark Streaming 模型实践:

    作者:禅与计算机程序设计艺术 Apache Spark™ 是开源的、快速的、通用大数据分析引擎,它支持多种编程语言,包括 Scala、Java、Python、R 和 SQL。Spark 提供了高级的 API 来处理数据流,同时还具有强大的机器学习能力。随着大数据的需求变得越来越复杂,需要对海量的数据进行

    2024年02月07日
    浏览(40)
  • 大数据——Spark Streaming

    Spark Streaming是一个可扩展、高吞吐、具有容错性的流式计算框架。 之前我们接触的spark-core和spark-sql都是离线批处理任务,每天定时处理数据,对于数据的实时性要求不高,一般都是T+1的。但在企业任务中存在很多的实时性的任务需求,列如双十一的京东阿里都会要求做一个

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包