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目录下。