Apache Beam 模型

2023-10-30

背景

Apache Beam 是Google 开源的一个统一编程框架,它本身不是一个流式处理平台,而是提供了统一的编程模型,帮助用户创建自己的数据处理流水线,实现可以运行在任意执行引擎之上批处理和流式处理任务。它包含:

  • 一个可以涵盖批处理和流处理的统一编程模型
  • Beam SDK,支持 Java 和 Python
  • 一系列Runner(可以理解为“适配器”吧),让其编程模型运行在不同底层处理引擎(Google Cloud Dataflow,Spark,Flink等)

Beam (模型)能为用户带来什么价值?

这里使用一个例子简单地介绍 Beam的能力。在此之前先介绍了流数据处理的两个基本概念:

  • 事件时间(Event Time):事件产生的时间
  • 处理时间(Processing Time):事件(数据)到达处理系统的时间

上图中,横轴表示的是事件时间(从12:00开始),纵轴表示的是处理时间(从12:05开始),虚线表示的是一种理想的情况,即事件时间与处理时间相同,也就是说事件一产生就直接被系统接收到并处理(注:由于纵轴的时间是从12:05开始,所以此处虚线是从事件时间12:05的位置开始画出)。

图上面的灰色圆点表示的是一系列事件,他们只能出现在虚线的左上方(因为必须满足:时间事件小于处理时间,也就是事件总是先产生然后才被系统接收处理)。我们看到标号为“3”的点与虚线的水平距离很近,也就是说此事件一产生就被系统接收到进行处理,延时较小;反之,编号为“9”的圆点,它所代表的事件在12:01~12:02直接产生,但是到了 12:08之后才被处理,延时较大。

明白了以上两个概念,接下来通过四个动画来回答四个问题,我们可以较好地了解 Beam 编程模型的能力:

做什么计算?(What result are calculated?)

拿 sum (累加事件的某个指标,如上图灰色圆点的整数值)为例,如下图所示,在某个时刻(如12:10)计算出之前所接收到的整数的和,这是一个典型的批处理的场景。

注:以下所有动画中的累加数字,白色表示计算的中间结果,黄色表示返回的计算结果,才是用户可见的。

相应的 Beam 代码如下图所示

当然,做到这一步还看不出 Beam 的特殊能力,从下面一个问题开始,才开始显现 Beam 模型的价值

数据在什么范围中计算?(Where in event time are results calculated?)

就是在代表事件时间的横轴坐标上,对落在哪个区间的灰色圆点施加计算呢?

假如我们现在想在事件时间横轴上统计每个2分钟时间窗口的整数累加值,即完成如下图动画所示的效果:

对有些计算框架来说,这就开始有些棘手了。但是有了 Beam,下面寥寥几行代码就可以实现(新增的代码为蓝色部分):

Beam 自动为每个时间窗口创建一个小的批处理作业,在处理时间纵轴 12:10 的时候触发计算。但是这样,我们只能等到最后的一个时间点(12:10)才能得到计算结果。如果我们想在更早的时间点得到时间窗口的统计结果(这个问题就开始变得复杂了),我们开始需要考虑如何回答下一个问题。

何时将计算结果输出?(When in processing time are result materialized?)

就是在代表处理时间的纵轴坐标上,在什么时间点返回计算结果?

为了回答这个问题,我们首先要回答,对于事件时间横轴上的每个时间窗口,在处理时间纵轴上的哪个位置,待统计的数据/事件(也就是图中的圆点)都被接收到了?这就涉及到一个叫做水位线(watermark)的概念,它的作用就是来回答我们这个问题的。在下图动画中的曲线就是一条 水位线,它可以根据某些指标(比如历史数据等)推测出来(但不一定完全准确)。这样,我们就可以不必等到最后的时间点才能得到各个时间窗口的统计结果,具体效果如下图动画所示:

新增的 Beam 代码如下图绿色部分所示:

比如对于第一个时间窗口而言,水位线的预测存在偏差,因为标号为“9”的数据落在这条曲线之上,也就是在 watermark 预测的处理时间点(12:06左右)时还未被系统接收到。这就涉及到下一个问题。

迟到数据如何处理?(How do refinement of result related?)

就是在接收到延迟到达的数据后,如何对之前的计算结果进行修正?

通过对上面的代码稍加修改(如下图所示,绿色和红色部分)

我们可以得到如下动画展示的效果:

从中我们可以看到:

动画中标识为“early”的结果为探测性结果 ,因为根据 watermark预测,后续还有可能继续接收到这个时间窗口的数据

动画中标识为“on-time”的结果为(及时/普通)结果, 因为根据 watermark 预测,后续不再会接收到此时间窗口的数据

动画中标识为“late”的结果为延迟结果,这种情况表示有数据延迟到达,也就是 watermark 的预测出现偏差,需要对结果进行校正,这里采用的校正方式就是累加更新结果

可以看到,利用 Beam 的模型,我们不需要编写复杂的逻辑,就可以灵活地/优雅地处理流处理计算过程中出现的一些棘手场景。

转载于:https://www.cnblogs.com/niejingsong/p/11101339.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Beam 模型 的相关文章

随机推荐

  • 机器视觉——OpenCV案例分析基础(七)(边缘检测和图像轮廓查找)

    边缘检测和图像轮廓查找 一 理论分析 二 代码分析 2 1 边缘检测 2 1 1 Sobel算子 2 1 2 Scharr算子 2 1 3 Laplacian算子 2 1 4 Canny算子 去噪 梯度 非极大值抑制 滞后阈值 2 2 特征
  • 【MATLAB项目实战】基于MATLAB的发票识别(含GUI界面)

    Matlab 发票识别 思路 灰度化 二值化 形态学操作 膨胀 形态学滤波开运算 找到各个模块分割 对各个模块进行字符分割 模版匹配最终得到结果 发票 function varargout GUI varargin GUI MATLAB c
  • vue开发项目(PC端和移动端共用一套代码)(一)

    编写两套代码 通过路由加载不同端的文件 1 创建vue项目 2 基本配置 2 1 html设置 创建两端的vue文件 在App vue中 添加 2 2 路由设置 在router文件夹下 创建m pc两个文件夹 路径如下 router m i
  • 从 Windows 过度到 Mac 必备快捷键对照表

    Mac 键盘符号 图标 介绍 Command Shift Caps Lock Option Alt Control Enter Delete Fn Delete 上箭头 下箭头 左箭头 右箭头 Fn Page Up Fn Page Down
  • vue 从入门到入土---复习 webpack

    目录 前端工程化 wbepack的基本使用 webpack中的插件 webpack中的loader 打包发布 Socure Map 总结 前端工程化 1 了解前端工程化概念 前端工程化指的是 在企业级的前端项目开发中 把前端所需要的开发工具
  • 服务器运行mysql的时候出现:Error response from daemon: Container xxx is not running

    服务器运行mysql的时候出现 Error response from daemon Container xxx is not running 我是安装完mysql以后 通过这条命令进入mysql容器的时候出现报错 docker exec
  • Maven之自定义archetype生成项目骨架

    http blog csdn net sxdtzhaoxinguo article details 46895013 摘要 使用过Maven的人都知道maven中有许多功能都是通过插件来提供的 今天我们来说一下其中的一个插件 maven a
  • 安卓app开发零基础入门培训!腾讯Android开发面试记录,技术详细介绍

    开头 都说程序员是在吃青春饭 这一点的确有一点对的成分 以前我不这么认为 但随着年龄的增长 事实告诉我的确是这样的 过了30以后 就会发现身体各方面指标下降 体力和身心上都多少有点跟不上了 这个年龄往往是很尴尬的 与年轻的程序员相比 产出没
  • HBuilderX使用Vant组件库

    HBuilderX使用Vant组件库 原创地址 HBuilderX使用Vant组件库 HBuilderX是一款由国人开发的开发工具 其官网称其为轻如编辑器 强如IDE的合体版本 但是官方的社区中关于Vant组件的安装大多都是针对微信小程序开
  • win电脑go的安装

    官网打开 https go dev dl 默认安装到了c盘 然后配置一下环境变量就可以了 go run 1 go
  • nrm安装后报错

    原文链接 https juejin cn post 7212960463730819127 Error ERR REQUIRE ESM require of ES Module D npm node modules nrm node mod
  • DFS 相关例题

    会顶科技 两道 第一行为一个整数N 用来表示球的个数 第二行为一个整数M 用来表示桶的个数 从第三行到第N 2行 每行有M个整数 这些整数要么为0 要么为1 输出描述 输出为一个整数 输出1代表可以放入所有的球 输出0代表无法放入所有的球
  • android开发:Android Studio的Signature Versions选择

    参考 https blog csdn net jiangjingxuan article details 66970552
  • Anaconda安装jieba库和wordcloud库安装实现词云

    一 jieba库安装 1 从官网下载jieba压缩包 https pypi org project jieba files 2 将压缩包解压到anaconda的pkgs目录 3 打开anaconda prompt 切换目录至比如 C ana
  • Linux环境下编程遇到“fatal error:stdio.h:没有那个文件或目录”错误解决办法

    我是荔园微风 作为一名在IT界整整25年的老兵 今天总结一下linux环境下如何解决一个常见的问题 也就是 fatal error stdio h 没有那个文件或目录 错误 不少初学者在linux环境下用gcc编译C语言时 经常会遇到这个问
  • Linux wc命令

    Linux wc命令 作用 统计字节数 字符数 行数 最长的行的长度 单词数 格式 wc OPTION FILE wc OPTION files0 from F OPTION c 或 bytes 计算字节数 m 或 chars 计算字符数
  • SPA项目开发之首页导航+左侧栏菜单

    文章目录 后台主界面搭建 左侧树收缩功能 vue总线的概念 后台主界面搭建 在搭建主界面之前 来给大家介绍一个MOCK js 是一个模拟数据的生成器 用来帮助前端调试开发 进行前后端的原型分离以及用来提高自动化测试效率 众所周知Mock j
  • hex码和ascii码的转换

    hex码和ascii码的转换 2017年01月09日 17 48 25 changeyourmind 阅读数 4784 版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net changyourmind
  • PRT(Precomputed Radiance Transfer【2002】)原理实现

    声明 本文源自对Games202课程 作业2的总结 参考 手把手教你写GAMES202作业 GAMES202 作业2 Precomputed Radiance Transfer 球谐函数 GAMES 202 作业2 Games202课程 个
  • Apache Beam 模型

    背景 Apache Beam 是Google 开源的一个统一编程框架 它本身不是一个流式处理平台 而是提供了统一的编程模型 帮助用户创建自己的数据处理流水线 实现可以运行在任意执行引擎之上批处理和流式处理任务 它包含 一个可以涵盖批处理和流