《Storm实时数据处理》一2.6 统计与持久化日志统计信息

2.6 统计与持久化日志统计信息

我们其实可以收集很多日志流的统计信息,但由于本节只是为了展示一些基本概念,因此我们只准备收集和处理单时间序列(每分钟)日志量。虽说如此,但这应该已经足以展示有关的设计和方法了,这些技巧能够帮助你在未来实现其他分析工作。

2.6.1 实战

Step01 下载storm-cassandra contrib项目并将其安装到Maven仓库中:

Step02 在storm.cookbook.log包中,创建一个继承自BaseRichBolt的类VolumeCountingBolt。为该Bolt声明以下三个字段:

Step03 然后实现一个静态工具方法,该方法的作用是获取日志的时间信息,按分钟形式表示出来:

Step04 实现execute方法(没错,函数体很短):

Step05 最后,参照第1章中的方法来创建LogTopology类,并按照如下方法创建Topology:

2.6.2 解析

该实现方法看起来简单得让人感到不可思议,但事实确实如此。在实现过程中我们使用了storm-cassandra项目(该项目属于storm-contrib组件)来对所有持久化复杂性进行抽象。storm-cassandra项目通过一个通用且可配置的backtype.storm.Bolt实现来集成Storm和Cassandra,该Bolt的作用是将StormTuple对象写入Cassandra 列族。
Cassandra是一个面向列族的数据库系统(http://cassandra.apache.org/)。Cassandra的列族数据模型在提供二级索引便利的同时还具备日志式结构更新的存储性能,另外也提供了健壮的物化视图支持和强大的内置缓存。Cassandra最新的一个功能是计数器列。你可以在集群上的任何地方,通过持久化指定计数器列族中的计数器列来实现计数器的安全自增。
storm-cassandra项目支持两种持久化风格,第一种是标准的Cassandra列族风格,第二种是基于计数器列的风格。我们在这里只关注第二种类型的风格,因为它非常适用于当前这个例子。你可以阅读项目的README文件中有关其他风格的介绍,基本上都差不多。
CassandraCounterBatchingBolt类的实例就能帮我们搞定所有工作 。只需告诉它我们要使用哪个列族,哪个Tuple字段作为行键,哪个Tuple字段作为增量,而Tuple中剩下的那个字段则指明了需要更新的计数器列。
我们来看看下面的构造函数:

以及以下作为输入的元组数据:

这会把columnFamily列族中的SomeCounter计数器列加1L。
对于任何有关系型数据库背景的开发人员来说,最关键的观念转变在于了解面向列族数据库中的数据建模。作为数据库中大数据家族的一分子,面向列族的数据库促进了高度不规则数据模型的应用。这个方法移除了表之间的关系以及它们的锁,实现了对数据库的大规模、并行读写的处理。虽然这种方法会增加数据的冗余,但为了满足当今大规模数据处理的需求,在一些普通磁盘上面的开销其实算不了什么问题。观念的转变在于我们要根据在数据集上执行的查询来选择适当的数据模型,而不是简单地将现实世界模型转化成固有和统一的结构。对应当前查询的数据类型可以归纳为:查询给定时间点上所有日志文件的总数 。
这种方法能让我们通过简单地发送Tuple来生成统计数据,我们可以使用这种方法来得到各种问题的答案,下面给出几个例子:

  • 我们的日志体积随着给定时间周期(可以是日、月或者年)的变化趋势到底是什么样的?
  • 日志文件中出现频率最高的词干是什么?

列族不只可以包含统计数据,你可以设计任意的不规则结构,并通过发送一个Tuple来表示某一行中任意列的集合。如果该行已经存在,Cassandra会简单地添加或者更新数据。这其实可以实现非常强大的功能。

时间: 2024-10-31 11:33:06

《Storm实时数据处理》一2.6 统计与持久化日志统计信息的相关文章

《Storm实时数据处理》一2.8 创建日志分析面板

2.8 创建日志分析面板 日志分析面板是一个通过图形的方式向用户展示统计信息的Web应用程序.在实现它之前,我们需要先了解一下用户界面设计原则. 区分焦点:只显示必要的内容,根据用户试图得到的东西来创建焦点,而不是让用户因无关内容而分心. 极简主义:从可用性角度考虑,只需要包含必要的图形特性. 响应式处理:这是一种确保显示内容清晰和一致的方法,无论是在PC上还是在平板电脑上进行查看. 基于标准:你不应该使用非标准的技术进行开发,因为这有可能会妨碍在诸如iPad这样的设备上正常访问我们的程序. 本

《Storm实时数据处理》一2.3 创建日志Spout

2.3 创建日志Spout 日志Topology通过Redis通道读取所有logstash产生的日志,这些日志数据会通过本章介绍的Spout发送到Topology中.由于这是一个全新的Topology,因此我们先来新建一个Topology项目. 2.3.1 实战 我们先来创建项目目录和标准的Maven目录结构(标准结构可以参考:http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-la

《Storm实时数据处理》一导读

前 言 开源已经在许多方面从根本上改变了软件的原有面貌.在很多应用环境中,人们都会争论使用开源带来的好处和坏处,主要体现在支持.风险以及总体拥有成本等方面.开源在某些领域比其他领域流行,比如在研究机构中就比在大型金融服务提供商中应用得多.在某些新兴领域,比如Web服务供应商.内容供应商以及社交网络等,开源软件占据主导地位.其原因是多方面的,其中成本是一个非常大的因素.怎么说呢?如果方案要上升到网络规模,那么一般会应用"大数据"解决方案,以期获得更好的效果.凭借极佳的可用性,这些解决方案

《Storm实时数据处理》一2.1 简介

2.1 简介 本章将会展示一个企业日志存储系统的实现方法,以及一个基于Storm处理系统的搜索分析解决方案.其实日志数据处理已经不再是一个需要解决的问题了,但它依然能够帮助我们加深理解这些新概念.数据流处理在现代企业中是一个主要的架构关注点.但通常情况下,最理想的数据流也只是半结构化的.本章展示了一个企业日志的处理方案,目的是为了让读者学习了解各种重要概念,获得处理各种类型数据的能力.由于日志数据量庞大,因此日志数据也为学术研究提供了极大的便利.对于任何流处理或分析工作来说,其成功的关键都在于深

《Storm实时数据处理》一1.7 获取基本的点击率统计信息

1.7 获取基本的点击率统计信息 统计点击率Topology用于记录基本的网站使用量统计信息,具体来说它会统计以下信息: 访客数量 独立访客数量 特定国家的访客数量 特定城市的访客数量 特定国家中每个城市访客数量的百分比 该系统假定访客总量一定,而且希望服务端的用户标示与客户端的Cookies是相对应的.该Topology通过IP地址和公用IP解析服务获取地理位置信息.统计点击率Topology还将使用Redis存储发送到Topology的点击事件,具体来说就是将其作为一个持久化队列:除此以外还

《Storm实时数据处理》一1.4 创建“Hello World”Topology

1.4 创建"Hello World"Topology "Hello World" Topology和其他所有的"Hello World"应用程序一样,并没有什么实际用途,其目的在于说明一些基本概念."Hello World" Topology结构将演示如何创建一个包含简单的Spout和Bolt的项目,如何构建项目,并在本地集群模式下运行项目. 1.4.1 实战 Step01 新建一个项目目录,并初始化你的Git代码仓库. S

《Storm实时数据处理》一1.5 创建Storm集群——配置机器

1.5 创建Storm集群--配置机器 本地模式下测试集群对调试和验证集群的基本功能逻辑很有帮助.但是,这并不代表你就能够了解集群在实际环境中运行的状况.此外,只有当系统已经在产品环境中运行时,开发工作才算真正完成.任何开发者都应该重视这一点,并且这也是整个DevOps实践的基础.无论采用什么方法,你都必须能够将代码可靠地部署到产品环境中.本节将展示如何直接通过版本控制创建和配置一个完整的集群.在此之前,需要事先说明一些有关创建和配置集群的基本原则: 我们需要时刻了解服务器的会话状态.在没有严格

《Storm实时数据处理》一1.10 将产品部署到集群

1.10 将产品部署到集群 在完成整个开发过程之前,我们需要对集群中的Topology进行功能性测试,然后再将其部署到下个环境中. 1.10.1 实战 Step01 首先需要在主机开发环境中配置Storm客户端,在用户主目录下创建.storm目录.然后在这个目录下新建storm.yaml,内容如下: Step02 在项目根目录下,使用以下命令打包Topology: Step03 这样就会在项目的目标目录下生成一个完整并打包好的JAR文件.这时就可以用storm客户端命令将JAR包部署到集群上:

《Storm实时数据处理》一2.4 基于规则的日志流分析

2.4 基于规则的日志流分析 任何合理的日志管理系统都需要具备以下特性: (1)过滤无关紧要的日志信息,无须对这类日志进行统计和排序.这类日志常常包含INFO或DEBUG等级的日志记录(没错,产品系统中也会包含这些信息 ). (2)深入分析日志记录并提取更多有价值的信息和新的字段. (3)在保存日志之前增改日志记录. (4)当收到特定日志记录时发送通知信息. (5)通过关联日志事件来获取有价值的信息. (6)应对日志结构和格式的变更. 本节在Bolt中集成了JBoss库和Drools,以便于我们