热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

「吉光片羽:文献阅读记录」AdaptiveWatermarks:AConceptDriftbasedApproachforPredictingEventTimeProgress

前言:还有一年半毕业,准备回学校搞论文,虽然不知道能不能搞出来,但还是得试试,年前看的论文内容都快忘了,开一个坑,边看边记录,给自己和后人一点痕迹。主要是翻译论文内容,不会带有自己

前言:

还有一年半毕业,准备回学校搞论文,虽然不知道能不能搞出来,但还是得试试,年前看的论文内容都快忘了,开一个坑,边看边记录,给自己和后人一点痕迹。主要是翻译论文内容,不会带有自己的想法,会略去口水话,做到尽量简洁。

阅读者最好有一定的流数据处理基础(应该没人看吧)



本篇是德国几个大学联合写的一个短篇,发布于Advances in Database Technology - EDBT2019-March,被引用7次,是low-watermark方面为数不多的文章,且看且珍惜。


ABSTRACT

本文提出了一种自适应水印生成策略并在Apache Flink中实现。
我们的策略可以自适应地决定何时生成watermark以及使用什么时间戳,而无需预先调整。我们使用一个自适应窗口(adaptive window-ADWIN)来检测流数据中的eventtime变化并提高到达率和降低延迟。
两个真实数据集的实验结果表明,我们的策略通过提前触发窗口实现了较低的平均延迟,并且在预期无序数据时通过延迟水印实现了较低的丢弃率。


INTORDUCTION

术语一览


缩写含义
SPE流处理引擎

e

element-待处理的一个数据
te(e)e的事件时间
tp(e)

 e进入流处理引擎的时间

m最大乱序时间(flink中的maxOutOfOrderness)
s周期性生成水印策略中的生成周期,既每s毫秒生成一次水印

由于通常数据源是分布式的,而且可能远离SPE,因此元素e在到达SPE前可能会出现延迟和无序。既,两个元素e1和e2,其中te(e1)tp(e2),这就是所谓的无序到达。

数据流通常被一系列window所切割成明确大小的块来进行计算,如求一段时间内的平均值。

Time window是一种常见的window类型,它根据时间进展来划分数据流,既可以根据SPE内部时钟来划分,也可以根据外部数据自带的时间戳来进行处理。在后一种方法中,我们需要引入一些外部的概念。

low watermark(水印)是一种考虑事件时间的技术,表示后续不会出现携带比当前水印更早的时间戳的数据。流中的window操作符接收到水印时会触发完成时间窗口的执行。

水印的一些特点:1、水印是单调的。2、当生成的水印太少,计算结果的时效性无法保证。3、当生成的水印太多,会丢失更多的数据。

当前水印生成方法有两种,一种是启发式的和周期性的,另一种是punctuation-based(实在不知道咋翻译),前者对数据到达率的变化或数据延迟的变化不灵活。

在本文中,我们在周期性水印的基础上提出了一种可以灵活变化且无需提前知道数据内容的水印生成方法,我们称之为adaptive window(ADWIN),来决定合适生成新水印以及用哪个值生成新水印。此外还提供了一种控制方法——延迟到达阈值。

我们在Flink上实现了我们的方法并进行了比较,并通过实验证明了我们的方法在减少延迟和减少数据丢失方面的优越性。


ADAPTING TO DATA ARRIVAL RATES

首先,我们要研究两个东西,m——最大乱序时间,s——生成水印的周期。当流中的新数据源源不断地到来时,我们要不断更新这两个值。当自上一次生成水印以来,迟到数据个数/总数据个数的值超过某个阈值 时,产生新的水印。

这样一来,水印产生的间隔会根据数据到达延迟的变化而变化(adaptive),同样的,m也可以在每次变化时更新。为了检测到达间隔时间的变化,我们使用ADWIN算法。

ADWIN的工作原理是随着时间的推移维护一个window内的数据集合,窗口大小随着输入数据变化频率的变化而变化。数据流发生的变化约大,窗口大小越小。该算法的参数表如下。


参数描述
δ对变化的敏感度,[0, 1],默认为1
l (L的小写)延迟到达阈值,(0, 1],默认为1
m事件时间和摄入时间的倾斜度
∆δ敏感度变化率,(0, 1],默认为1
w初始化m所需要的数据元组数量

δ越高,系统对变化越敏感,初始设为1,这样系统能更早地探测到变化。

ADWIN工作原理如下:

————————————————————————————————————————————————————————————————————
算法 1 : Adaptive watermark generation
____________________________________________________________________
输入:数据流S
输入:敏感度变化率∆δ
输入:迟到阈值l
输入:初始化用到的数据数量warmup
warmup=0;m=0;watermark=0;
lateElements=0;totalelements=0;δ=1;
maxTimeStamps=-∞
adWin = initializeAdwin(δ)
foreach e∈S do
maxTimestamp = max(te(e),maxTimestamp) //更新检测到的最大事件时间
if warmup ≤ w then //这里处理初始化用的数据
m=max(m,tp(e)-te(e)) //找出预热数据中的最大 摄入时间和事件时间 之差,记为m
warmup=warmup+1
else //这里处理正式数据
totalElements = totalElements + 1 //计数器加一
if adWin.driftDetected((tp(e)-te(e))/m,δ) //用(摄入时间-事件事件)/m和δ来检测是否发生概念漂移,若发生了执行下面
then
if lateElements = 0 then //如果当前无迟到数据,灵敏度低,要提高敏感度
δ = increaseSensitivity(∆δ)
if lateElements/totalElements watermark = maxTimestamp - m
emit(watermark)
lateElements=0
totalElements=0
else //如果比值大于等于l,此时过于灵敏,需要降低敏感度
m=updateSkewness()
δ=decreaseSensitivity(∆δ)
else //如果没有发生概念漂移
if te(e) lateElements=lateElements+1

新元素到达时,将新元素的事件时间戳与摄入时间之差被插入ADWIN,并进行检查来检测变化。这样一个检测可以作为是否生成新水印的一个指标,我们没必要每次插入一个数据都生成新水印,我们还要看第二个指标迟到率,只有检测变化时,迟到率低于检测阈值l时才会生成新水印,每次生成新水印时重置此速率。阈值l决定了程序的变化灵敏度,如果需要更敏锐的灵敏度,就把l设的低一些。

下面我们用图示和文字结合起来演示一下效果

 

上图举例说明了本算法的原理,并与假想的固定周期水印生成策略(s=3

秒,m=5秒)进行了比较

Adaptive watermark策略中的参数:l=0.5,∆δ=1,w=3

垂直线代表流数据的摄入时间和事件时间

固定周期生成策略会在tp=103、106、109处分别生成值为95、98、101的水印,该策略中tp=105、107、109的数据迟到了。

AW算法在tp=100和102之间进行初始化,可以观察到在tp=103时检测到了概念漂移并生成一个水印,tp=106时同样的生成一个值为97的新水印。tp=107的是迟到数据。tp=108时检测到概念漂移,没有水印产生。在tp=110时,检测到概念漂移并产生值为98的水印。

后面的实验结果就不写了,结果当然很棒棒啦



推荐阅读
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • 容器管理与容器监控influxDB
    容器管理与容器监控-influxDB什么是influxDBinfluxDB安装(1)下载镜像(2)创建容器(3 ... [详细]
author-avatar
哈罗xeh_406
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有