使用 InfoSphere BigInsights 开发、发布并部署您的第一个大数据应用程序

开发您的第一个大数据应用程序并在分布式计算环境中部署它并不是一项艰巨的任务。了解如何使用针对 InfoSphere® BigInsights™ 的基于 Eclipse 的工具加快应用程序开发,打包应用程序以便在基于 Web 的目录中发布它,并且部署您的应用程序,以便企业员工和其他人可以轻松地启动该应用程序。

Cynthia M. Saracco, 高级解决方案架构师, IBM

照片:Cynthia SaraccoCynthia M. Saracco 是 IBM 硅谷实验室的高级解决方案架构师,擅长新兴技术和数据库管理主题。她有 23 年软件行业从业经验,曾经撰写了三本书和 60 多篇技术文章,拥有七项专利。


developerWorks 大师作者

Daniel Kikuchi, 执行 IT 专家, IBM

Daniel KikuchiDaniel Kikuchi 是 IBM Big Data Development Enablementis 团队的一名执行 IT 专家。他已为客户成功完成了多次 WebSphere、Lotus 和大数据概念证明,演示了 IBM 软件如何实现其业务目标。他在美国北卡罗来纳州三角研究园区 (Research Triangle Park, N.C.) 工作,是 Open Group 的一名杰出 IT 专家。



Thomas Friedrich, 资深软件工程师, IBM

Thomas Friedrich 的照片Thomas Friedrich 是加利福尼亚州圣何塞市 IBM 硅谷实验室 Information Management Administration Tooling 团队的一名资深软件工程师。他拥有德国莱比锡应用技术大学的计算机科学硕士学位。他目前的开发职责是开发复制的工具支持。在此之前,他研究 Rational Data Architect 和 DB2 Developer WorkbenchBefore 的存储过程和用户定义函数的工具支持。



2012 年 12 月 17 日

免费下载:IBM® InfoSphere BigInsights Basic Edition V1.3 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

如果您刚接触大数据应用程序开发并且想要快速进行开发,那么您可能希望了解 IBM InfoSphere BigInsights Enterprise Edition(一个基于开源 Apache Hadoop 项目的平台)提供的工具。BigInsights Eclipse 工具包括向导、代码生成器、上下文相关的帮助,以及一种简化开发工作的测试环境。使用这些工具,您可以在 BigInsights 基于 Web 的目录中快速 “发布” 应用程序。然后,您可以使用 BigInsights Web 控制台在集群上部署应用程序,以便授权用户可以启动该应用程序。

本文介绍 BigInsights 应用程序开发生命周期,并介绍如何使用最少的工作创建、发布和部署您的第一个简单应用程序。您还可以了解稍后如何升级到具有新功能的应用程序并重新部署该应用程序。

您构建的应用程序将使用 Jaql(一种查询和脚本编写语言,使用的是一种基于 JSON 的数据模型)从一个社交媒体站点检索有关 IBM Watson 研究项目的数据,处理该信息,并在您的分布式文件系统中存储结果。在这里我们不会详细介绍 Jaql,在另一篇文章中会详细介绍它(参见 参考资料 部分了解详细信息)。但是,这里介绍的许多 BigInsights 应用程序开发技巧并不是特定于 Jaql 的。实际上,BigInsights 工具和样例可以帮助您创建各种应用程序和软件组件,包括 Java MapReduce、Hive、Pig 和文本分析。

背景知识

BigInsights 是一个软件平台,旨在帮助组织发现并分析隐藏在大量不同数据类型中的业务洞察 — 这些数据通常会被忽略或丢弃,因为它太不切实际,或者是使用传统方法难以处理这些数据。此类数据示例包括社交媒体数据、新闻提要、日志记录、点击流、电子传感器输出,以及一些事务性数据。

为了帮助公司从这些类型的数据中有效地获取价值,企业版的 BigInsights 包含了几个开源项目,包括 Apache Hadoop 和一些 IBM 开发的技术。Hadoop 及其补充性项目为数据密集型应用程序提供了一种有效的软件框架,可利用分布式计算环境实现高可扩展性。 BigInsights 企业版随附提供的 IBM 技术极大地丰富了此开源框架,为该框架提供了分析软件、企业软件集成、平台扩展和工具。IBM 提供的技术包括基于 Web 的应用程序目录和进行应用程序开发的 Eclipse 工具。有关 BigInsights 的更多信息,请参见 参考资料 部分。

通过 BigInsights Web 控制台的 Applications 选项卡可访问应用程序目录,它包括几个 IBM 提供的样例应用程序和管理员已添加的任意第三方或用户编写的应用程序。图 1 在左侧展示了应用程序目录的子集。在目录中发布的所有应用程序都有一个图标和一个名称。图标左上角的三角形表示还未在 BigInsights 集群上部署该应用程序。(在 图 1 中,还未部署 Ad hoc Hive queryAd hoc Pig query 应用程序。)

当用户选择了要运行的应用程序后,会在右上角的窗格中显示一个启动面板。在目录中发布的所有应用程序具有一个一致的界面,用户可在其中指定相应的调用信息。此类信息包括所有必需的输入参数、应用程序运行的执行名以及调度信息等。图 1 还显示了用于即席 Jaql 查询应用程序的此信息的子集。右下角是有关该应用程序执行的历史记录信息。

图 1. BigInsights Web 控制台的 Applications 选项卡
该屏幕截图显示了 Web 控制台

在本文中,您将了解如何在此目录中发布应用程序和控制应用程序启动所需的信息。您还可以从目录中启动应用程序并检查结果(可选)。


准备开发您的第一个应用程序

要使用 Eclipse 开始开发 BigInsights 应用程序,请下载必备的 Eclipse 版本和 Eclipse Data Tools 平台。如果需要,查阅产品的信息中心了解详细信息。参考资料 部分提供了产品 InfoCenter 的链接,以及 Eclipse 的下载站点。对于我们的测试场景,我们在 Linux® 系统上安装了 Eclipse Helios Service Release 2 和 Eclipse Data Tools 1.9.1.x。(尽管可以使用基于 Windows® 的 Eclipse 环境执行 BigInsights 应用程序开发任务,但是 步骤 3:测试应用程序 需要 Linux 或 UNIX® Eclipse 安装。)我们的目标 BigInsights 部署环境是 BigInsights Enterprise Edition 1.4。

安装了 Eclipse 环境并且访问 BigInsights Enterprise Edition 服务器后,启动 BigInsights Web 控制台。在 Welcome 选项卡的 Quick Links 部分,单击 Enable your Eclipse development environment for BigInsights application development,如 图 2 所示。将出现一个新窗口,显示下载 BigInsights 工具并将它安装到 Eclipse 环境的详细说明。

图 2. 有关配置 BigInsights Eclipse 工具的 Web 控制台链接
该屏幕截图显示了 Web 控制台的 Welcome 页面的快速链接部分

启动 Eclipse 时,一个新的 BigInsights 透视图将会可用。此透视图提供 InfoSphere BigInsights Task Launcher,引导您完成各种任务。Task Launcher 的 Overview 选项卡(如 图 3 所示)是一个很好的起点。但是,对于本文来说,大部分时间您将使用通过 Develop applications 选项卡启动的向导,如 图 4 所示。

图 3. Eclipse 中 InfoSphere BigInsights Task Launcher 的 Overview 选项卡
该屏幕截图显示了 BigInsights Task Launcher
图 4. BigInsights Task Launcher 的 Develop applications 选项卡
该屏幕截图显示了 Develop applications 选项卡

使用 BigInsights 工具配置了 Eclipse 环境后,就可以开发您的第一个 BigInsights 应用程序了。

为了与之前发布的 BigInsights 文章保持一致,您将开发一个简单的应用程序来支持涉及 IBM Watson 的一个社交媒体分析场景。IBM Watson 是一个研究项目,通过执行复杂的分析来回答使用自然语言提出的问题。之前关于 Jaql 的一篇文章介绍了如何从社交媒体网站检索少量与 IBM Watson 相关的最新信息,筛选并转换感兴趣的信息,以及将这些信息写入分布式文件系统中(参见 参考资料 部分)。尽管此 Jaql 场景非常简单且不适合收集大量社交媒体数据供生产使用,但它是介绍 BigInsights 应用程序开发、发布和部署流程的一种可行方式。因此,为了帮助您专注于目前的任务,假设您想要将 Jaql 逻辑编码到应用程序中,这样,业务用户不必编写 Jaql 查询即可获得有关 IBM Watson 的最新信息。


步骤 1:创建 BigInsights 项目

正如您对任何基于 Eclipse 的应用程序开发工作所期望的那样,您需要为应用程序创建相应的项目。下面是一种方法:

  1. 如果需要,启动 Eclipse 并打开 BigInsights 透视图(单击 Window > Open Perspective > BigInsights)。
  2. 如果需要,调用 BigInsights Task Launcher(单击 Help > InfoSphere BigInsights Task Launcher)。单击 Develop applications 选项卡。屏幕应类似于 图 4 所示。
  3. 在右上角的 Quick Links 部分单击 Create a BigInsights 项目链接。出现提示时,将项目命名为 GetMessages 并单击 Finish。新项目将出现在 Project Explorer 窗格的左侧。参见 图 5
    图 5. BigInsights Project Explorer 窗格,突出显示了新的 GetMessages 项目
    该屏幕截图显示了新项目

步骤 2:创建应用程序逻辑并使用 Jaql 文件填充它

由于您正在编写 Jaql 应用程序,因此您需要在新项目中创建一个 Jaql 文件,并包含相应的 Jaql 语句。在这一部分中,您将编写一个没有输入参数的简单 Jaql 应用程序。稍后,您将升级此应用程序,以使其变得更加灵活并在启动时接受用户输入。

要编写此应用程序:

  1. 从 BigInsights Task Launcher 的 Tasks 部分(如 图 4 所示)中,单击 Create a file to contain Jaql
  2. 当出现提示时,选择 GetMessage 项目作为文件的父文件夹,并输入 MyJaql 作为文件名(参见 图 6)。单击 Finish
    图 6. 使用 BigInsights 向导创建 Jaql 文件
    该屏幕截图显示了创建 Jaql 文件
  3. 清单 1 中的 Jaql 代码剪贴到出现在新窗格中的文件中。(如果愿意,您可以省略评论。您还需要在清单末尾的 Jaql write() 函数调用中指定另一个目录。)
    清单 1. 您的第一个应用程序的 Jaql 代码
    // Query Twitter for the 15 most recent messages about "IBM Watson" 
    tweets = read(http("http://search.twitter.com/search.json?q=IBM+Watson"));
                            
    // Get the current system time 
    time=now(); 
                            
    // Extract selected fields from JSON data returned by Twitter 
    tweetRecords = tweets[0].results -> 
                    transform { created_at: $.created_at,
                            geo: $.geo,
                            id: $.from_user_id_str,
                            iso_language_code: $.iso_language_code,
                            text: $.text };
                            
    // Write the results of the Jaql query as a delimited file in HDFS.
    // Change the directory shown here to fit your environment.  
    // Call dateMillis() function to append unique time to file name.   
    // Wrap with serialize() to cast function results as a string. 
    tweetRecords -> write(del("/user/idcuser/sampleData/twitter/WatsonTweets" + 
    serialize(dateMillis(time)) + ".del", 
    schema=schema {created_at, geo, id, iso_language_code, text}));

    简单地说,第一个语句使用表达式定义 tweets 变量,该表达式通过访问基于 REST 的 Twitter 服务检索有关 “IBM Watson” 的 15 条最新的 Twitter 帖子。第二个语句使用返回当前系统时间的表达式定义 time 变量。第三个语句定义 tweetRecords 变量,使用 Jaql 表达式提取并转换 tweets 表示的第一个数组元素中包含的信息。在此数组中的第一个元素中,有一个 results 数组,包含从 Twitter 检索的 JSON 数据,这是一个我们特别感兴趣的子集。最后一个语句编写查询结果,由 tweetRecords 表示,正如特定路径中的分隔文件由 BigInsights 分布式文件系统托管一样。文件名以 WatsonTweets 开始,随后是一个以毫秒表示当前系统时间的字符串;文件的扩展名是 .del。模式信息定义新编写的文件中新 JSON 记录包含的字段。

  4. 保存文件(单击 Ctrl > S。)

步骤 3:测试应用程序

要测试应用程序,定义到现有 BigInsights 集群的连接并配置应用程序的运行时属性。(在撰写本文时,本步骤需要安装 Linux 或 UNIX Eclipse。)

按照下列步骤测试应用程序:

  1. 从 BigInsights Task Launcher 的 Quick Links 部分中,单击 Create a BigInsights server connection 链接。
  2. 当出现提示时,指定 BigInsights Web 控制台的 URL。提供所选的服务器名称,并输入有效的 BigInsights 用户 ID 和密码。参见 图 7,该图显示了 BigInsights 集群(未配置到 Web 控制台的 SSL 访问)的样例连接属性。(默认情况下,基于 SSL 的安装的 URL 与 https://myserver.ibm.com:8443 类似。)根据需要,单击 Test connection 按钮验证您是否可以连接到刚才定义的 BigInsights 服务器。单击 Finish
    图 7. 定义 BigInsights 服务器连接
    该屏幕截图显示了服务器连接
  3. 从 BigInsights Task Launcher 的 Develop applications 选项卡的 Tasks 部分中,单击 Create a configuration and run a Jaql program
  4. 当出现提示时,输入所需的输入参数。指定所选的配置名称。选择 GetMessages 作为项目名称,并选择 MyJaql.jaql 作为 Jaql 文件名。选择您刚刚创建的 BigInsights 服务器连接名称,并接受其他字段的默认值(参见 图 8)。单击 Apply,然后单击 Run
    图 8. 配置并运行 Jaql 应用程序
    该屏幕截图显示了 Jaql 应用程序配置
  5. 检查 Eclipse 控制台窗格的输出并确认没有报告错误。图 9 显示了应该出现的样例输出的子集。
    图 9. Eclipse 控制台显示应用程序的输出
    该屏幕截图显示了在 Eclipse 控制台中显示的 Jaql 应用程序输出
  6. 根据需要启动 BigInsights Web 控制台。从 Files 选项卡中,浏览整个分布式文件系统以查找应用程序创建的新文件。(图 9 的 location 字段提供了完整的路径和文件名。)

此外,定义了 BigInsights 服务器连接并创建了 Jaql 程序运行配置后,可以快速从 MyJaql.jaql 文件直接测试 Jaql 语句。只需突出显示感兴趣的 Jaql 语句,右键单击并选择 Run the Jaql statement 即可。


步骤 4:在 BigInsights 目录中发布应用程序

测试了应用程序并确认它按预期运行后,就可以在 BigInsights 应用程序目录中发布它了。打包您的应用程序并发布它,这会允许您确认应用程序的图标和名称,定义应用程序的工作流,指定输入参数,并执行相关任务。

下面是发布该应用程序的方式:

  1. 从 BigInsights Task Launcher 的 Tasks 部分中,单击 Package and publish an application 链接。将出现一个向导,引导您执行后续步骤。
  2. 当出现提示时,指定 GetMessages 项目名称,选择 BigInsights 服务器连接名称并单击 Next。(根据安全配置,可能会提示您输入 BigInsights 用户 ID 和密码。)
  3. 选择 Create New Application 单选按钮,并将 GetMessages 指定为应用程序的名称。根据需要,提供简单的描述,并将本地文件系统中的一个图标文件(JPEG、GIF 或 PNG 格式)指定为应用程序的图标。(我们从 IBM 网站下载了与 IBM Watson 相关的一张图像。如果愿意,您可以使用提供的默认图像。)您还可以指定一个或多个应用程序类别,比如 “test”(参见 图 10)。准备好后,单击 Next
    图 10. 在发布之前指定基本的应用程序信息
    应用程序信息
  4. 对于应用程序的工作流,接受默认值后,向导会创建新的单一操作 workflow.xml 文件。但是,使用下拉菜单将工作流类型更改为 Jaql,如 图 11 中的中间区域所示。此外,突出显示脚本属性并编辑它,在出现提示时指定 Jaql 文件的名称 (MyJaql.jaql)。确认屏幕类似于 图 11 所示,并且 Value 列中的文件名为 MyJaql.jaql。单击 Next
    图 11. 指定应用程序的工作流参数
    该屏幕截图显示了工作流参数
  5. 接受 Parameters 页面的默认值,因为您的应用程序的这一版本没有包含任何输入参数,然后,单击 Next)。
  6. 在向导的最后一页,确认 MyJaql.jaql 文件显示在应用程序包的 workflow 文件夹下,并单击 Finish。现在,您已经发布了您的第一个 BigInsights 应用程序。

步骤 5:在集群上部署并运行应用程序

在 BigInsights 目录中发布了应用程序后,管理员可以在集群上部署它并授权用户启动它。本部分假设您拥有 BigInsights 相应的管理特权,并引导您完成应用程序部署过程。

要在 BigInsights 上部署并运行应用程序:

  1. 启动 Web 控制台并单击 Applications 选项卡。
  2. 找到您的 GetMessages 应用程序,如 图 12 所示。(您的应用程序的图标可能与此处所示的不同。我们从与 IBM Watson 相关的网站下载了一个特定的 JPEG 文件用于此应用程序。)注意,应用程序图标的左上角会出现一个黄色的三角形,表示还未在集群上部署该应用程序。
    图 12. 在 BigInsights 目录中显示您的新应用程序
    该屏幕截图显示了 BigInsights 目录中的应用程序
  3. 单击应用程序。在右上角将显示应用程序的启动面板(参见 图 13)。单击 Deploy,在集群上部署该应用程序。
    图 13. 准备部署已发布的应用程序
    该屏幕截图显示正在部署应用程序
  4. 单击应用程序配置按钮(位于 Delete 按钮的右侧,如 图 13 所示)。将出现一个弹出窗口,允许您指定应用程序的安全限制。选择所有可用的组并单击 Save。现在,所有 BigInsights 用户都能够启动您的应用程序。用户还可以定期运行应用程序,方法是展开 Schedule and Advanced Settings 对话框,如 图 13 中部所示。
  5. 在集群上测试您的应用程序。在应用程序的启动窗格中指定 Execution Name,比如 Test-GetMessages(如图 Figure 13 所示),并单击 Run
  6. 检查右下角的 Application History 部分以监控作业的进度。根据需要,在作业完成时,单击 Details 部分的箭头(如 图 14 所示)以显示有关工作流和作业的更多信息。
    图 14. Application History 窗格显示应用程序的运行进度
    该屏幕截图显示应用程序的历史记录
  7. 如果需要,单击 Web 控制台的 Files 选项卡,并找到应用程序创建的文件。如果单击该文件,您将看到在右侧的窗格中以文本格式显示该文件。根据需要,从该文件创建一个 BigSheets 集合,将逗号分隔值 (comma-separated values, CSV) 指定为阅读器类型 (reader type),并取消选中 Headers included 框。如果需要,请参见 参考资料 部分,查看如何创建和分析 BigSheets 集合的文章。

步骤 6:升级应用程序

现在,我们将升级应用程序以使其变得更加灵活。具体地讲,我们将应用程序更改为接受两个输入参数:提交到 Twitter 的搜索词和存储应用程序结果的文件名。

  1. 取消从 BigInsights 目录部署应用程序。从应用程序的启动窗格中,单击 Undeploy。(为了能够使用新版本替换应用程序,需要首先取消部署该应用程序,确保在尝试替换应用程序时没有用户在运行它。)
  2. 在 Eclipse 中,如果需要,请创建 GetMessages 项目的备份副本。然后,返回到 GetMessages 项目并编辑 MyJaql.jaql,如 清单 2 所示。忽略可能出现的任何错误,因为在稍后发布该应用程序时会解决这些问题。保存您的文件。
    清单 2. Jaql 代码的修订版
    // Block 1
    // Declare external variables 
    extern TERM;
    extern OUTPUT;
                            
    // Search term (provided by user)
    term=[TERM];
                            
    // Full path + file name for output (provided by user)
    output=[OUTPUT];
                            
    // Block 2 
    // Query Twitter for recent messages about user-supplied search term
    // Note that a multi-word term needs to conform to the search engine's syntax
    // E.g., instead of IBM Watson, a user would need to enter IBM+Watson   
    tweets = read(http("http://search.twitter.com/search.json?q="+term[0]));
                            
    // Extract selected fields from JSON data returned by Twitter 
    tweetRecords = tweets[0].results -> 
                    transform { created_at: $.created_at,
                            geo: $.geo,
                            id: $.from_user_id_str,
                            iso_language_code: $.iso_language_code,
                            text: $.text };
                            
    // Block 3 
    // Write to results of social media query as a delimited file
    tweetRecords->write(del(output[0], 
    schema=schema {created_at, geo, id, iso_language_code, text}));

    Block 1 声明两个外部变量(TERMOUTPUT),表示输入参数将变为此应用程序用户界面的一部分。并会向每个 Jaql 变量(termoutput)分配一个参数。Block 2 将用户提供的搜索词(term)纳入了提交到 Twitter 的查询。Block 3 使用用户提供的输出文件信息 (output) 来将结果写入分布式文件系统中。要使此 Jaql 代码正常工作,在重新打包并发布应用程序时,必须指定相应的输入参数。此操作很快就能完成。

  3. 在 Project Explorer 窗格中找到您的项目。右键单击并选择 BigInsights Application Publish 以启动发布向导。(此外,可以从 BigInsights Task Launcher 启动此向导,如 “步骤 4:在 BigInsights 目录中发布应用程序” 部分所述。)
  4. 选择与首次发布应用程序时相同的 BigInsights 服务器,然后单击 Next
  5. 在 Specify Application 页面上,确认选中了 Replace Existing Application 按钮。根据需要更改应用程序的描述。接受其余项的现有值并单击 Next
  6. 在 Workflow 菜单上,选择单选按钮以创建新的单一操作 workflow.xml 文件。(由于您正在引入新的输入参数,因此无法接受使用现有工作流的默认值。)
  7. 按照之前介绍的过程为名为 MyJaql.jaql 的 Jaql 脚本创建工作流(参见 图 11)。
  8. 选择 New 为工作流输入新属性。当新窗口出现时,使用 Name 字段的下拉菜单选择 evaleval 属性中的 Jaql 表达式在提供的 Jaql 脚本前面运行,并且可用于向在 Jaql 脚本中定义的外部变量分配值。对于我们的应用程序,向 eval 属性分配 清单 3 中所显示的值。
    清单 3. 为应用程序工作流设置输入属性值
    TERM="${jsonEncode(term)}";OUTPUT="${jsonEncode(output)}";

    简单来说,当运行应用程序时,我们想要提供变量 TERMOUTPUT 的值(包含在 清单 2 中)。为此,我们必须为每个 Jaql 变量分配一个 Oozie 变量。Oozie 用作执行应用程序的工作流引擎。Oozie 参数包含在 ${} 中。为了能够轻松地将 Oozie 变量和 Jaql 参数关联起来,我们为 Oozie 参数术语和输出使用相同的变量名称(所有均为小写字母)。建议使用 jsonEncode 函数编写用户通过 Web 控制台提供的输入代码,以避免出现特殊字符并避免代码注入。有关在 Jaql 应用程序中如何指定参数的详细信息,请参见 参考资料 部分中 BigInsights InfoCenter 的链接。

    完成之后,您的屏幕应该类似于 图 15 所示。

    图 15. 在 eval 属性中指定 Jaql 表达式
    该屏幕截图显示了 eval 属性的设置

    单击 OK,然后单击 Next

  9. 请注意,在 Parameters 页面上列出了在前一个工作流页面中指定的所有 Oozie 参数(在本例中,参数名为 term 和 output)。您需要选择每个参数并编辑其属性,以提供在 Web 控制台用户界面中如何显示每个参数和显示哪种参数类型的信息。
  10. 编辑 term 参数。将其显示名设置为 Search term,并将其类型设置为 String。将 IBM+Watson 指定为默认值。如果需要,请提供简单的描述。确保选中 Required 框并单击 OK
  11. 编辑 output 参数。将其显示名称设置为 Output file,并将其类型设置为 File Path。如果需要,请提供简单的描述。确保选中了 Required 框并单击 OK
  12. 完成编辑后,确认 Parameters 页面类似于 图 16 所示。单击 Next,然后单击 Finish
    图 16. 应用程序参数列表
    该屏幕截图显示了应用程序参数的列表
  13. 在 BigInsights Web 控制台上刷新应用程序目录页面,然后部署应用程序的更新版本。
  14. 配置应用程序,以便所有用户都能访问它(单击 Delete 按钮右侧的应用程序配置按钮,如 图 13 所示。当出现弹出窗口时,设置其安全特征;具体地讲,选择所有可用的组并单击 Save。)
  15. 启动您的应用程序。注意,现在您的应用程序希望用户指定一个搜索词或短语并提供 IBM+Watson 的默认值。此外,您的应用程序希望用户指定一个输出文件。如 图 17 所示,如果您提供了任何一个输入参数的描述,那么当用户将鼠标悬停在字段上时,此描述将显示上下文相关的帮助信息。
    图 17. 显示所需输入参数的新应用程序版本
    该屏幕截图显示了新应用程序版本
  16. 指定应用程序的执行名,比如 Test-GetMessages-New。此外,指定应用程序输出的路径和文件名。可使用 Output file input 字段旁边的 Browse 按钮,并选择分布式文件系统中的一个现有文件。或者是使用文件位置手动更新输入字段。接受 IBM+Watson 的默认搜索词,并运行您的应用程序。
  17. 根据需要,在成功执行应用程序后,检查分布式文件系统以找到输出文件。为此,单击 Files 选项卡并导航到输出文件的指定位置。
  18. 根据需要,返回到 Eclipse 中的 GetMessages 项目。展开 BIApp > application folder 并双击 BigInsights 工具生成的 workflow.xml 文件。检查文件的内容。使用 XML 编辑器的 Design 选项卡,展开 workflow > action > jaql 部分。注意,此处反映了之前为工作流属性(包括 scripteval)设置的值。类似地,检查 BigInsights 工具生成的 application.xml 文件。您会在项目的 BIApp > application 文件夹中找到此文件。双击该文件以显示其内容。使用 XML 编辑器的 Design 选项卡,展开 application-template > properties > property 部分。注意,此处反映了您为两个输入参数设置的值。

诊断运行时应用程序问题

为了演示如何诊断问题,请再次运行应用程序,但是请提供将导致此应用程序失败的一个输入参数。

启动应用程序,接受搜索词的默认值。对于输出文件,在 BigInsights 用户没有写入权限的分布式文件系统目录下输入文件名。例如,如果您作为 user1(“user” 组的一名成员)登录到了一个安全的 BigInsights 集群,那么请在目录 /user/biadmin/ 下指定一个文件,或者是使用除 user1 外的任意其他用户 ID 指定该文件。然后,单击 Run 再次执行该应用程序。应用程序执行完之后,则应该在 Application History 部分中将状态显示为红色错误图标(参见 图 18)。

图 18. 应用程序发生错误
该屏幕截图显示了应用程序失败

根据错误的类型,有关造成其失败的信息将显示在应用程序工作流的不同区域。应用程序工作流启动运行至少一项作业的一个或多个操作。每项作业执行一个或多个任务,而每个任务由至少一次任务尝试组成。BigInsights Web 控制台允许您下钻到每个级别,并访问日志和可帮助您诊断问题的其他文件。

为了深入了解工作流的详细信息,单击 Application History 部分中工作流的 Details 列下面的箭头。工作流摘要显示了有关工作流的一些基本信息,列出了运行的所有部分,并提供工作流配置文件、日志文件和作业详细信息的切入点(参见 图 19)。

图 19. 工作流摘要
该屏幕截图显示了工作流摘要

左上角的 Workflow Configuration 按钮打开了使用工作流配置的对话框。除了 Oozie 配置设置的属性,文件还包含在运行应用程序之前由用户提供的参数值。在我们的示例中,确认在配置中设置了正确的属性输出和术语的值(参见 图 20)。

图 20. 工作流配置
该屏幕截图显示了工作流配置

确认所有值都传入 Oozie 工作流后,可以单击 Workflow Log 按钮来访问工作流的日志文件,或者是单击屏幕中部表格行的任意位置来查看有关工作流特定操作的信息。在我们的示例中,工作流只有一个 Jaql 操作。操作信息提供了错误代码、信息和有关工作流操作的详细信息(参见 图 21)。根据操作类型,信息的详细程度可能不同。在一些示例中,此对话框可能显示一些问题,但是在 Jaql 操作中,信息太概括了,无法准确地说明造成问题的原因。但是,在提交了带有工作流配置实际值的 Oozie 参数后,我们可以确认 eval 属性中的 Jaql 表达式是有效的 Jaql 语句。

图 21. 失败的 Jaql 操作的错误代码、消息和操作信息
该屏幕截图显示了 Jaql 错误信息

由于工作流级别的信息无法确定问题,因此我们需要查看 Jaql 操作的各个作业并下钻到详细的任务尝试日志。要查看作业详细信息视图,单击 Jaql 操作的 Job Details 列中的箭头(参见 图 19)。Jobs 视图将显示一个包含所有操作作业的列表(参见 图 22)。在我们的示例中,操作由一个作业组成。要查看作业的所有任务,在作业行的任意位置单击。根据类型(setup、map、reduce 和 cleanup)对任务进行分类,并且您可以单击任何行以查看其详细信息。单击行以获得 map 任务并进一步了解其详细信息,直到到达尝试日志级别为止。

图 22. 详细的作业和任务信息
该屏幕截图显示了详细的作业和任务信息,该信息展示了 map 任务

每次尝试的日志包含在不同的部分中。stdout 部分包含环境信息,比如类路径、Java 系统属性和 Oozie 操作配置。而且在 Jaql 操作中,还会包含 Jaql 命令参数。会在 stderr 部分中列出错误信息。如果没有出现任何错误,这部分则是空白的。但是,在我们的示例中,我们看到了一个带有错误消息的堆栈跟踪(参见 图 23)。由于我们在用户没有写入权限的文件夹中指定了一个输出文件,因此应用程序会失败并显示 AccessControlException: Permission denied error

图 23. 尝试日志显示错误信息
该屏幕截图显示了日志中的错误信息

结束语

为简化大数据应用程序开发,BigInsights 企业版提供了 Eclipse 工具(插件),该工具具有向导、代码生成器、上下文相关的帮助和一个测试环境。本文概述了 BigInsights 应用程序的开发生命周期,展示了如何快速地开发、测试、发布和部署您自己的大数据应用程序。您还可以学到如何轻松地升级应用程序来满足新的需求,如何发布这些更新,以及如何在 BigInsights 集群上部署应用程序的新版本。

致谢

衷心感谢撰写和审校本文的人:Anshul Dawra、Nicolas Morales、Michael Nobles 和 Robin Noble-Thomas。

参考资料

学习

获得产品和技术

  • 使用 IBM 试用版软件 构建您的下一个开发项目,可直接从 developerWorks 下载它们。
  • 现在您可以免费使用 DB2。下载 DB2 Express-C,这是一个面向社区的免费 DB2 Express Edition 版本,提供了与 DB2 Express Edition 相同的核心数据功能,为构建和部署应用程序奠定了坚实的基础。

讨论

条评论

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=851118
ArticleTitle=使用 InfoSphere BigInsights 开发、发布并部署您的第一个大数据应用程序
publish-date=12172012