《Storm分布式实时计算模式》——3.6 Trident状态

3.6 Trident状态

我们现在已经给每个aggregator的分组数据进行了计数,现在想将信息进行持久化存储,以便进一步分析。在Trident中,持久化操作从状态管理开始。Trident对状态有底层的操作原语,但不同于Storm API,它不关心要哪些数据会作为状态存储或者如何存储这些状态。Trident在高层提供了下述的状态接口:

上面提到了,Trident将tuple分组成一批批数据。每批数据都有自己的事务标识符。在前面的接口中,Trident告诉State对象什么时候开始提交状态,什么时候提交状态应该结束。
和function类似,Stream对象也有方法向topology引入基于状态的操作。更具体说,Trident有两种数据流:Stream和GroupedStream。一个GroupedStream是GroupBy操作的结果。在我们的topology中,我们根据HourAssignment function生成的key对tuple进行分组。
在Steam对象中,下列方法允许topology读和写状态信息:

stateQuery()方法从state生成了一个输入流,不同参数的几个partitionPersist()方法允许topology从数据流中的tuple更新状态信息。partitionPersist()方法的操作对象是每个数据分片。
在Stream对象的方法外,GroupedStream对象允许topology对一批tuple进行聚合统计,并且将收集到的信息持久化在state中。下列代码是GroupedSteam类中和状态相关的方法:

和Steam对象类似,stateQuery()方法从State生成一个输入数据流。不同参数的几个persistAggregate()方法允许topology从数据流中的tuple更新状态信息。注意GroupedStream方法有一个Aggregator参数,它在信息写入State对象之前执行。
现在考虑将这些function应用到我们的例子中来。在我们的系统中,需要将事件发生的城市、疾病代码、每小时内产生疾病统计量进行持久存储。这样可以生成报表如表3-2所示。

为了实现这个功能,我们需要将聚集操作中生成的统计量进行持久化存储。我们可以使用groupBy函数返回的GroupedStream接口(如前面所示)调用persistAggregate方法。下面代码是示例topology中具体的调用方式:

要了解持久化存储,我们首先来看这个方法的第一个参数。Trident使用一个工厂类来生成State的实例。OutbreakTrendFactory是我们的topology提供给Storm的工厂类。OutbreakTrendFactory代码如下:

工厂类返回一个State对象,Storm用它来持久化存储信息。在Storm中,有三种类型的状态。每个类型的描述如表3-3所示。

在分布式环境下,数据可能被重放,为了支持计数和状态更新,Trident将状态更新操作进行序列化,使用不同的状态更新模式对重放和错误数据进行容错。接下来会介绍这些模式。
3.6.1 重复事务型状态
在重复事务型状态中,最后一批提交的数据的标识符存在数据中。当且仅当一批数据标识符的序号大于当前标识符时,才进行更新操作。如果小于或者等于当前标识符,将会忽略更新操作。
为了演示这个实现方法,考虑如表3-4所示的数据批次的序列,这些记录对我们例子中的数据按照key进行聚合计数。

这些批次数据按照下列将顺序处理完成:

1 à 2 à 3 à 3 (重放)

处理结果将按照表3-5中的状态变更操作,中间的一列数据用来存储数据标识符,记录最近一次合并进状态的数据批次编号。

时间: 2024-11-16 03:19:04

《Storm分布式实时计算模式》——3.6 Trident状态的相关文章

《Storm分布式实时计算模式》——第3章 Trident和传感器数据3.1 使用场景

第3章 Trident和传感器数据 在本章中,我们将介绍Trident topology.Trident在Storm上提供了高层抽象.Trident抽象掉了事务处理和状态管理的细节.特别是,它可以让一批tuple进行离散的事务处理.此外,Trident还提供了抽象操作,允许topology在数据上执行函数功能.过滤和聚合操作.我们将使用传感器数据作为例子来更好地理解Trident.通常情况下,传感器数据流会来自不同的位置.一些传统的例子包括天气和交通状况,这种模式扩展到了更大的数据源.比如,手机

《Storm分布式实时计算模式》——导读

前 言 目前对信息高时效性.可操作性的需求不断增长,这要求软件系统在更少的时间内能处理更多的数据.随着可连接设备数量不断增加,以及在众多行业领域广泛应用,这种信息需求已无处不在.传统企业的运营系统被迫处理原先只有互联网企业才会遇到的大规模数据.这种重大转变正不断瓦解传统架构和解决方案,传统上会将在线事务处理和离线分析分割开来.与此同时,人们正在重新勾勒从数据中提取信息的意义和价值.软件框架和基础设施也在不断进化,以适应这种新场景. 具体地说,数据的生成可以看作一连串发生的离散事件,这些事件流会伴

《Storm分布式实时计算模式》——3.3 Trident spout

3.3 Trident spout 让我们先来看topology中的spout.和Storm相比,Trident引入了"数据批次"(batch)的概念.不像Storm的spout,Trident spout必须成批地发送tuple. 每个batch会分配一个唯一的事务标识符.spout基于约定决定batch的组成方式.spout有三种约定:非事务型(non-transactional).事务型(transactional).非透明型(opaque). 非事务型spout对batch的组

《Storm分布式实时计算模式》——3.5 Trident聚合器

3.5 Trident聚合器 和function类似,aggregator(聚合器)允许topology组合tuple.不同的是,它会替换tuple的字段和值.有三种聚合器:CombinerAggregator.ReducerAggregator和Aggregator.3.5.1 CombinerAggregator CombinerAggregator用来将一个集合的tuple组合到一个单独的字段中,Combiner的签名(Signature)如下所示: Storm对每个tuple调用init

《Storm分布式实时计算模式》——1.3 实现单词计数topology

1.3 实现单词计数topology 前面介绍了Storm的基础概念,我们已经准备好实现一个简单的应用.现在开始着手开发一个Storm topology,并且在本地模式执行.Storm本地模式会在一个JVM实例中模拟出一个Storm集群.大大简化了用户在开发环境或者IDE中进行开发和调试.后续章节将会演示如何将本地模式下开发好的topology部署到真实的Storm集群环境.1.3.1 配置开发环境 新建一个Storm项目其实就是将Storm及其依赖的类库添加到Java classpath中.在

《Storm分布式实时计算模式》——2.1 Storm集群的框架

第2章 配置Storm集群 在本章中你将深入理解Storm的技术栈,它的软件依赖,以及搭建和部署Storm集群的过程.我们首先会在伪分布式模式下安装Storm,所有的组件都安装在同一台机器上,而不是在多台机器上.一旦你了解了安装和配置Storm的基本步骤,我们就可以通过Puppet这个工具进行自动化的安装,这样的话部署多节点的集群可以节省大量的时间和精力. 本章包括以下内容: 组成Storm集群的不同组件和服务 Storm的技术栈 在Linux上安装和配置Storm Storm的配置参数 Sto

《Storm分布式实时计算模式》——第1章 分布式单词计数1.1 Storm topology的组成部分——stream、spout和bolt

第1章 分布式单词计数 本章将介绍使用Storm建立一个分布式流式计算应用时涉及的核心概念.我们通过建立一个简单的计数器程序实现这个目的.计数器将持续输入的一句句话作为输入流,统计其中单词出现的次数.单词计数这个例子浅显易懂,引入了多种数据结构.技术和设计模式.这些都是实现更复杂计算所必须的基础. 本章首先概要介绍Storm的数据结构,然后实现一个完整Storm程序所需的各个组成部分.读完本章,读者将会了解Storm计算的基本结构.搭建开发环境的方法.Storm程序的开发和调试技术. 本章包括以

《Storm分布式实时计算模式》——1.7 总结

1.7 总结 本章中,在没有安装和搭建Storm集群的情况下,我们使用Storm的核心API建立了一个简单的分布式计算程序,覆盖了Storm特性集的大部分内容.Storm的本地模式非常强大,简化了开发,提高了开发效率.但要感受到Storm真正的威力和水平扩展性,还是需要将程序部署在真实的集群上.下一章,我们会讲如何安装和搭建Storm集群环境,以及如何将topology部署到到分布式环境中.

《Storm分布式实时计算模式》——1.4 Storm的并发机制

1.4 Storm的并发机制 在Storm的间接中提到过,Storm计算支持在多台机器上水平扩容,通过将计算切分为多个独立的tasks在集群上并发执行来实现.在Storm中,一个task可以简单地理解为在集群某节点上运行的一个spout或者bolt实例.为了理解storm的并发机制是如何运行的,我们先来解释下在集群中运行的topology的四个主要组成部分: Nodes(服务器):指配置在一个Storm集群中的服务器,会执行topology的一部分运算.一个Storm集群可以包括一个或者多个工作