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/
Storm入门之第二章的更多相关文章
- Storm入门教程 第二章 构建Topology[转]
2.1 Storm基本概念 在运行一个Storm任务之前,需要了解一些概念: Topologies Streams Spouts Bolts Stream groupings Reliability ...
- Storm入门之第一章
Storm入门之第一章 1.名词 spout龙卷,读取原始数据为bolt提供数据 bolt雷电,从spout或者其他的bolt接收数据,并处理数据,处理结果可作为其他bolt的数据源或最终结果 nim ...
- 【js 笔记】读阮一峰老师 es6 入门笔记 —— 第二章
第二章:变量的解构赋值 在es6 版本前,如果要为多个变量赋不同值,我想是件比较麻烦的事情.但es6 版本新推出了一个新技术那就是今天的主角变量的解构赋值. 变量解构赋值分为两种方法:数组解构赋值 和 ...
- C语言编程入门之--第二章编译环境搭建
第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...
- storm入门教程 第一章 前言[转]
1.1 实时流计算 互联网从诞生的第一时间起,对世界的最大的改变就是让信息能够实时交互,从而大大加速了各个环节的效率.正因为大家对信息实时响应.实时交互的需求,软件行业除了个人操作系统之外,数据库 ...
- JS入门经典第二章总结
document:在对网页编写脚本时,我们使用document对象代表网页.要引用一个属性,只需在document对象后加一个“.”号,然后再加上要引用的属性名. alert():该函数弹出一个消息框 ...
- storm入门教程 第一章 前言
转自:http://blog.linezing.com/?p=1847 storm:http://www.cnblogs.com/panfeng412/tag/Storm/ http://blog.l ...
- 【php学习】PHP 入门经典第二章笔记
问题答疑: 1.默认情况下,Apache服务器的配置文件名.MySQL服务器的配置文件名以及PHP预处理器配置文件名分别是什么?Apache默认主配置文件:根目录下config文件夹下httpd.co ...
- Sass入门:第二章
1.Sass语法格式 假设有这样一段CSS代码: body{ font : 100% Helvetica , sans-serif; color : #333; } Sass最初的语法格式 $font ...
随机推荐
- java web jsp原理图 ,静态包含,动态包含,out与response.getWrite()
jsp原理图 ,静态包含,动态包含,out与response.getWrite()
- javascript Dom 编程
javascript Dom 编程 知识概要: (1)Dom是什么? (2)Dom结构模型 (3)XML DOM和 HTML DOM (4)NODE接口的特性和方法 (5)DOM结点的常用属性 ...
- 使用HDFS客户端java api读取hadoop集群上的信息
本文介绍使用hdfs java api的配置方法. 1.先解决依赖,pom <dependency> <groupId>org.apache.hadoop</groupI ...
- 知识树杂谈Java面试(4)
一. Java集合 1. 集合分类: Collection.Map. 2. Collection: 3. Map 4. 注意点 a. List 有序.可重复:Set 无序.不可重复:Map 键值 ...
- BeginInvoke()使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- [bzoj2131]免费的馅饼 树状数组优化dp
2131: 免费的馅饼 Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description Input 第一行是 ...
- 62、django之MTV模型(urls,view)
今天就进入到python最重要的阶段了django框架,框架就像胶水一样会将我们前面学的所有知识点粘合在一起,所以以前有哪些部分模糊的可以看看前面的随笔.本篇主要介绍djangoMTV模型,视图层之路 ...
- GET 和 POST 比较整理
差异 上传文件只能使用 POST GET 传输数据有大小限制 GET 传输的数据类型不灵活:GET是使用url来传输数据,那么比如空格字符以及类似&这样的字符就不方便传输.(当然可以使用发送前 ...
- R学习笔记 第三篇:数据框
数据框(data.frame)用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同的数据列的数据类型可以相同,也可以不同,但是,每列的长度必须相同.数据框的每列可以有唯一的命名,在已创 ...
- 【前端GUI】——网站设计的重要知识点总结&思维导图(一)
前言:网页美术设计具有四大特点,分别为交互性.整合性.多维性以及动态性.完整的网页设计既需要试听元素,也需要版式设计,以求有效的传达信息.在设计的时候,设计者要学会利用框架,也要学会打破框架. 一.优 ...