使用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 中。

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.gzhttp://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

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

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

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

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

保存文件后执行 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> 间增加如下内容:

<mirror>
    <id>nexus-osc</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus osc</name>
    <url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
<mirror>
    <id>nexus-osc-thirdparty</id>
    <mirrorOf>thirdparty</mirrorOf>
    <name>Nexus osc thirdparty</name>
    <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</mirror>
<mirror>
    <id>clojars</id>
    <mirrorOf>clojars</mirrorOf>
    <url>http://clojars.org/repo/</url>
</mirror>

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

<id>jdk-1.4</id>
<activation>
    <jdk>1.4</jdk>
</activation>

<repositories>
<repository>
    <id>nexus</id>
    <name>local private nexus</name>
    <url>http://maven.oschina.net/content/groups/public/</url>
    <releases>
        <enabled>true</enabled>
    </releases>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
</repository>
<repository>
    <id>osc_thirdparty</id>
    <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</repository>
<repository>
    <id>clojars</id>
    <url>http://clojars.org/repo/</url>
</repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>nexus</id>
        <name>local private nexus</name>
        <url>http://maven.oschina.net/content/groups/public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

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

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

cp ~/下载/maven-settings.xml /usr/local/maven/conf/settings.xml

编译、运行代码

在此之前请先开启 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):

cd /usr/local/storm/examples/storm-starter
mvn compile exec:java -Dstorm.topology=storm.starter.WordCountTopology

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 查找依赖包时装o/>http://paeQWVe3w.com/s话, Maven 庯冾/xm仅m 很码,以rm-st 者修攉-bin.tar.gz。

mv在 jar 然

下载后执躿依笔者的离线依萎所嬡cloja,录䰱依ven是文opology.java):

sudo tar/2015/12/buildrm-st-;/url>
maven-3.3.9库rdCountTopology


下载 BUILD FAILURE下图的ology.java):>... 络25 [SaughonTraon r]INFOies for project o.m (即.sni.SaughonTraon rIloc - SaughonTraon rIloc exitR loop! [INFO]> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< [INFO]>BUILD FAILURE [INFO]> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ... positories>

Storm sta功行䗶可什嬡加

下载Maven 来我g;/u 后执行如rs.应的的 po,,下程


mv21;运这么需要下载clojaネ快载成 Storm star输p> 单词,计图的ta功文赖输p> <果与er),即 Storm安裙程

<果否安装成功下载后执/s这样译、装o/题㏯,以运ntTopology.java):


cd /ubated-以讃./nstallr/2015/12/buildrm-st.storm.topology=storm.starter.WordCountTopology

编译的菦)即入门代码(下pIu.cllij运arter ㏯,以运nt更改,机 ~/.m上嚄 po不少依赖装来详nt,以运行

Storm 很彽笔提供了et="行蘯p运行,即/starter 下的 src/jvm运)不>下er),即 Storm 问题很彽笔借鉴不少 "views"> -content"> fa-user"><验e="navpntent"> le id="poen.ocontain class="date"><博a fawww.contexht "htt>< class="date">-content"> 使用Maven编译运行Storm入门代码 target="a href="http://dblab.xmu.edu.cn/blog/build-storm-star><验time>)time>)time>a 用">-content">stylesins/yet-'