使用 KNIME 工作流执行敏捷数据分析
使用工作流引擎让数据分析变得更敏捷

工作流工具让数据分析变得敏捷

在 developerWorks 文章 分析敏捷世界中的数据 中,我解释了数据分析变得敏捷需要满足的三个主要特征:

  • 分析组件需要模块化,以便在许多不同的情形中使用它们。
  • 要处理的数据需要看起来像一个矩形表,以便最大限度地降低组件之间的数据格式不兼容性。
  • 各个分析组件需要能够利用极少的编程工作组合在一起,形成一个完整的分析。

工作流工具(比如用于数据挖掘、生物信息学和业务分析的工具)需要满足这些要求。与单个分析软件相比,实现数据分析的工作流引擎提供了许多优势。

运行一个工作流不是单个整体性的操作。每个计算单元(通常被称为节点)可以完整分析独立地运行。惟一需要获得的信息是输入数据的来源。输入数据可以是通过测试获取的真实数据,或者用于验证节点逻辑的模拟数据。可以以一种表格的形式对处理的数据进行检查,然后再将数据传递给下一个节点来验证它是否已被正确处理。也可以采用图形化的方式对相同的数据进行验证。

数据来源与数据处理是独立存在的。读取器节点 将数据内部化到工作流中。将数据读入一个节点中后,会显示一个与来源独立的表。因此,即使数据来源已更改,工作流的分析部分也不会发生更改。这种安排有助于重用和更敏捷地使用某个特定的工作流,因为外部数据的格式(一个 CSV、JSON、XML 或文本格式的文件)可能发生更改,而此更改不会影响底层分析逻辑。

因为数据的获取和检查是工作流引擎的责任,所以可以处理非常大的数据集,工作流的作者无需担忧内存管理。

如果需要自定义编程,可以将该操作隔离到一个特定的节点或多个节点中。编程细节可对最终用户隐藏,他们仅需要知道该节点执行的分析类型。最终用户不需要担忧如何实现分析的具体细节。

创建各个工作流后,可以将它们封装在一个元节点 中,使它们看起来类似于可嵌入到更大的工作流中的节点。

使用 KNIME 实现敏捷分析

KNIME 是一个开源工作流引擎和工具,非常适合此类型的数据分析。它安装了 1000 多个预定义的节点,受许多外部分析工具包的支持,包括商用和开源的工具包。KNIME 可通过下载获得,可将它用在 Microsoft® Windows®、Mac® 和 Linux® 上。您可以获取教程来帮助学习 KNIME,它的理念非常简单。您以从节点存储库中拖出各个节点并放在画布上。要指明数据流,可以绘制一条从一个节点的输入端口指向该流中下移节点的导入节点的箭头。

示例 Apache 访问日志分析

例如,您可以使用 KNIME 分析,在一个接受传入 HTTP 请求的 Apache HTTP Server® 的传统三层架构的操作中,分析资源使用情况。这些请求会被路由到应用服务器节点,比如 IBM® WebSphere® Application Server,或者路由到其他可用于处理动态请求的中间层服务器。

要理解负载对资源使用情况的影响,需要基于不断发出的 HTTP 请求,将外部负载与应用服务器或数据库层使用的服务器资源相关联。为此,您需要:

  • 分析 Apache 访问日志文件。
  • 规范化来自日志文件的时间戳,以便重点关注某个特定时间段。
  • 确定一个时间区间。
  • 提取在这些时间内请求的特定的 URL。

下载 示例 KNIME 工作流,学习如何在 KNIME 内完成此分析,以及如何使用类似工作流从其他类型的日志文件(比如 CPU 日志、数据库资源日志或垃圾收集日志)中提取资源信息,使用这些信息来执行这种类型的关联。

要导入示例工作流,可以将它下载到您的文件系统中,选择 File>Import KNIME workflow... 并按照导入向导来将它导入到 KNIME 中。

查看导入的工作流(如图 1 所示),您可以看到,该工作流首先是一个 Weblog Reader,可以通过配置它来读取 Apache 访问日志的格式。

图 1. 处理访问日志的 KNIME 工作流

屏幕截图显示了 weblog reader 到输出的工作流

双击该节点,或者右键单击并选择 Configure...,调出图 2 中所示的配置对话框。在这里,您可以指定想要分析的特定日志、该文件中的文本的语言环境、时间戳的日期和时间格式,以及日志文件中每一行的总体格式。日期和时间格式由 Java SimpleDateFormat 定义的。请参阅 JavaDoc,以便了解具体的格式选项。日支行格式是在 Apache 文档中定义的,非常适合来自 Apache 配置的格式。

图 2. Weblog Reader 配置对话框

输入选项:Locale、date、time 和 log format

在配置节点后,节点下的红灯会由红色变为黄色由红变黄的图标,这表示节点已准备好运行,但尚未将它与任何数据相关联。

读取器节点可通过多种方式与整个工作流独立地运行,这些方式与 Eclipse 接口相对应:

  • 使用键盘上的 F7 键。
  • 单击菜单中的 Node > Execute
  • 单击窗口顶部按钮栏中的运行按钮

如果成功运行,黄灯会变为绿色( 由黄变绿的图标),这表示该节点已拥有与它相关联的日志数据。要查看日志数据,可右键单击该节点并选择 Weblog table。此操作会生成一个类似电子表格的表,其中包含已分析的日志文件内容。此表可滚动,可用来验证日志文件是否已正确解释,如图 3 所示。

图 3. 已分析的访问日志信息

电子表格格式的示例 Weblog 表

随着输入数据在工作流中不断被处理和转换,使用此方法可逐个处理节点,验证输入数据的解释。请参阅图 1 或您下载的示例工作流,您可以看到,对于第一个紫色矩形中的节点,最初分析的数据已得到了附加信息的增强:

  • 请求的起源国家,基于包含的 IP 地址
  • 具体的请求 URI,已从完整的 GET 请求中分离出来

要比较来自多个日志文件的时间戳,则需要关联各个计时。托管每个服务器的每个机器上的时钟可能稍有不同,也可能位于不同的时区中。这些错误匹配使得按时间戳直接比较变得很困难。要解决此问题,可基于某个定义为测试起点的时间点来计算经过时间。使用此方法,您可以调节每个日志文件的时间基准,使不基于时钟时间,而基于测试运行时间(经过时间)来执行关联变得更容易。因为解释的时间戳在内部存储为一个日期/时间对象,所以很容易使用一个时差 节点确定两个日期/时间对象之间的时差。

时差节点的配置对话框如图 4 中所示。时差可从一个日期和时间列计算,通过从工作流的执行时间、另一个相同长度的列中减去该时间,或者减去一个固定的日期和时间来计算该时间。也可以指定时差的粒度。此工作流以秒为单位指定测试的具体日期和时间。此操作得到一个包含所经过的时间的新列。

图 4. 时差节点的配置对话框

使用时差节点计算经过时间

第二个紫色矩形中的下一批节点用于清除数据表,使其仅包含输出中受关注的特定行和列。采用这种计算时差的方式,有必要将 time diff 列乘以 -1 来将这些值转换为经过时间。

在此示例中,最后一个节点将这个过滤后的表写入到某个 CSV 文件中,它可在该文件中导入一个电子表格,或者使用一个绘图工具包来描绘。但是,您可以在 KNIME 中对过滤的内容执行更复杂的分析,然后将它传递给另一个工作流。

使用工作流的优势

可以采用编程方式执行这种类型的分析,但工作流提供了多种优势:

  • 程序的流程很直观,容易理解。您不需要了解编程语言或提供各种功能所需的库的 API,比如国家查找或时区计算。
  • weblog 读取器可重用于许多类型的日志,可通过配置该读取器来读取许多日期、时间和日志格式。
  • 您可增量地验证对已分析数据的处理。
  • 您可对此工作流稍作修改,使用类似方法处理其他类型的日志文件。

如何分析资源日志

KNIME 等工作流引擎之所以成为有助于采用敏捷方式分析测试数据的关键组件,灵活性是最大的原因。要将来自 access.log 分析的数据与使用 SYSSTAT 工具(比如 Linux 平台上的 sar 或来自 Windows Performance Monitor 的工具)获取的 CPU 数据相关联,可使用类似的工作流在 KNIME 中分析系统度量指标。

因为可以将度量指标从这些工具导出到 CSV 文件中,所以对本文中描述的工作流的主要更改是将 Weblog Reader 替换为一个 CSV Reader,并使用 String to Date/Time 节点显式地将时间戳转换为日期和时间,因为 CSV Reader 不会像 Weblog Reader 那样自动执行此操作。该工作流的剩余部分基本相同。最终输出的 CSV 文件可保存并使用外部绘图工具来描绘,以查看请求类型与资源利用率之间的关系,或者在 KNIME 中通过许多现有的描绘节点来绘制。

结束语

敏捷 是一个形容词,表示能够更快、更轻松地操作,能够快速地思考和理解。使用敏捷开发方法更快更灵活地编写软件时,您需要同样敏捷地理解如何执行和扩展此软件。

KNIME 等工作流引擎解放了测试组织,当产品在每次迭代中不断演变时,他们无需编写和重写分析脚本。KNIME 让测试人员无需机械地运行数据分析,使他们能够解释这些分析的结果,而无需掌握深入的编程技能。