静态数据
可以大胆地假设每个人都非常了解静态数据:文件和数据库。无论数据来自何处,都会先存储在磁盘上,然后供用户使用。我们见证了数据多年以来的发展变化;文件很难更新,而且并行更新根本不可能实现。然后,分层/网络数据库出现了,但是,随后数据只针对某种特定用例进行了组织,而且最糟糕的访问场景几乎其他所有用例都遭遇过。这就导致了关系数据库的采用。
最终,关系模型稳定下来,并逐渐发展成为包括对象关系模型形式的可扩展性。这一模型的最成功的特征就是能够包含其他数据类型和功能来满足业务需求,比如处理空间数据和进行文本搜索。它还可以进一步扩展为提供专门的存储和处理,如
Informix? TimeSeries 功能中所述。
在过去的几年里,我们经历了分析非结构化数据的需求分析的其他发展阶段,这导致了
Hadoop(或是企业就绪的 InfoSphere BigInsights? 以及附属产品)的崛起。这些进展使得分析大量数据变得更加容易,但是它们仍然需要先将数据存储在磁盘上,然后才能对它们进行处理。
静态数据是一种已经稳定下来的模型,而且在帮助大数据挑战的时候还将继续扩展。实时分析的增加要求添加另外一种模型:动态数据。
动态数据
动态数据也是一个已知概念。想象一部电影 — 电影就是动态数据。不是因为人们在屏幕上移动,而是屏幕上有源源不断的图像经过,每一张图像都是转眼间就消失了。
在许多软件应用中,必须先让数据运动起来,然后才能对其进行处理。数据从一种功能流动到另一种功能,从一个线程流动到另一个线程,从一个流程移动到另一个流程,从一台计算机流动到另一台计算机。
试想一下应用程序的性能应用,如果需要先让数据处于静止状态,然后再对其进行处理,那么动态数据和静态数据之间的常量转换可能会造成一些重要的处理可能性。为了有效地处理数据,应该尽可能地尝试限制静态数据需求,因为磁盘驱动器是计算机系统的最慢组件。
动态数据的另一个优势是,在大量的类似数据中,我们没有必要拥有专门的存储机制来优化数据检索。如果数据处于运动状态,那么您已经拥有了它。如果需要从静态存储库中检索数据,则需要确定如何进行检索。检索可以通过顺序访问或索引访问来完成。无论采用哪种方式,在数据通过时都会执行读取数据之外的更多操作。
实时处理
在继续后面的介绍之前,我们需要弄清楚实时处理 这个术语。在有些情况下,处理数据所需的处理权限和时间量必须得到环境的保证。为了确保指定的响应时间,不能以任何理由暂停执行程序。在这些情况下,处理必须在专门的操作环境中运行,也就是说,在支持这类调度的特定操作系统下进行。
在较宽松的环境中,实时处理意味着随时随地处理数据,时间范围从转眼的瞬间到数分钟甚至数小时不等。而在紧要关头,数据可用性与数据创建之间可能存在延迟性。您的数据可能每隔
15 分钟突然出现一次,但延迟性就是数据突然出现和信息可用之间的时间。
在许多商业案例中,比如社交数据分析,会依靠已定义的延迟水平来确定处理的有效性。项目成功的关键在于我们可以降低多少延迟。
请记住,这次我们讨论的并不是要从静态模型的数据中获得什么。在许多情况下,仍然需要将此用于不太严格的
“实时” 需求,当然,可以将此用于历史数据的深度分析。对于让实时分析适应业务变化实际情况,这种分析至关重要。
InfoSphere Streams 是什么?
我的一个同事提供了这个简短的定义:“InfoSphere Streams
是一个对大数据进行实时分析的平台。”
“大数据” 部分指的是数据的数量、种类和速度。我们会讨论任何类型的数据(种类),可能包括以非常快的速度
传入的 TB(数量)字节的数据。
当说到 “分析” 时,我们指的是通过自定义编程处理/分析数据的能力,包括工具的使用(比如
SPSS?)或 R 项目环境。
“实时” 部分是指通过处理内存中的数据,尽可能多地消除延迟性。
最后,“平台 ... 用于大数据” 指的是 InfoSphere Streams
在一个机器集群上通过显式分发处理来实现可扩展性的能力,以及监控和管理环境的能力。
平台提供了哪些功能,我们如何使用它们?问得好。在回答这个问题之前,让我先介绍一下
InfoSphere Streams 信息的一站式商店。
InfoSphere Streams Playbook 简介
关于 InfoSphere Streams 的可用信息有许多。这些信息以有文档、IBM
红皮书?、developerWorks 文章、培训视频、用例等形式存在。您如何发现并导航这些信息?
一个名为 InfoSphere Streams Playbook 的 developerWorks
维基可以实现此目的。如果因为某些原因没有记住 URL,那么您可以通过 Google 搜索 “Streams
Playbook”,URL 会出现在第一个结果页面中。
这个维基包含以下各个部分:
1.参考资料
2.视频教程
3.视频用例
4.其他用例(当前为空)
5.生态系统
6.开发人员一角
本文的其余部分参照这个维基的各个部分来提供更多信息。
InfoSphere Streams 的使用目的是什么?
InfoSphere Streams 是为安全应用而开发的,这些应用中有大量数据需要快速处理,以便预防某些问题的发生。由于数据来自不同的系统而且使用的格式也不同,因此需要满足以下需求:
1.支持任何类型的数据
2.需要通过内存中处理来降低延迟
3.能够通过使用集群支持来进行缩放
InfoSphere Streams 还被用于电信行业中,使电信公司能够快速对客户问题作出反应。当客户体验中断时,公司可以采取积极措施来自动补偿客户并维护客户满意度,而不是等待客户投诉或寻求其他的运营商。在一些竞争相当激烈的市场中,客户满意度就相当于客户保持。消除客户流失非常重要。
InfoSphere Streams 还用于交通运输、医疗保健和其他行业中。参见
Playbook 的 “视频用例” 部分,了解有关的更多信息。
InfoSphere Streams 环境
Although InfoSphere Streams 可在单台计算机上运行,它被设计成可在集群上运行,以提供几乎无限的可扩展性。一台计算机可用作一台管理主机、一台应用程序主机,或是一台混合模式的主机,这种主机既可以运行管理服务,也可以运行应用服务和代码。
图 1. 集群上的管理主机和应用主机的混合
请注意,管理节点运行的一组服务将会跟踪集群的健康状况和作业的运行情况。可以将一个作业看作是一个程序。作业和程序之间的区别在于它是由操作符构成,可通过调度在任何可用应用主机上运行。作业
由多个流程组成,而程序 则在单个流程上运行。在信息中心和 InfoSphere Streams Playbook
的 “视频教程” 部分中,了解有关 InfoSphere Streams 运行时的更多信息(参见 参考资料)。
InfoSphere Streams 包含的一些工具可帮助您管理环境和开发
InfoSphere Streams 应用程序:
1.FirstSteps:执行安装后的任务,比如配置 SSH、生成公钥和私钥、配置恢复数据库等。
2.Instances Manager:创建、配置、更新和删除实例与集群。实例管理程序还可以启动
InfoSphere Streams 控制台。
3.InfoSphere Streams Console:基于 Web
的 GUI,用于监控和管理实例与应用程序。
4.InfoSphere Streams Studio:基于 Eclipse
的工具,用于开发应用程序。该工具中包含一个图形编辑器和向导,可简化标准开发任务。它还包含运行 InfoSphere
Streams 作业及其操作符的可视化。
5.Streamtool:命令行工具,用于自动化管理和监控任务。
6.InfoSphere Streams Compiler (SC):通过工具来自动化编译任务。还可直接使用或通过生成文件(makefile)使用。
一旦掌握了图形工具(列表中的前四个符号),就可以使用它们来帮助大幅提高生产力。学习曲线非常短且值得尝试。
InfoSphere Streams 编程
InfoSphere Streams 编程首先将操作符聚集在一起,以便进行模块化处理并启用并行执行。图形编辑器可以更轻松地将操作符连接在一起,创建一个作业处理图形。
InfoSphere Streams 还使用称为流处理语言 (SPL)
的程序语言。如果您熟悉 C 语言、Java? 编程语言和 Python,那么您应该很快就会熟练使用 SPL。
InfoSphere Streams 与大多数语言不同的其中一个方面是其广泛的可用数据类型集,如下所示。
图 2. InfoSphere Streams
中可用的数据类型
利用这些类型,您几乎可以匹配任何数据类型。甚至可以根据所提供的原始类型创建自己的数据类型。
除了数据类型外,InfoSphere Streams 还附带了重要的分类功能集,包括集合操作(列表、集合与映射)、文件、数学、字符串、时间和实用功能。除了处理不同数据类型的几个同名功能和特定于给定操作符的功能之外,InfoSphere
Streams 总共包含 250 多种功能。您还可以在 InfoSphere Streams 包含的专用工具集中添加技术功能。
InfoSphere Streams 编程从操作符开始。操作符 管理通过各种方式从外部世界获取数据,执行数据转换,并提供最终结果。它支持您将框架快速凝聚为一个解决方案,并利用该解决方案来解决您的业务问题。
操作符和工具集
操作符组成了比程序编程更高级别的抽象层次,利用操作符,您就拥有了对处理的逻辑隔离,从而提供了处理分发。操作符来自称为
“工具集” 的不同数据包。尤其是一个标准工具集始终包含在所有 InfoSphere Streams 项目中。它提供了产品附带的所有功能。尽管各种功能可能会被视为语言的一部分,但还是会被分隔出来,因为它们是在不同的工具集中定义的。
一个工具集 就是一个功能数据包,它通常与某个特定的问题领域相关。这些工具集中可以包括操作符、功能和数据类型。下面是
InfoSphere Streams 3.1 中提供的工具集:
1.标准工具集:包含适配器、关系运算、实用程序和 XML 等操作符
2.大数据:与 Hadoop 分布式文件系统 (Hadoop Distributed
File System, HDFS) 和 Data Explorer 相配合
3.复杂事件处理:用来定义如何处理复杂事件
4.数据库:访问关系数据库,比如 DB2?、Informix、Netezza、Oracle、SQL
Server、Teradata 等。
5.金融服务:包含一组用来处理金融市场处理的操作符和功能
6.地理空间:提供一组处理地理空间数据的功能
7.InfoSphere DataStage? 集成:与 DataStage
相配合
8.Internet:访问 HTTP(S)、FTP(S) 和 RSS
9.Messaging:与 WebSphere? MQ 和 ActiveMQ
进行通信
10.Mining:提供一种对数据进行评分的方法
11.R Project:与 R Project 统计环境相配合
12.Text:提供文本分析
13.TimeSeries:帮助处理时间序列,即基于时间的数据处理
标准工具集附带了 36 个操作符以及 256 个以上的功能。其他工具集添加了
40 多个操作符和几十个函数。通过所有这些预构建的功能,您可以在创建自定义作业时更有效地满足业务需求。
这篇简短的描述会让您对 InfoSphere Streams 提供的功能有初步的了解。接下来让我们进一步了解
InfoSphere Streams 如何适应完整的数据处理环境。
InfoSphere Streams 集成
InfoSphere Streams 并不是在真空中运行,它是 IBM
大数据平台的关键组件。在企业集成的过程中,InfoSphere Streams 可以从不同来源读取数据并将数据写入不同的目标,比如文件、网络连接(TCP、UDP、HTTP
等)和消息队列(WebSphere MQ 和 Active MQ)。InfoSphere Streams
包含的操作符可与使用金融信息交换 (Financial Information eXchange, FIX)
协议的金融市场相配合。
除了这些接口之外,InfoSphere Streams 还适用于多种 IBM
产品,包括 InfoSphere BigInsights、Data Explorer、SPSS 和 Cognos?。此外,它还可以利用
R Project 统计分析工具。随着 InfoSphere Streams 的发展,还会添加更多的接口。
如欲了解有关的更多信息,请查阅 InfoSphere Streams Playbook
的 “生态系统” 部分。
导航信息中心
信息中心包含的信息适用于系统管理员、InfoSphere Streams
管理员和应用程序编程人员。本节主要介绍应用程序开发人员的信息需求。
图 3 该图显示了信息中心的各个主要部分和子部分。作为一名开发人员,您可能想要查看所有部分来了解与
InfoSphere Streams 相关的每件事。如欲初步了解编程环境,请参阅 “开发” 部分并学习
InfoSphere Streams Studio,然后根据教程进行试验。
图 3. 信息中心部分
在完成最初的浏览之后,您很可能会花费大量的时间查看参考资料部分。您需要了解
SPL 语言、可用的功能、可用的操作符,以及如何使用它们。
在 Reference > Language reference
中有两个部分:标注查询语言 (Annotation Query Language, AQL) 和流处理语言
(Streams Processing Language, SPL)。如果不打算使用 Text 工具集下的文本分析和
TextExtract 操作符,那么现在可以忽略 AQL 部分。当决定进行文本分析时,您可能想要使用 InfoSphere
BigInsights 2.1 信息中心,其中包含有关各种主题的信息,这些信息比 InfoSphere
Streams 信息中心包含的信息还要多。
SPL 语言部分包含了解 SPL 语言、数据类型的使用、功能和如何调用工具集操作符的所有信息。由于已经遇到过这个问题,所以我想指出一个可能会被用户忽略或用户可能会再次遇到麻烦的特定部分:Streams
Processing Language > Expression language > Expression
operator。如果想要了解如何进行逻辑或按位表达,本节列出了编写代码段函数时可以使用的内容。但在这个列表中没有明显指出的是:如何连接字符串。(您可以使用
+ 操作符来完成此操作。)
一旦掌握了这种语言,下一个问题就可能是 “哪些功能可用来处理我的数据?”
这个问题的简要回答是 SPL 不包括任何功能。这可能是真的,但所有应用程序都隐式包含 “标准工具集”。以下是您可以寻找操作功能的位置:Toolkit
reference > SPL Standard Toolkit > Built-in SPL
Functions > FunctionList。本节包含的功能可用于文件处理、数学运算、字符串处理、时间控制和
XML 处理。本小节还包含用于日志记录、跟踪、断言等的实用功能。在查找关于某种功能的信息时,最简单的方法就是在页面中搜索(使用
Ctrl+f)功能名称或相关关键词。
代码示例
此时此刻,您应该已经掌握了开始使用 InfoSphere Streams 进行编程的所有信息。使用 InfoSphere
Streams Studio 和 GUI 编辑器,您可以轻松拖拽想要使用的操作符,并将它们连接在一起。对于更复杂的处理,您可以考虑添加自己的代码段。有些操作符将需要花费额外的学习时间。
最快学习方法之一就是使用代码示例。您可以在 InfoSphere Streams Playbook 中的
“Developer corner” 下发现示例和样例的许多参考资料。另外,在 developerWorks
网站上,可以查看一些有用的资源:
1.developerWorks 文章 — developerWorks
站点上的 InfoSphere Streams 文章。
2.InfoSphere Streams 博客 — 有关 InfoSphere
Streams 编程的所有领域的条目,从简单到复杂。
3.流交换 — 社区提供的代码贡献。示例包括使用 OpenCV 的视频处理和与
HBase 配合使用的工具集。在 “Applications” 下,查看 “Examples for beginners”,当您使用流和操作符开始入门时,强烈推荐您阅读这些内容。 |