IBM Accelerator for Machine Data Analytics,第 4 部分: 加快多种数据的启动和运行体验

企业中产生的不同来源的机器日志的数量非常庞大。IBM® Accelerator for Machine Data Analytics 简化了需要实现的任务,加速对半结构化、非结构化或结构化文本数据的分析。本文是该系列的第四篇文章,我们将在本文中分步了解如何在 IBM InfoSphere® BigInsights™ 中使用 Web 或 Eclipse 工具让 IBM Accelerator for Machine Data Analytics 更快速地启动和运行。

Sonali Surange, 架构师, Machine Data Accelerator, IBM

作者的照片Sonali Surange 是一位 IBM 软件架构师,致力于 IBM 的大数据产品和技术。她已经申请了多项专利,在 IBM developerWorks 上发表了超过 15 篇技术论文,并出席了多个技术会议。Sonali 曾获得 IBM Outstanding 技术成就奖、Women of Color STEM Technical 全明星奖,并在 2012 年被认定为 IBM developerWorks 专业作家。


developerWorks 专家作者

Amit Rai, 软件工程师, IBM

Amit Rai 的照片Amit Rai 是 IBM Big Data Accelerator 团队的一名顾问软件工程师。他在 Machine Data Analytics Accelerator (机器数据分析加速器)的开发中发挥了关键的作用。Amit 参与了多个客户的涉及 InfoSphere BigInsights、InfoSphere Streams 和 Data Explorer 的概念证明项目。他还曾致力于许多 IBM 数据管理和数据仓库解决方案。



2013 年 11 月 01 日

机器数据的特征

在本系列的 第 1 部分:加快机器数据分析 中,您学习了机器数据如何由记录组成。在许多情况下,记录只包含一行,在另一些情况下,许多行一起形成一个记录。包含异常堆栈跟踪、XML 内容或者从写入多行记录的应用程序生成的内容的机器日志就是一个典型的例子。记录边界通常由是否存在主时间戳来识别。在记录中,有时在主时间戳之前会出现一些字符。

请参阅 第 1 部分:加快机器数据分析 中的 开始前的一点准备已知的日志类型未知的日志类型,了解一些这样的示例。

正确识别和定义这些记录边界对于执行机器数据分析是重要的第一步。无论机器数据包含一行或还是多行记录,遵循以下流程都有助于确定主时间戳,它是其余分析的关键。

由于数据的多样性,描述记录边界或主时间戳的规则可能会略有不同或需要重新定义。利用工具的帮助,可以简化准备多种类型的任务。


在开始之前

关于本系列

IBM Accelerator for Machine Data Analytics 的主要优点和长处之一是能够很容易地对该工具进行配置和定制。 本系列的 文章和教程 面向那些希望初步了解加速器,进一步加快机器数据分析,同时还想获取自定义洞察的读者。

关于本教程

本教程是一个分步的示例,将演示如何使用 IBM InfoSphere BigInsights 工具(Web 或 Eclipse)加快 IBM Accelerator for Machine Data Analysis 的启动和运行体验。您将学习如何轻松准备数据,并反复测试数据的提取。这为余下的分析奠定了基础。在这个过程中,将会引入一些用来加快这一过程的辅助工具。

目标

在本教程中:

  1. 您将学习如何配置机器数据,以进行分析。您将引入 BigInsights Eclipse 辅助工具,您可以选择性地使用它。
  2. 如果您喜欢先在本地配置和测试数据,然后再移动到 BigInsights 集群,您将学习如何使用 Eclipse 工具来执行此任务。
  3. 如果您喜欢直接在 BigInsights 集群中进行配置和测试,那么您可以学习如何执行此任务。

由于有多种数据用于分析,针对少量数据使用以下步骤,以准备进行分析。一旦经过测试,就能够以类似的配置在大数据上运行分析。

先决条件

阅读本系列的 第 1 部分:加快机器数据分析,获得 IBM Accelerator for Machine Data Analytics 的概述。可以选择阅读本系列的 第 2 部分: 加快分析新的日志类型,了解如何使用 Eclipse 工具来支持新的日志类型,以及 第 3 部分:加快机器数据搜索,了解如何从整合的可搜索存储库中搜索已知的和定制的日志类型。

系统要求

为了运行本教程中的示例,您需要:

  1. 已经安装 InfoSphere BigInsights 2.0
  2. 已经安装 IBM Accelerator for Machine Data Analytics
  3. 已经安装面向 Eclipse 的 BigInsights 2.0 工具(可选)
  4. 用于机器数据分析的数据集。下载数据的链接请参阅 下载 部分。

一家虚构的 Sample Outdoors 公司的情况

Sample Outdoors 公司的数据科学家接受的任务是向大量新组织推广 IBM Accelerator for Machine Data Analytics,而每个组织都有自己的日志格式。他们预计要为分析准备多种日志。他们决定使用 BigInsights 工具,为分析加快数据的准备和测试。在准备好之后,他们会使用这些配置进行常规持续的分析。


加快机器数据分析的启动和运行体验

在本系列前面的教程和文章中,已使用过事先准备好的数据批处理,它们是可供下载的。在本教程中,您将准备一个数据批处理。准备批处理的工作包括识别记录边界和主时间戳,并创建规则来定义它们。 然后,此信息用于为批处理创建元数据。最后,您将测试准备好的批处理。

以下是在本文中要遵循的步骤:

  1. 查看流程,识别记录边界
  2. 如果有需要,可使用 BigInsights Eclipse 工具 提供第一条规划。它代表主时间戳之前的字符串。如果您不需要工具来帮助构建一个正则表达式,或者对使用 Eclipse 工具不感兴趣,那么请继续下一步 提供第二条规则
  3. 提供第二条规则。它代表主时间戳。
  4. 将规则放在一起,形成这种类型的日志的元数据。
  5. 如果您选择先在 Eclipse 上使用本地方式对少量数据进行测试,然后再将数据移动到 BigInsights 集群,那么请 使用 Eclipse 在本地为小数据测试规则
  6. 查看 使用 Eclipse 工具进行迭代测试和故障排除的提示
  7. 如果您选择在 BigInsights 集群上测试小数据,那么请 使用 BigInsights 控制台为小数据测试规则
  8. 查看 使用 BigInsights 控制台进行迭代测试和故障排除的提示
  9. 了解内幕
  10. 在大数据上运行

在 Sample Outdoors 公司

Sample Outdoors 公司的数据科学家通过 Web 工具组从前端应用程序获得机器数据,作为使用工具的一个练习。接下来,他们要准备数据,以便进行分析。


识别记录边界

记录边界包含两部分:

  • 主时间戳,应该在 Java SimpleDateFormat 中提供。
  • 主时间戳之前的字符串,应该以正则表达式的形式提供。

我们用一个 Apache Web Access 日志的示例来帮助复习这个过程。

步骤

  1. 下载 部分下载 data.zip。解压缩它。
  2. 检查所下载的 data/log.txt 文件的前几行。
    清单 1. 机器数据
    9.11.245.205 - - [23/Jul/2012:23:54:24 -0400] "GET 
    /innovation/us/watson/images/arrows/bg-nav-item-arrow-gray.png?1311756764 
    HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible;)"8308
    8.12.248.208 - advertising [23/Jul/2012:23:57:47 -0400] "GET 
    /innovation/us/watson/fonts/helveticaneue-webfont.eot HTTP/1.1" 200 2355 
    "http://www-03.ibm.com/innovation/us/watson/what-is-watson/a-system-designed-for
    -answers.html" 
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR
     2.0.50727; 
    .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; Tablet 
    PC 2.0)"2695
  3. 请注意,在上面的示例中有两个记录。两个记录的主时间戳分别是 23/Jul/2012:23:57:47 -0400 和 23/Jul/2012:23:54:24 -0400。
  4. 请注意,日志记录不是以主时间戳开始的。在它前面还有一个 IP 地址。有时候会有一个主机名,但大部分时间都没有。在记录中,主时间戳之前的字符串是:
    9.11.245.205 - - [
    8.12.248.208 – advertising [

接下来,您将建立代表记录边界的两个规则。


提供第一条规则

第一条规则包含主时间戳之前的字符串的正则表达式。您将使用 BigInsights Eclipse 工具帮助构建这个正则表达式。如果不需要使用工具来帮助构建一个正则表达式,或者对使用 Eclipse 工具不感兴趣,请继续下一步 提供第二条规则

步骤

  1. 从 Eclipse 中安装 BigInsights 工具的地方,单击 Open Regular Expression Generator Wizard 图标,如下面的 图 1 中的 Step 1 所示。
  2. 在向导中,单击 Load Samples from file 按钮,如 图 1 中的 Step 2 所示。选中已下载的 data/sampleforpretimestampregex.txt 文件。此文件包含一个样本列表,代表主时间戳之前的字符串。
  3. 选中显示该值的单选按钮:(\d{1,2}(\.)\d{2}\d?(\.)\d{2}\d?(\.)(\d{2,3}|\d{1,2})(\d{1,2})?( )(-)( )((advertising)|(-))( )(\[)),如 图 1 中的 Step 3 所示。
  4. 单击 Next 按钮。
    图 1. 生成正则表达式向导,第 1 页
    该图显示了上面给出的步骤

    点击查看大图

    图 1. 生成正则表达式向导,第 1 页

    该图显示了上面给出的步骤
  5. 默认的建议正则表达式如图 2 所示。
    图 2. 默认的建议正则表达式
    该图显示了正则表达式和样例
  6. 接下来,您将完善正则表达式,提供关于 IP 地址的一些已知的规则,例如数字的值可以在 0-255 之间。
    1. 在建议的正则表达式中,选中 \d{1,2},并选中 An Integer number within a certain range 的单选按钮。
    2. 提供一个最小值 0 和最大值 255,代表 IP 地址的规则,如 图 3 中的 Step 1 所示。
    3. 选中 Apply 以取代第一个突出显示的规则。
    4. 按照这个程序,迭代完成数字的所有规则,并对每个规则应用类似的更改。
    5. 您现在有一个正则表达式,它表示 IP 地址的有效数字。
    图 3. 在 IP 地址正则表达式中完善数字的规则
    该图显示了上面给出的用于正则表达式生成器的步骤
  7. 最后,将规则通用化,让它代表正确的有效字符串,而不是在样本中发生的 “advertising”。
    1. 选中 Next 按钮,直至单词 "advertising" 的正则表达式被突出显示,如 图 4 中的 Step 1 所示。
    2. 选中 Any of the symbols in this character class 单选按钮,其中字符类是 Lower case letters
    3. 为最小和最大字符数量分别提供 0 和 50 的值如图 4 中的 Step 2 所示。
    4. 单击 Apply 按钮,如图 4 中的 Step 3 所示。
    5. 代表所有可能的字符串的通用正则表达式将被显示为 \p{Ll}{0,50}
    图 4. 将正则表达式通用化
    正则表达式生成器显示了上面列出的步骤

    点击查看大图

    图 4. 将正则表达式通用化

    正则表达式生成器显示了上面列出的步骤
  8. 接下来,您将在完整的日志记录上测试生成的正则表达式。
    1. 单击 Import 按钮,如 图 5 中的 Step 1 所示。
    2. 选中已下载的 data/log.txt
    3. 请注意,正则表达式已经正确匹配所有字符串。
    4. 单击 Finish
    图 5. 在完整的记录上测试正则表达式
    该图显示了用于测试上面列出的正则表达式的步骤

    点击查看大图

    图 5. 在完整的记录上测试正则表达式

    该图显示了用于测试上面列出的正则表达式的步骤
  9. 您现在有了第一条规则的值(即时间戳之前的字符串),并且要将它放入 metadata.json。将剪贴板中的内容保存为一个文件。您将在 将规则放在一起 中使用它来创建元数据。

在构建或定制 AQL 规则时,使用工具生成正则表达式。在 第 2 部分:加快分析新的日志类型 中,您下载了为新的日志类型开发的预构建的 AQL 规则。作为一个扩展练习,请定制或添加日志类型,并使用工具构建您的 AQL 规则!


提供第二条规则

第二条规则代表主时间戳格式。

步骤

  1. 请参考 SimpleDateFormat 识别主时间戳的格式。
  2. 因此,代表 23/Jul/2012:23:54:24 -0400 的格式是:dd/MMM/yyyy:HH:mm:ss Z

您现在有了第二个规则的值 — 主时间戳。现在,您已经准备好创建元数据,以准备好批处理。


将规则放在一起

因为在本练习中只有一个批处理,所以将创建如下所示的 metadata.json 文件。

步骤

对于任何不同的日志:

  • 只需修改第一条和第二条规则。
  • 选择一种日志类型,或使用泛型。
  • 如果有需要的话,可添加其他任何元数据。

就是这样!

  1. 使用您最喜欢的编辑器,创建一个名称为 metadata.json 的文件,其内容如 清单 2 所示。
  2. 需要注意的是,在使用为 preTimestampRegex 字段生成的第一条规则之前,我们做了如下更改:
    • 在规则前添加了 ((\\n)|(\\r))+ ,以便在记录边界前包含换行符。
    • 在正则表达式中,避免使用 \ with \\。
  3. 我们使用了 dateTimeFormat 字段的第二条规则。
  4. 所使用的 logtype 字段是 webaccess。
  5. 关于应用程序名称的附加信息被添加到 application 字段。
清单 2. metadata.json 的内容
{logType:"webaccess", batchId:"batch_tools", 
dateTimeFormat:"dd/MMM/yyyy:HH:mm:ss Z", 
preTimestampRegex:"((\\n)|(\\r))+((25[0-5])|(2[0-4][0-9])|
(1[0-9][0-9])|([1-9][0-9])|([0-9]))(\\.)((25[0-5])|(2[0-4]
[0-9])|(1[0-9][0-9])|([1-9][0-9])|([0-9]))(\\.)((25[0-5])|
(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|([0-9]))(\\.)
((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|([0-9]))( )
(-)( )(\\p{Ll}{1,100}|(-))( )\\[", patternFieldParam:[], 
missingDateTimeDefaults:[], application:"toolsFrontEnd"}

使用 Eclipse 在本地为小数据测试规则

您将使用 Eclipse 在一个小数据集上测试规则。如果您选择在 Web 上使用 BigInsights Console 工具进行该测试,那么请跳到 使用 BigInsights Console 对小数据测试规则。为了测试规则,将会使用 Extraction App,它将执行记录拆分、字段提取、时间戳规范化和元数据合成,并会提供结果进行验证。在验证结果之后,就可以在 BigInsights 集群中更大的数据上使用这些规则。

步骤

  1. 如果还没有安装 Eclipse 和 Extraction App,请使用 掌握控制权!准备定制 (来自 第 2 部分:加快分析新的日志类型)完成该操作。
  2. 如果您还没有这样做,请确保您将 Text Analytics 设置为使用标准分词器,而不是多语种。
    1. Windows -> Preferences 展开 BigInsights 并选中 Text Analytics
    2. 选中 Show advanced tab in Text Analytics project property page,如图 6 所示。
      图 6. Text Analytics 设置
      该图显示了上面选中的设置
    3. 右键单击项目 MDAExtractApp 并选中 Properties
    4. 对于 Text Analytics,可选择 Use the default Standard tokenizer configuration
      图 7. 使用标准分词器配置
      该图显示了选中的默认标准分词器
  3. 关闭 JAQL 编辑器错误,因为在本教程中不需要使用该特性。从 Preferences 菜单中选择 BigInsights,并取消选中 Show JAQL errors 复选框。
  4. 在您的机器上创建一个首选目录,用于保存日志的批处理。在本练习中,我们将使用 C:/GOMDADemo/tools/input_batches/batch。
  5. 将 log.txt 和 metadata.json 复制到 batch 目录。
  6. 将已下载的 data/config/extract.config 复制到 c:/GOMDADemo/tools。
  7. 如果您从 Windows® 机器运行 Eclipse 实例,请继续该步骤。如果您从 Linux® 机器运行 Eclipse 实例,请跳到步骤 8。
    打开 src/jaql/custom_modules/LAExtract/LAExtract.jaql 并注释 getModuleDirectory 方法。添加方法,如清单 3 所示,它列出了从 Windows 运行需要使用的 getModuleVersion 版本。
    清单 3. 从 Windows 运行需要使用的 getModuleVersion 版本
    getModuleDirectory = fn() (
        if (startsWith(::_moduleDirectory, "file:"))(
            simpleStrReplace(::_moduleDirectory, 'file://', 'file:///')
        ) else (
            "file:"+ ::_moduleDirectory
        )
    );
  8. 现在,已准备好运行提取。由于提取应用程序需要使用 JAQL 自定义模块,所以您将使用 JAQL 工具测试应用程序。
    1. 右键单击 MDAExtractApp 并选中 Run As。选中 JAQL 并单击 New Configuration 图标。
    2. 在 JAQL Script 中选中 src\jaql\app\extractOverMultipleBatches.jaql
    3. 选中 Local 单选按钮。
    4. 在 JAQL Search path 路径中,选中 Add Default Path 按钮。
    5. 在 JAQL Search path 路径中,选中 Add from project 按钮并选中 src/jaql/custom_module,如图 8 所示。
      图 8. 作为 JAQL 运行的配置
      该屏幕截图显示了上面列出的 JAQL 主要设置
    6. 在 Arguments 选项卡中,提供如清单 4 所示的值。
      清单 4. 运行 JAQL 模式的参数
      -e "INPUT_LOG_FILES_DIR_PARM=\"c:/GOMDADemo/tools/input_batches 
      \";OUTPUT_BASE_DIR_PARM=\"file:///c:/GOMDADemo/tools/output/jaql/extract_out 
      \";PATTERN_FIELDS_PARM=\"LogDateTime\";NUM_REC_PARM=\"Top 
      2000\";EXTRACT_CONFIG_DIR_PARM=\"c:/GOMDADemo/tools/extract.config\";"
    7. 在对话框上单击 Run 按钮。
  9. 要查看结果,请转到输出位置 c:/GOMDADemo/tools/output/jaql/extract_out 并打开 batch_tools.csv。验证用 LogDateTime 表示的主时间戳的值、用 LogDateTimeNormalized 表示的规范化时间戳,以及用文本表示的记录是否正确。字段的其余部分特定于所选择的日志类型和传入的元数据,如应用程序。图 9 显示了结果:
    图 9. 验证样本数据提取的结果
    该屏幕截图显示了 LogDatetimeNormalized

使用 Eclipse 工具进行迭代测试和故障排除的提示

在尝试对新日志执行该操作时,让这些提示位于方便查阅的地方。

  1. 使用 InfoSphere BigInsights Information Center 中的说明建立 Eclipse 日志。
  2. 保持以下设置,并将其他设置修改为上面的链接中列出的设置。
    • jaql.root.logger.level=ERROR
    • jaql.status.logger.level=ERROR
  3. 所有错误都会显示在 Eclipse 控制台中。
  4. 要修复与规则有关的任何问题,只需修改在 metadata.json 中的值,并重新运行提取应用程序。

使用 BigInsights Console 为小数据测试规则

您可以使用 BigInsights Console Web 工具对小数据进行测试,然后在大数据上运行这些规则。

步骤

  1. 在 HDFS 中创建一个目录 /GOMDADemo/tools/input_batches/batch。
  2. 将 log.txt 上传到 batch 目录。
  3. 将在 将规则放在一起 中创建的 metadata.json 上传到 batch 目录。
  4. 使用以下参数运行提取应用程序:
    • Source directory - /GOMDADemo/tools/input_batches
    • Output path - /GOMDADemo/tools/output/console/extract_out
    保持其他所有默认值并选中 Run
  5. 要查看结果,请转至输出位置 /GOMDADemo/tools/output/console/extract_out 并单击 batch_tools.csv
    • >选中 Sheet 单选按钮并选中 Comma separated file 作为读取器。
    • 验证用 LogDateTime 表示的主时间戳的值、用 LogDateTimeNormalized 表示的规范化时间戳,以及用文本表示的记录是否正确。字段的其余部分特定于所选择的 logtype 和传入的元数据,如应用程序。再次参阅 图 9 的结果。

使用 BigInsights Console 进行迭代测试和故障排除的提示

在尝试对新日志执行该操作时,让这些提示位于方便查阅的地方:

  • 错误将被记录在 /GOMDADemo/tools/output/jaql/extract_out/__temp 中。
  • 要修复与规则有关的任何问题,只需修改在 metadata.json 中的值,并重新运行提取应用程序。

了解内幕

提取应用程序包含一个自定义 JAQL 模块。然后,JAQL 模块使用以 AQL 编写的规则执行记录拆分、字段提取、时间戳规范化,等等。

BigInsights text 文本分析工具让您可以每次在一个记录上测试 AQL 字段提取规则。您在 工具一览 中已使用过此工具(参阅 第 2 部分:加快分析新的日志类型)。

从 BigInsights 控制台 Web 工具或者 Eclipse 使用 JAQL 配置运行提取应用程序,让您可以测试提取应用程序的整个流程。提取应用程序执行记录拆分、字段提取、主时间戳规范化,以及元数据合成,这是进一步分析的构建块。

您现在已经准备好在集群上对更大的数据使用随 Machine Data Accelerator 一起安装的提取应用程序。


在更大的数据上运行

如果您以本地方式在 Eclipse 上进行测试,以便在更大的数据上执行分析,那么首先需要复制元数据,如 使用 BigInsights Console 为小数据测试规则 中所述。将更大的数据,而不是小数据添加到批处理中,并从 BigInsights 集群使用随 IBM Accelerator for Machine Data Analytics 安装的提取、索引和其他应用程序。请参阅 第 3 部分:加快机器数据搜索

随着越来越多的同类型的数据变为可用数据,您需要定期分析数据,并使用此元数据创建一个模板,使用该模板运行 MDAGenerateMeta.sh。有关 MDAGenerateMeta.sh 的更多信息,请参阅第 1 部分中的 开始前的一点准备​​。


结束语

在本教程中,您已经学会了如何使用工具来准备用于分析的 Web 访问日志类型,还了解了可供选择的执行准备和迭代测试,您可以使用 Eclipse 以本地方式或在 BigInsights 控制台上使用工具。

在 Sample Outdoors 公司,除了开箱即用的日志类型之外,许多新的日志类型可以使用上述过程加快数据准备,以便对数据进行分析。此外,他们在创建自己的日志类型时也使用了上述工具,如 第 2 部分:加快分析新的日志类型 所示。


致谢

感谢 Thomas Friedrich 和 Laura Chiticariu 的技术审查。感谢 Robin Noble-Thomas 在 BigInsights 工具方面的帮助,还要感谢 Marcel Kutsch 在 JAQL 方面的帮助。感谢对此特性作出贡献的所有 Machine Data Accelerator 团队成员。


下载

描述名字大小
本教程的数据文件data.zip2.17KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=951035
ArticleTitle=IBM Accelerator for Machine Data Analytics,第 4 部分: 加快多种数据的启动和运行体验
publish-date=11012013