Storm入门之第二章

1、准备开始

本章创建一个Storm工程和第一个Storm拓扑结构。

需要提供JER版本在1.6以上,下载地址http://www.java .com/downloads/

 

2、操作模式

Storm的操作模式,有两种方式:

本地模式

在本地模式下,Storm拓扑结构运行在本地计算机的单一JVM进程上,这个模式用于开发、测试以及调试,因为这是观察所有组件如何协同工作的最简单方法。在这种模式下,可以调整参数,观察拓扑结果如何在不同的Storm配置环境下进行。要在本地模式下运行,要下载Storm开发依赖,以便用来开发并测试我们的拓扑结构。在创建第一个Storm工程以后,就会明白如何使用本地模式。

Note:在本地模式下,跟在集群环境运行很像。不过很有必要确认一下所有组件都是线程安全的,因为当把它们部署到远程模式时,可能会运行在不同的JVM进程甚至不同的物理机上,这个时候它们之间没有直接的通讯或共享内存。

本章的所有例子都是运行在本地模式下。

 

远程模式

在远程模式下,向Storm集群提交拓扑,它通常由许多运行在不同机器上的流程组成。远程模式不会出现调试信息,因此也称作生产模式。不过在单一开发机上建立一个Storm集群是一个好主意,可以部署到生产环境之前,用来确认拓扑在集群环境下没有任何问题。

第六章介绍远程模式的内容,以及附录B介绍如何安装一个Storm集群。

 

3、Hello World

创建一个简单的拓扑,统计单词数量。这是一个非常强大的拓扑,因为能够扩展到几乎无限大的规模,而且只需要做一些小修改,就能用它构建一个统计系统。

 

要创建这个拓扑,要用一个spout读取文本,第一个bolt用来标准化单词,第二个bolt为单词计数,如下图:

源代码在git上有,地址为https://github.com/storm-book/examples-ch02-getting_started/zipball/master

Java安装检查

检查Java版本是否符合要求,1.6以及以上。

guosong@guosong:~$ java -version
java version "1.7.0_55"
OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)

创建工程

下载Storm依赖包,这些是一些jar包,要把它们添加到应用类路径,可以采用如下两种方式之一完成:

  • 下载所有依赖,解压缩它们,把它们添加到类路径
  • 使用Apache Maven

Note:Maven是一个软件项目管理的综合工具,可以用来管理项目的开发周期的许多方面,从包以来到版本发布过程。

Maven源码安装:

1、下载maven,地址http://maven.apache.org/download.cgi

2、解压缩到路径/home/guosong/programs/apache-maven-3.2.2下

3、配置环境变量,修改/etc/profile文件,添加如下内容:

export M2_HOME=/home/guosong/programs/apache-maven-3.2.2
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

设置生效,source /etc/profile

4、测试

guosong@guosong:~/programs/apache-maven-3.2.2$ mvn -version
Warning: JAVA_HOME environment variable is not set.
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T21:51:42+08:00)
Maven home: /home/guosong/programs/apache-maven-3.2.2
Java version: 1.7.0_55, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-24-generic", arch: "amd64", family: "unix"

有一个waring,提示没有设置JAVA_HOME

需要增加JAVA_HOME设置,重新配置后变量如下:

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64/                         
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

export M2_HOME=/home/guosong/programs/apache-maven-3.2.2
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

由于ubuntu默认下安装Java的openjdk版本没有tools.jar包,还需要安装:

 sudo apt-get install openjdk-7-jdk

再次检测:

guosong@guosong:~/programs/apache-maven-3.2.2$ mvn -version
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T21:51:42+08:00)
Maven home: /home/guosong/programs/apache-maven-3.2.2
Java version: 1.7.0_55, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-24-generic", arch: "amd64", family: "unix"

已经ok了。

安装的参考链接:

1、http://albertcn.blog.163.com/blog/static/2094201452012622105213493/

2、http://www.cnblogs.com/dyllove98/archive/2013/07/08/3177900.html

 

Note:Storm的Maven依赖引用运行Storm本地模式的所有库。

要运行我们的拓扑,可以编写一个包含基本组件的pom.xml文件,例如如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
             http://maven.apache.org/xsd/maven-4.0.0.xsd">
             <modelVersion>4.0.0</modelVersion>
             <groupId>storm.book</groupId>
             <artifactId>Getting-Started</artifactId>
             <version>0.0.1-SNAPSHOT</version>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-compiler-plugin</artifactId>
                         <version>2.3.2</version>
                         <configuration>
                             <source>1.6</source>
                             <target>1.6</target>
                             <compilerVersion>1.6</compilerVersion>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
             <repositories>
                 <!-- Repository where we can found the storm dependencies -->
                 <repository>
                     <id>clojars.org</id>
                     <url>http://clojars.org/repo</url>
                 </repository>
             </repositories>
             <dependencies>
                 <!-- Storm Dependency -->
                 <dependency>
                     <groupId>storm</groupId>
                     <artifactId>storm</artifactId>
                     <version>0.6.0</version>
                 </dependency>
             </dependencies>
    </project>

开头几行指定工程名称和版本号,然后添加一个编译器插件,告知Maven我们的代码要用Java1.7变异。接下来我们定义Maven仓库(Maven支持同一个工程指定多个仓库)。clojars是存放Storm依赖的仓库。Maven会为运行本地模式自动下载必要的所有子包依赖。

 

一个典型的Maven Jave工程会拥有如下结构:

guosong@guosong:~/code/storm/HelloWorld$ tree
.
├── pom.xml
├── resources
└── src
    └── main
        └── java
            ├── bolts
            └── spouts

java目录下的子目录包含我们的代码,把要统计单词数的文件保存在resources目录下。

创建第一个Topology 

 

参考链接

1、http://ifeve.com/getting-started-with-storm-2/

 

 

posted @ 2014-07-06 17:44  小郭学路  阅读(339)  评论(0编辑  收藏  举报