Storm 官方提供了入门代码(Storm starter),即 Storm安装教程 中所运行的实例(storm-starter-topologies-0.9.6.jar),该入门代码位于 /usr/local/storm/examples/storm-starter/ 中,包含多个例子,对于学习 Storm 很有帮助。同时官方也有给出了详细的使用说明(上述目录下的 README.markdown 文件),本教程基本是按照官方使用说明来介绍如何使用 Maven 来编译代码,以运行于 Storm 中。

Maven介绍

Maven 是现在 Java 社区中最强大的项目管理和项目构建工具。我们在开发项目的过程中,会使用一些开源框架、第三方的工具等等,这些都是以 jar 包的方式被项目所引用,并且有些 jar 包还会依赖其他的 jar 包,我们同样需要添加到项目中,所有这些相关的 jar 包都会作为项目的依赖。通常,一个 Java EE 项目所依赖的 jar 包会有很多。然而,这还并非是主要问题,在管理这些 jar 包过程中,jar 包的版本往往是最令人头疼的问题。选择一个 jar 包的版本,需要考虑它所依赖的 jar 包是否支持这个版本,并且还需要确认依赖它的 jar 包能不能对这个版本兼容,难以进行部署与管理。

Maven 的出现,解决了开发过程中的这一难题。它可以对项目依赖的 jar 包进行管理,可以让你的项目保持基本的依赖,排除冗余 jar 包,并且可以让你非常轻松的对依赖的 jar 包进行版本升级。而这些仅仅是 Maven 最基本的功能,它可以在这基础上对项目进行清理、编译、测试、打包、发布等等构建项目的工作。

Maven 是通过 pom.xml (Project Object Model,项目对象模型)来对项目进行配置的,可以查看 storm-starter 目录下的 pom.xml 来查看运行该入门代码所需的各种 jar 包。

Maven安装

Maven的官方下载地址为http://maven.apache.org/download.cgi,直接下载地址为:http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz 或http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

下载后执行如下命令进行安装:

  1. sudo tar -zxf ~/下载/apache-maven-3.3.9-bin.tar.gz -C /usr/local/
  2. cd /usr/local
  3. sudo mv ./apache-maven-3.3.9 maven
  4. sudo chown -R hadoop ./maven # hadoop为你使用的用户名
Shell 命令

安装后便可使用(需要配置好 JDK 1.7 环境),为方便,我们将 maven 命令加入 PATH 变量中。执行 vim ~/.bashrc,在最后面加上一行 export PATH=/usr/local/maven/bin:$PATH,如下图所示。

将Maven加入PATH中

保存文件后执行 source ~/.bashrc ,接着执行 mvn -v 检验,安装成功的话会显示如下图内容:

检验Maven是否安装成功

更换 Maven 镜像

Maven 的官方镜像比较慢,建议使用 开源中国 Maven 库 提供的镜像,速度比较快,避免因网络问题无法下载依赖包,更改镜像只需要修改 Maven 的配置文件(vim /usr/local/maven/conf/setting.xml)即可。此外,笔者实践时,发现 Storm 所需的部分依赖包需要从 clojars.org 下载,但该网站的证书有问题,导致通过 https 无法下载,需要在配置文件中将该源的访问方式改为 http 访问。

修改 Maven 的配置文件(vim /usr/local/maven/conf/setting.xml),在 <mirrors> … </mirrors> 间增加如下内容:

  1. <mirror>
  2. <id>nexus-osc</id>
  3. <mirrorOf>central</mirrorOf>
  4. <name>Nexus osc</name>
  5. <url>http://maven.oschina.net/content/groups/public/</url>
  6. </mirror>
  7. <mirror>
  8. <id>nexus-osc-thirdparty</id>
  9. <mirrorOf>thirdparty</mirrorOf>
  10. <name>Nexus osc thirdparty</name>
  11. <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
  12. </mirror>
  13. <mirror>
  14. <id>clojars</id>
  15. <mirrorOf>clojars</mirrorOf>
  16. <url>http://clojars.org/repo/</url>
  17. </mirror>
XML

并在 <profile> … </profile> 间增加如下内容:

  1. <id>jdk-1.4</id>
  2. <activation>
  3. <jdk>1.4</jdk>
  4. </activation>
  5. <repositories>
  6. <repository>
  7. <id>nexus</id>
  8. <name>local private nexus</name>
  9. <url>http://maven.oschina.net/content/groups/public/</url>
  10. <releases>
  11. <enabled>true</enabled>
  12. </releases>
  13. <snapshots>
  14. <enabled>false</enabled>
  15. </snapshots>
  16. </repository>
  17. <repository>
  18. <id>osc_thirdparty</id>
  19. <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
  20. </repository>
  21. <repository>
  22. <id>clojars</id>
  23. <url>http://clojars.org/repo/</url>
  24. </repository>
  25. </repositories>
  26. <pluginRepositories>
  27. <pluginRepository>
  28. <id>nexus</id>
  29. <name>local private nexus</name>
  30. <url>http://maven.oschina.net/content/groups/public/</url>
  31. <releases>
  32. <enabled>true</enabled>
  33. </releases>
  34. <snapshots>
  35. <enabled>false</enabled>
  36. </snapshots>
  37. </pluginRepository>
  38. </pluginRepositories>
XML

修改后保存配置文件就可以了。

该配置注释文本较多,看起来比较凌乱,不方便更改,如果有需要,也可以下载笔者修改好的版本,下载地址:http://pan.baidu.com/s/1qXwZlsK,下载后执行如下命令替换配置文件:

  1. cp ~/下载/maven-settings.xml /usr/local/maven/conf/settings.xml
Shell 命令

编译、运行代码

在此之前请先开启 Storm (即开启 zookeeper,nimbus 和 supervisor),并确定系统处于联网状态,因为在编译过程中需要下载不少依赖包。

接着我们开始使用 maven 编译、运行 Storm starter。我们只需要进入 storm starter 所在目录,再执行相应的 mvn 命令,并指定参数即可,以运行 Storm starter 中的 WordCount 为例(WordCount 源码位于:/usr/local/storm/examples/storm-starter 下的 src/jvm/storm/starter/WordCountTopology.java):

  1. cd /usr/local/storm/examples/storm-starter
  2. mvn compile exec:java -Dstorm.topology=storm.starter.WordCountTopology
Shell 命令

mvn 命令需要在项目的根目录中运行,即在 storm-starter 目录中运行,该命令会查找当前目录下的 pom.xml 文件,下载所需要的依赖包。

首次运行需要下载较多东西,如下图所示,请耐心等待。

首次运行需要下载较多依赖包

如果遇到网络错误,导致有些依赖包无法下载或下载不完整,编译结束时会提示如下图的 ERROR 信息(Failed to execute goal on project storm-starter: Could not resolve dependencies for project org.apache.storm:storm-starter:jar:0.9.6: The following artifacts could not be resolve…),此时可以重新运行上述代码再试几次。

Maven下载依赖包时可能会出现网络错误

一般会出现网络问题都是由于无法访问 clojars.org,编译过程中会提示错误 “信息: I/O exception (java.net.SocketException) caught when processing request to {}->http://clojars.org:80: 网络不可达”。

如果多次尝试均无法正常下载的话,请下载笔者的离线依赖包,解压到本地的依赖库中(本地依赖库位置为 ~/.m2/),可以解决该问题(Maven 查找依赖包时,首先查找的是本地已下载的依赖包,缺少的再从网络中下载)。下载地址:http://pan.baidu.com/s/1eQWVe3w(笔者提供的依赖包仅适合于 Storm 0.9.6 版本)。

下载后,如果还在进行编译需要先中断,然后执行如下命令解压依赖包,解压后再次编译应该就能成功了:

  1. tar -zxf ~/下载/storm-starter-0.9.6-repository.tar.gz -C ~/.m2/
Shell 命令

编译成功后,紧接着就会在 Storm 中运行,我们能看到不断输出的 INFO 信息,编译最后如果是出现如下 BUILD FAILURE 信息:

...
22125 [SessionTracker] INFO org.apache.storm.zookeeper.server.SessionTrackerImpl - SessionTrackerImpl exited loop!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
...

一般是没有问题的,程序有正确执行。我们可以再运行一次,执行如下代码,用 grep 命令进行过滤,只查看重要的运行结果:

  1. mvn compile exec:java -Dstorm.topology=storm.starter.WordCountTopology | grep 'Thread-[0-9]*-count'
Shell 命令

此时不需要再下载这么多东西,编译很快完成。我们只输出单词统计信息,可以看到输出结果与 Storm安装教程 中运行实例时是一致的,说明编译正确。

WordCount输出结果

打包代码

我们也可以将代码打包成 jar,打包后可以直接提交到 Storm 中运行。在 storm starter 所在目录中执行如下命令(这样打包的是整个 Storm starter):

  1. mvn package
Shell 命令

打包完成后,会在 target 文件中生成 storm-starter-0.9.6.jar 和 storm-starter-0.9.6-with-dependencies.jar,就可以把 jar 包提交到 Storm 中运行了。

  1. /usr/local/storm/bin/storm jar ./target/storm-starter-0.9.6.jar storm.starter.WordCountTopology
Shell 命令

后续我们编写自己的代码时,建议使用 maven 来方便的编译、运行代码。另外,官方使用说明中有更为详细的一些说明,如在 Intellij 中运行 Storm starter,有需要的可以自行查看。

总的来说,Storm starter 提供了很好的代码(源代码是在 storm-starter/src/jvm/storm/starter/ 中),例如RollingTopWords,给我们自己编写 Storm 代码提供了一个很好的借鉴。

使用Maven编译运行Storm入门代码(Storm starter)(转)的更多相关文章

  1. Lua 学习笔记(七)编译、执行外部代码块

    Lua称为解释型语言的原因:Lua允许在运行源代码之前,先将源代码预编译为一种中间形式.区别解释型语言的主要特征是在于编译器是否是语言运行时库的一部分,即有能力执行动态生成的代码.因为Lua中有dof ...

  2. Storm入门2-单词计数案例学习

     [本篇文章主要是通过一个单词计数的案例学习,来加深对storm的基本概念的理解以及基本的开发流程和如何提交并运行一个拓扑] 单词计数拓扑WordCountTopology实现的基本功能就是不停地读入 ...

  3. Storm入门教程 第三章Storm集群安装部署步骤、storm开发环境

    一. Storm集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node).其分别对应的角色如下: 主控节点(Master Node)上运行一个被称为N ...

  4. storm入门(一):storm编程框架与举例

    基础 http://os.51cto.com/art/201308/408739.htm   模型 http://www.cnblogs.com/linjiqin/archive/2013/05/28 ...

  5. Storm系列(三):创建Maven项目打包提交wordcount到Storm集群

    在上一篇博客中,我们通过Storm.Net.Adapter创建了一个使用Csharp编写的Storm Topology - wordcount.本文将介绍如何编写Java端的程序以及如何发布到测试的S ...

  6. Storm入门教程 第二章 构建Topology[转]

    2.1 Storm基本概念 在运行一个Storm任务之前,需要了解一些概念: Topologies Streams Spouts Bolts Stream groupings Reliability ...

  7. Storm入门

    Storm框架入门 1 Topology构成 和同样是计算框架的Mapreduce相比,Mapreduce集群上运行的是Job,而Storm集群上运行的是Topology.但是Job在运行结束之后会自 ...

  8. Storm入门之第二章

    1.准备开始 本章创建一个Storm工程和第一个Storm拓扑结构. 需要提供JER版本在1.6以上,下载地址http://www.java .com/downloads/. 2.操作模式 Storm ...

  9. Storm入门之第一章

    Storm入门之第一章 1.名词 spout龙卷,读取原始数据为bolt提供数据 bolt雷电,从spout或者其他的bolt接收数据,并处理数据,处理结果可作为其他bolt的数据源或最终结果 nim ...

随机推荐

  1. 一次完整的HTTP请求与响应涉及哪些知识?

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 作者:Ruheng 地址:http://www.jianshu.com/p/c1d6a294d3c0 本文以HTTP请求和响 ...

  2. MongoDB特性及使用场景

    概述 MongoDB(Humongous Database),中文意思就是巨大无比的数据库,顾名思义,MongoDB就是为处理大数据而生,以解决海量数据的存储和高效查询使用为使命.MongoDB是一款 ...

  3. 第二天:数值与字符串、列表list

    数值 1. 声明变量 age = 20 f = 3.14 #浮点型 f = 0.3 f = .3 2.表达式 主要是做一些简单的加减乘除运算,直接出结果 1.1 + 2.2 2.2 + 3.0 3.1 ...

  4. iOS开发系列-iOS签名机制

    概述 想要了解iOS的签名机制需要有一定密码学有一定的了解.下面依次介绍的数据的加密解密.单向散列函数.数字签名.证书.iOS签名机制. 数据加密解密 在网络通信中想要防止数据被攻击者拦截,我们通常对 ...

  5. Loadrunner学习---脚本编写(1)

    Loadrunner学习---脚本编写(1) 中午看了两集<奋斗>发现越看越想看,但是想到好不容易没上班,在家还是赶紧学习下LR的知识吧.下面这个网页的文章原来也是看过的,但发现没几天就忘 ...

  6. 关于python程序在VS code中运行时提示文件无法找到的报错

    经过测试,在设置文件夹目录时,可以找到当前目录下的htm文件,采用with open()语句可以正常执行程序,如下图. 而当未设置当前目录,直接用vscode执行该程序时,就会报错文件无法找到File ...

  7. 接口测试——postman

    一.接口测试的准备工作 做接口测试之前需要有接口文档,请求参数,返回参数 二.使用postman进行接口测试 1.get请求 ①get请求可以直接在URL后面添加问号加参数,不需要使用工具来测试接口: ...

  8. 第十章 Odoo 12开发之后台视图 - 设计用户界面

    本文将学习如何为用户创建图形化界面来与图书应用交互.我们将了解不同视图类型和小组件(widgets)之间的差别,以及如何使用它们来提供更优的用户体验. 本文主要内容有: 菜单项 窗口操作(Window ...

  9. intrinsicContentSize和Content Hugging Priority

    Mgen | 首页 | | 发新文章 | 联系 | 订阅  | 管理 iOS: 在代码中使用Autolayout (2) - intrinsicContentSize和Content Hugging ...

  10. 当EntityFramework爱上AutoMapper

    有时候相识即是一种缘分,相爱也不需要太多的理由,一个眼神足矣,当EntityFramework遇上AutoMapper,就是如此,恋爱虽易,相处不易. 在DDD(领域驱动设计)中,使用AutoMapp ...