Flink累加器、计数器的使用

Flink窗口-计数窗口(CountWindow) countWindow的具体使用 阅读详情

Flink累加器的结果只能在作业结束以后才能得到。这就意味着,如果是一个一直不间断执行的流处理程序是无法得到累加器结果的。只有批处理成功,也就是会结束的flink程序才能得到累加器结果。

(我试过强行停止正在执行的flink程序无法得到结果,不知道由于某些异常导致flink程序停止是否可以得到累加器的结果)。

最直接的累加器(Accumulator)就是计数器(Counter)。可以通过Accumulator.add(V value)方法增加累加器的值。在Flink程序的最后,Flink job会收集每个节点各自的和进行累加然后发回给客户端。

这对于程序的调试或者得到数据的某些信息(比如数据的行数)会有用。

程序

下面是一个简单的计算文件行数的flink程序。其中包含几个关键步骤:

  1. 创建累加器
  2. 注册累加器
  3. 使用累加器
  4. 得到累加器结果
package it.kenn.acc;

import org.apache.flink.api.common.JobExecutionResult;
import org.apache.flink.api.common.accumulators.IntCounter;
import org.apache.flink.api.common.functions.RichMapFunction;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

/**
 * 累加器测试
 */
public class AccumulatorTest {

    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        AccumulatorTest accumulatorTest = new AccumulatorTest();
        accumulatorTest.process(env);

    }

    public void process(StreamExecutionEnvironment env) throws Exception {

        SingleOutputStreamOperator<String> registerAccStream = env
                .readTextFile("$HOME/LearningFlink/flink-java/src/main/resources/hbase-site.xml")
                .map(new RichMapFunction<String, String>() {
                    //1.创建累加器
                    private IntCounter numLines = new IntCounter();

                    @Override
                    public void open(Configuration parameters) throws Exception {
                        //2.注册累加器
                        getRuntimeContext().addAccumulator("num-lines", numLines);
                    }

                    @Override
                    public String map(String s) throws Exception {
                        //3.使用累加器
                        this.numLines.add(1);
                        return s;
                    }
                });
        registerAccStream.print();
        //4. 得到累加器结果,注意结果是从execute方法的返回值中得到的
        JobExecutionResult result = env.execute();
        Object accRes = result.getAccumulatorResult("num-lines");
        System.out.println("文件共:"+accRes + "行。");
    }
}

输出结果

可以数一下下面文件确实17行,计数器输出的结果也是17行,没有错。

12> <?xml version="1.0"?>
12> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
10>         <value>/hbase</value>
10>     </property>
4>         <value>localhost:2181</value>
8>     </property>
8>     <property>
2> <configuration>
2>     <property>
2>         <name>hbase.zookeeper.quorum</name>
11> </configuration>
7>         <value>2181</value>
5>     </property>
5> 
5>     <property>
5>         <name>hbase.zookeeper.property.clientPort</name>
9>         <name>zookeeper.znode.parent</name>
文件共:17行。

 

Flink中实用的小知识点整理 目录 1、Flink使用WaterMark处理乱序事件 2、累加器和计数器 3、Window使用 4、流的切分和合并 5、任务链 6、Flink消费kafka数据起始offset配置 7、Flink消费kafka数据,消费者offset提交配置 8、数据源 9、数据存放 10、运行时环境的区别 11、keyedStream中进行聚合操作 一.Flink使用... 阅读详情

相关推荐

Flink 累加器 实例

每个并行的任务实例下有各自的累加器,获取最终值时会把各个并行任务的累加器的值求和。(一个并行度对应一个累加器) map并行度1:

Top5软件工程硕士,先后在京东、字节从事多年Java后端开发、实时和离线大数据开发 2535

Flink累加器

Flink累加器

dwjlyl 2279

Flink的大数据输出——计数输出(CountingOutput)

通过计数输出,我们可以更好地了解数据处理过程中的统计情况,并对数据特征和行为进行监控和分析。在实际应用中,我们可以根据具体需求,将计数输出与其他功能结合起来,实现更复杂的数据处理和分析任务。计数输出是指在Flink处理过程中对特定事件或数据进行计数,并将计数结果输出到外部系统或存储介质中。希望本文能够帮助读者理解计数输出在Flink中的应用,并能够运用到自己的实际项目中。要在Flink中实现计数输出,我们需要定义一个计数器,并在处理过程中对计数器进行更新。方法中,我们输出了最终的计数结果。

BugCrusher的博客 395

flink-13 Flink之Counter(计数器/累加器)

Flink之Counter概念用法示例 概念 Accumulator即累加器,与Mapreduce counter的应用场景差不多,都能很好地观察task在运行期间的数据变化,可以在Flink job任务中的算子函数中操作累加器,但是只能在任务执行结束之后才能获得累加器的最终结果。 Counter是一个具体的累加器(Accumulator)实现IntCounter, LongCounter 和 DoubleCounter 用法 1.创建累加器 private IntCounter numLines =

a3125504x的博客 2503

Flink大数据实时计算系列-Flink的累加器和计数器

Flink大数据实时计算系列-Flink的累加器和计数器 目录 Flink的累加器和计数器有界数据流无界数据流Flink参考链接Flink系列博客 Flink的累加器和计数器 有界数据流 案例代码 package com.flinkniu.flink.windows; import org.apache.flink.api.common.JobExecutionResult; import org.apache.flink.api.common.accumulators.IntCounter; impo

大模型与Agent智能体 1452

第二十六篇:Flink 中的聚合函数和累加器的设计和使用

你好,欢迎来到第 26 课时,本课时主要讲解 Flink 中聚合函数和累加器的设计和使用。 我们在第 08 课时中提到了 Flink 所支持的窗口和时间类型,并且在第 25 课时中详细讲解了如何设置时间戳提取器和水印发射器。 实际的业务中,我们在使用窗口的过程中一定是基于窗口进行的聚合计算。例如,计算窗口内的 UV、PV 等,那么 Flink 支持哪些基于窗口的聚合函数?累加器又该如何实现呢? Flink 支持的窗口函数 我们在定义完窗口以后,需要指定窗口上进行的计算。目前 Flink 支持的窗口函数包含

微信搜:import_bigdata,大数据领域硬核原创作者 836

Flink Accumulators累加器、Counters计数器的使用和实现自定义Accumulators、Counters

目录1. 自定义Accumulators 1. 自定义Accumulators 自定义的方式有两种,两种之间除了要求的数据类型不一样,其它都一样 Accumulator<V, R>: 其中V指add的数据的类型、R指结果的类型 SimpleAccumulator<T>: 其中T指add和结果的数据的类型 ...

Bulut0907 2060

Flink累加器的应用:大数据处理

Flink累加器的应用:大数据处理Flink是一种流式处理框架,广泛应用于大数据处理和实时分析。在Flink中,累加器是一种重要的工具,用于在分布式环境中进行计数和聚合操作。本文将详细介绍Flink累加器的使用,并提供相应的源代码示例。一、什么是累加器? 在Flink中,累加器是一种特殊的变量,用于收集和聚合分布式任务的统计信息。累加器可以在不同任务之间共享和更新,从而实现全局的计数和聚合。它们通常用于收集诊断信息、计数特定事件的发生次数或跟踪任务的进度。二、累加器的类型 Flink提供了多种类型的累加器,

学习使你进步。 249

Flink数据类型、序列化与累加器Accumulator

本篇文章简单介绍一下Flink中的数据类型与累加器以及计数器的使用。 一、数据类型 在Flink的DataSet以及DataStream中对可使用的元素添加了一些约束条件,目的是为了能够有效的分析这些类型的执行策略以及选择不同的序列化方式。 以下列举7种Flink种常用的数据类型: Java/Scala Tuple Java POJO和Scala case class 基本类型(Intege...

不清不慎的博客 1533

1006. 换个格式输出整数 (15)-PAT乙级真题

1006. 换个格式输出整数 (15)让我们用字母B来表示“百”、字母S表示“十”,用“12…n”来表示个位数字n(&lt;10),换个格式来输出任一个不超过3位的正整数。例如234应该被输出为BBSSS1234,因为它有2个“百”、3个“十”、以及个位的4。输入格式:每个测试输入包含1个测试用例,给出正整数n(&lt;1000)。输出格式:每个测试用例的输出占一行,用规定的格式输出n。输入样例1...

柳婼 の blog 2242

YOLOv11 改进策略:引入 NWD 损失函数提高小目标检测精度

YOLO(You Only Look Once)是一种实时目标检测算法,能够有效地预测图像中多个物体的边界框和类别概率。其高效性使它成为自动驾驶、视频监控等领域的理想选择。NWD 是一种基于 Wasserstein 距离的损失函数,其通过归一化处理,更好地评估预测框和真实框之间的几何偏差。这种方法不仅仅关注重叠区域,而且考虑中心点和尺度信息,提高了对小目标的敏感度。

走向CTO的路上... 2001

Flink 累加器Accumulator

Flink 累加器Accumulator 1.概述 累加器是具有加法运算和最终累加结果的一种简单结构,可在作业结束后使用。 最简单的累加器就是计数器: 你可以使用 Accumulator.add(V value) 方法将其递增。在作业结束时,Flink 会汇总(合并)所有部分的结果并将其发送给客户端。 Flink 目前有如下内置累加器。都实现了累加器接口。 IntCounter, LongCounter 和 DoubleCounter : 有关使用计数器的示例,请参见下文。 直方图 : 离散数量的柱状直方

u012667450的博客 1541

开漏输出(漏极开路输出与集电极开路输出)和推挽输出怎么判断

判断一个引脚是还是。

weixin_56838517的博客 1055

Flink-用户自定义 Functions

(此处是计数器。

tiger_ziren的博客 1015

BERT + BiLSTM-CRF 处理流程

BERT是一个基于 Transformer 的预训练语言模型。与传统的语言模型不同,BERT 是双向的,即它同时利用上下文信息进行词表示学习。BERT 在大规模语料库上进行预训练,可以捕捉到深层次的语言知识和上下文关系,生成非常丰富的词向量表示。在序列标注任务中,BERT 被用作输入文本的编码器,将每个词映射为上下文相关的词嵌入(embeddings)。

AI Agent 首席体验官 2255

WPF vs Avalonia: 跨入C#桌面应用现代化的大门

请注意,这只是一个目录,详细内容将根据这个结构逐步展开。如果您需要某个特定部分的详细内容,请告知我,我将为您提供深入的解析和示例代码。WPF,全称Windows Presentation Foundation,是微软为Windows平台量身打造的UI框架。自2006年发布以来,它就像一位经验丰富的老船长,引领着桌面应用的航船在技术的海洋中乘风破浪。Avalonia,一个新兴的跨平台UI框架,它像一位年轻的探险家,勇敢地探索着桌面应用的新世界。

java专栏 2398

9、Flink 用户自定义 Functions 及 累加器详解

Flink 用户自定义 Functions 及 累加器详解

猫猫爱吃小鱼粮 1192

【Go语言实战】(2) Gin+Vue 电子商城

618来!!不用纠结去哪里剁手了!直接自己安排一个商场不香吗??

面向生活编程 4827

(九)Flink Datastream API 编程指南 UDF(用户自定义函数)

大多数操作需要一个用户定义的函数。本节列出了指定它们的不同方法。我们还介绍了Accumulators,它可以用来深入了解你的Flink应用程序。 函数实现方式 实现一个接口 最基本的实现就是如下,实现MapFunction接口下map方法。 class MyMapFunction implements MapFunction<String, Integer> { public Integer map(String value) { return Integer.parseInt(value)

京河小蚁的博客 538

基于Simulink的固态变压器(SST)多级协同控制

本文基于Simulink平台,详细介绍了固态变压器(SST)多级协同控制的建模与仿真方法。针对SST三级架构(AC-DC、DC-DC、DC-AC)存在的级间耦合问题,提出了纵向解耦与横向联动的协同控制策略。通过搭建10kV/400V级联型SST系统模型,实现了输入电压波动±20%或负载0-100%跳变时直流母线电压波动小于2%的控制目标。文章详细讲解了Simulink建模步骤、控制算法推导及工程部署建议,包括功率前馈控制、虚拟惯性算法等关键技术。仿真结果表明,该协同控制方案能有效抑制负载突变时的电压波动,为

MHD0815的博客 214

flink DataStream API(五)用户自定义函数

文章目录用户自定义函数实现一个接口匿名类Java 8 LambdasRich functions累加器和计数器如何使用累加器:自定义累加器 用户自定义函数 大多数操作都需要用户自定义函数。我们还介绍了Accumulators,可用于深入了解您的 Flink 应用程序。 实现一个接口 最基本的方法之一是实现提供的接口: class MyMapFunction implements MapFunction<String, Integer> { public Integer map(String

李玉志的博客 433

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Flink学习笔记-支持的数据类型

说明:本文为《Flink大数据项目实战》学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz 2.4字段表达式实例-Java 以下定义两个Java类: public static class WC { public ComplexNestedClass complex; ...

weixin_30612769的博客 477

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Flink基础之API,DataSet、DataStream、批、流

目录 DataSet 和DataStream Anatomy of a Flink Program(剖析Flink程序) Lazy Evaluation(延迟计算) Specifying Keys(指定的键) Specifying Transformation Functions(指定转换功能) Supported Data Types(支持的数据类型) Java Tuples an...

主要写大数据集群一线运维和学习工作经验 2168

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Flink 官方文档学习 —《基本API概念》

  目录 基本API概念 1. Dataset和DataStream 2. Flink程序构成(Anatomy of a Flink Program) 3. 延迟计算(Lazy Evaluation) 4. 指定键(Specifying Keys) 4.1 为Tuple定义键(Define keys for Tuples) 4.2 使用字段表达式定义键(Define keys us...

Mathieu66的博客 7912

Flink 基本的API概念

https://www.jianshu.com/p/51c03c865e52?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation 原文链接:https://ci.apache.org/projects/flink/flink-docs-release-...

tianjinsong的专栏 1万+
上一篇: datalore初体验,暨datalore加载本地文件
下一篇: 【已解决 Flink Java API问题】The return type of function ‘xxx‘ could not be determined automatically
iFence
博客等级 码龄9年 8051粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值