《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-layout.html)。

Step01 参照第1章中创建“Hello World” Topology的方法创建POM文件,修改和标签,然后添加以下依赖项:



Step02 通过以下命令生成Eclipse工程文件,然后将工程文件导入Eclipse:

Step03 日志Topology中的Tuple会携带日志域对象,该对象封装了数据和解析日志文件中单个记录的逻辑。在我们的项目中创建这个域对象:

这个代码片段中并没有包含getter、setter和equals方法,但还是有必要依次实现它们。对单元测试来说,equals方法有很大用处。
Step04 接下来创建Logspout类,并继承BaseRichSpout接口。参照第1章的方法实现这个类,声明下面这个字段:

然后发送接收到的日志记录到Topology中,代码如下:

应尽量避免直接在代码中使用字符串。虽说Tuple能在运行时高效地处理这些局部变量,但在编译链接的时候,初始化带有字符串元素的代码并没有任何意义。因此,我们还是建议使用静态变量定义代替这种直接使用字符串的方法。

2.3.2 解析

Redis Spout的实现我们已经熟谙于心,本节重点阐述LogEntry类域对象中的解析逻辑。logstash会以单个JSON值的形式向Redis通道发送日志。这些JSON值的格式如下所示:

2.3.3 补充内容

JSON格式包含两种关键结构,分别是JSON对象(JSON Object)和JSON数组(JSON Array)。JSON主页(www.json.org)提供了针对这两种结构的简要定义,为了方便起见,我们就直接在这里罗列出这两种结构的定义。对象是一个无序的名/值对(name/value pair)集合。一个对象以“{”(左括号)开始,以“}”(右括号)结束。每个名称后跟一个“:”(冒号),名/值对之间使用“,”(逗号)分隔,如图2-2所示。

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,以“]”(右中括号)结束。值之间使用“,”(逗号)分隔,如图2-3所示。

值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
LogEntry对象的构造函数包含一个JSONObject对象作为参数,并根据该对象的成员对自身进行初始化。可以通过toJSON()方法把LogEntry对象转换成对应的JSONObject对象,以备不时之需。LogEntry通过com.googlecode.json-simple库中的工具方法,将字符串转换成可用的JSON结构。
虽然结构定义清晰,但“日期-时间”却有多种不同的格式。parseDate()方法采取最优的方法解析各种日期格式。FORMATS类成员变量定义了支持的“日期-时间”格式。

时间: 2024-08-29 10:42:50

《Storm实时数据处理》一2.3 创建日志Spout的相关文章

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

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

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

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

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

2.6 统计与持久化日志统计信息 我们其实可以收集很多日志流的统计信息,但由于本节只是为了展示一些基本概念,因此我们只准备收集和处理单时间序列(每分钟)日志量.虽说如此,但这应该已经足以展示有关的设计和方法了,这些技巧能够帮助你在未来实现其他分析工作. 2.6.1 实战 Step01 下载storm-cassandra contrib项目并将其安装到Maven仓库中: Step02 在storm.cookbook.log包中,创建一个继承自BaseRichBolt的类VolumeCounting

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

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

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

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

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

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

《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.6 创建Storm集群——配置Storm

1.6 创建Storm集群--配置Storm 当拥有一组准备好进行应用程序配置的虚拟机后,你就可以在每个节点上安装和配置适当的软件包了. 1.6.1 实战 Step01 按照图1-7所示的目录结构,新建名为storm-puppet的项目. Step02 在配置好的节点上,Puppet的运行入口(起点)是site.pp.在manifests目录下新建site.pp并添加以下内容: Step03 接着,你需要定义Storm模块.模块应该放置于modules目录下,并且和Puppet项目根目录的结构一

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

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