使用Maven编译运行Storm入门代码(Storm starter)(转)

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

 

Maven介绍

Maven 是如今 Java 社区中最强大的项目管理和项目构建工具。咱们在开发项目的过程当中,会使用一些开源框架、第三方的工具等等,这些都是以 jar 包的方式被项目所引用,而且有些 jar 包还会依赖其余的 jar 包,咱们一样须要添加到项目中,全部这些相关的 jar 包都会做为项目的依赖。一般,一个 Java EE 项目所依赖的 jar 包会有不少。然而,这还并不是是主要问题,在管理这些 jar 包过程当中,jar 包的版本每每是最使人头疼的问题。选择一个 jar 包的版本,须要考虑它所依赖的 jar 包是否支持这个版本,而且还须要确认依赖它的 jar 包能不能对这个版本兼容,难以进行部署与管理。java

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

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

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.gzapache

下载后执行以下命令进行安装:vim

  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,以下图所示。bash

将Maven加入PATH中将Maven加入PATH中markdown

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

检验Maven是否安装成功检验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.  
  6. <repositories>
  7. <repository>
  8. <id>nexus</id>
  9. <name>local private nexus</name>
  10. <url>http://maven.oschina.net/content/groups/public/</url>
  11. <releases>
  12. <enabled>true</enabled>
  13. </releases>
  14. <snapshots>
  15. <enabled>false</enabled>
  16. </snapshots>
  17. </repository>
  18. <repository>
  19. <id>osc_thirdparty</id>
  20. <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
  21. </repository>
  22. <repository>
  23. <id>clojars</id>
  24. <url>http://clojars.org/repo/</url>
  25. </repository>
  26. </repositories>
  27. <pluginRepositories>
  28. <pluginRepository>
  29. <id>nexus</id>
  30. <name>local private nexus</name>
  31. <url>http://maven.oschina.net/content/groups/public/</url>
  32. <releases>
  33. <enabled>true</enabled>
  34. </releases>
  35. <snapshots>
  36. <enabled>false</enabled>
  37. </snapshots>
  38. </pluginRepository>
  39. </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下载依赖包时可能会出现网络错误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输出结果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 代码提供了一个很好的借鉴。

相关文章
相关标签/搜索