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入门之第二章的更多相关文章

  1. Storm入门教程 第二章 构建Topology[转]

    2.1 Storm基本概念 在运行一个Storm任务之前,需要了解一些概念: Topologies Streams Spouts Bolts Stream groupings Reliability ...

  2. Storm入门之第一章

    Storm入门之第一章 1.名词 spout龙卷,读取原始数据为bolt提供数据 bolt雷电,从spout或者其他的bolt接收数据,并处理数据,处理结果可作为其他bolt的数据源或最终结果 nim ...

  3. 【js 笔记】读阮一峰老师 es6 入门笔记 —— 第二章

    第二章:变量的解构赋值 在es6 版本前,如果要为多个变量赋不同值,我想是件比较麻烦的事情.但es6 版本新推出了一个新技术那就是今天的主角变量的解构赋值. 变量解构赋值分为两种方法:数组解构赋值 和 ...

  4. C语言编程入门之--第二章编译环境搭建

    第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...

  5. storm入门教程 第一章 前言[转]

    1.1   实时流计算 互联网从诞生的第一时间起,对世界的最大的改变就是让信息能够实时交互,从而大大加速了各个环节的效率.正因为大家对信息实时响应.实时交互的需求,软件行业除了个人操作系统之外,数据库 ...

  6. JS入门经典第二章总结

    document:在对网页编写脚本时,我们使用document对象代表网页.要引用一个属性,只需在document对象后加一个“.”号,然后再加上要引用的属性名. alert():该函数弹出一个消息框 ...

  7. storm入门教程 第一章 前言

    转自:http://blog.linezing.com/?p=1847 storm:http://www.cnblogs.com/panfeng412/tag/Storm/ http://blog.l ...

  8. 【php学习】PHP 入门经典第二章笔记

    问题答疑: 1.默认情况下,Apache服务器的配置文件名.MySQL服务器的配置文件名以及PHP预处理器配置文件名分别是什么?Apache默认主配置文件:根目录下config文件夹下httpd.co ...

  9. Sass入门:第二章

    1.Sass语法格式 假设有这样一段CSS代码: body{ font : 100% Helvetica , sans-serif; color : #333; } Sass最初的语法格式 $font ...

随机推荐

  1. JS 函数作用域及变量提升那些事!

    虽然看了多次js函数作用域及变量提升的理论知识,但小编也是一知半解~ 这几天做了几道js小题,对这部分进行了从新的理解,还是有所收获的~ 主要参考书籍: <你不知道的JavaScript(上卷) ...

  2. PHP 支付

    蚂蚁金服开放平台 2.下载PHP的SDK&demo 3.申请应用 OR 使用沙箱环境 4.生成应用私钥&应用公钥 5.配置config.php 蚂蚁金服开放平台",对,没错, ...

  3. mysql的并发处理机制_下篇

        MySQL的并发处理机制,有MVCC及锁机制来处理,上篇简要说明了 MVCC及隔离级别,这篇来说说mysql下的锁.     温馨提示:下文有几个表格长度较长,右下角的博文导航目录会挡道,浏览 ...

  4. BZOJ-3709-[PA2014]Bohater(贪心)

    Description 在一款电脑游戏中,你需要打败n只怪物(从1到n编号).为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药,使你恢复a[i]点生命值.任何时候你的生命值都不能降 ...

  5. .Net Core程序的部署(FDD与SCD)

    最近打算做一个公司的代码走查工具,思前想后觉得正好可以当作一个Core的实践机会,于是上官网看了下资料,顺便作了一下笔记方便以后查阅. 注1:这里的Core程序部署指的是.Net Core而非Asp. ...

  6. spark-shell启动报错:Yarn application has already ended! It might have been killed or unable to launch application master

    spark-shell不支持yarn cluster,以yarn client方式启动 spark-shell --master=yarn --deploy-mode=client 启动日志,错误信息 ...

  7. Fastify 系列教程三 (验证、序列化和生命周期)

    Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) Fastify 系列教程三 (验证.序列化和生命周期) 验证 Fast ...

  8. 视频加载logo 2

    推荐这个网站 http://www.flaticon.com/ http://www.flaticon.com/search?word=spinner  旋转图标 http://www.flatico ...

  9. 微信小程序之给项目设置id后提示不在合法域名列别中

    hotapp 有免费的https proxy ,可以免费代理请求任何http或者https服务,只要设置好合法域名为https://wxapi.hotapp.cn, 就可以请求网址如请求小程序联盟的例 ...

  10. (转)Spark性能优化:资源调优篇

      在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何 ...