Storm安装

Storm安装

安装ZeroMQ

• wget http://download.zeromq.org/zeromq-2.2.0.tar.gz

• tar zxf zeromq-2.2.0.tar.gz

• cd zeromq-2.2.0

• ./configure (yum install libuuid-devel)

• make

• make install

zeroMQ有可能缺少g++

安装g++

yum install gcc gcc-c++

注意事项:如果./configure或者make执行失败,请先安装util-linux-ng-

2.17

 

• 1、#unzip util-linux-ng-2.17-rc1.zip

• 2、#cd util-linux-ng-2.17

• 3、#./configure

• 4、#make

• 5、#mv /sbin/hwclock /sbin/hwclock.old

• 6、#cp hwclock/hwclock /sbin/

• 7、# hwclock --show

• 8、#hwclock -w

• 9、#make install

注意: ./configure出现如下错误:configure: error: ncurses or ncursesw

selected, but library not found (--without-ncurses to disable)我们加上

参数--without-ncurses

 

安装jzmq

• #yum install git

• git clone git://github.com/nathanmarz/jzmq.git

• cd jzmq

• ./autogen.sh

• ./configure

• Make

• make install

如果缺少libtool,则先安装

• yum install libtool

 

安装Python2.7.2

• wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz

• tar zxvf Python-2.7.2.tgz

• cd Python-2.7.2

• ./configure

• make

• make install

 

安装storm

• wget http://cloud.github.com/downloads/nathanmarz/storm/storm-

0.8.1.zip

• unzip storm-0.8.1.zip

• vim /etc/profile

• export STORM_HOME=/usr/local/storm-0.8.1

• export PATH=$PATH:$STORM_HOME/bin

如果unzip不能用

• yum install unzip

• 修改storm/conf/storm.yaml文件

• storm.zookeeper.servers:

• - “zk1"

• - “zk2"

• - “zk3"

• nimbus.host: “zk1"

• storm.local.dir: "/usr/tmp/storm"

• supervisor.slots.ports:

• - 6700

• - 6701

• - 6702

• - 6703

(注意:先搭建zookeeper集群)

 

配置storm

• 说明一下:storm.local.dir表示storm需要用到的本地目录。

nimbus.host表示那一台机器是master机器,即 nimbus。

storm.zookeeper.servers表示哪几台机器是zookeeper服务器。

storm.zookeeper.port表示zookeeper的端口号,这里一定要与

zookeeper配置的端口号一致,否则会出现通信错误,切记切记。当

然你也可以配 superevisor.slot.ports,supervisor.slots.ports表示

supervisor节点的槽数,就是最多能跑几个 worker进程(每个sprout

或bolt默认只启动一个worker,但是可以通过conf修改成多个)

• java.library.path 这是storm所依赖的本地依赖(ZeroMQ和JZMQ)的

加载地址, 默认的是:/usr/local/lib:/opt/local/lib:/usr/lib, 大多情况下是

对的,所以你应该不用更改这个配置。

注意事项:

• 配置时一定注意在每一项的开始时要加空格(最好加两个空格),冒

号后也必须要加空格,否则storm不认识这个配置文件。

• 在目录/usr/tmp下面增加storm文件夹

启动storm

• 启动zookeeper环境(启动不正常,执行service iptablse stop关闭防

火墙)

• 执行storm nimbus 启动nimbus

执行 storm supervisor 启动从节点

执行 storm ui 启动ui(ui和nimbus需要在同一台机子上面)

• 注意事项:

Storm后台进程被启动后,将在Storm安装部署目录下的logs/子

目录下生成各个进程的日志文件。

经测试,Storm UI必须和Storm Nimbus部署在同一台机器上,

否则UI无法正常工作,因为UI进程会检查本机是否存在Nimbus链接

• 为了方便使用,可以将bin/storm加入到系统环境变量中。

• 启动完毕,通过 http://ip:8080/访问UI

测试storm

A、安装Maven(参考maven安装和使用手册)

• 环境准备:

• JDK 1.6

• Maven 3.0.4

• myeclipse 8.6.1 (集成myeclipse)

• 安装 Maven 之前要求先确定你的 JDK 已经安装配置完成。

Maven是 Apache 下的一个项目,目前最新版本是 3.0.4,我用

的也是这个。

• 首先去官网下载 Maven:

http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-

maven-3.0.4-bin.tar.gz

 

A、安装Maven(参考maven安装和使用手册)

• 下载完成之后将其解压,我将解压后的文件夹重命名成 maven,并将

它放在 D:\Server 目录下,即 maven 最终的路径是:

D:\Server\maven

• 配置 maven 环境变量:

系统变量:MAVEN_HOME = D:\Server\maven

用户变量:path = %MAVEN_HOME%\bin

• 相信大家都有配过环境变量的,详细步骤就不说了,对着把属性名和

属性值配上的OK了。

• 打开 cmd,在里面敲:mvn –version

mvn 是 maven 的一个指令,mvn -version 是查看版本信息

如果能打印如上信息,说明到此 Maven3 已经在你的电脑上安装完成。

 

• 接着要修改一下 maven 仓库的存放位置:

找到 maven 下的 conf 下的 settings.xml 配置文件,我的是在

D:\Server\maven\conf\settings.xml

• maven 的仓库默认是放在本地用户的临时文件夹下面的 .m2 文件夹

下的 repository 下,我的是在 C:\Users\admcnm\.m2\repository 目录

下,

• 现在我们来修改将它指定到我们自己的路径下,我现在要将仓库指定

到 D:\Repositories\Maven 目录下,只需要将上面注销的本地仓库打

开,

 

• OK,先来体会一下 maven,在 cmd 中敲并回车执行:mvn

help:system

• 这时候 maven 就会从远程仓库开始下载一大堆的东西,没事,让它

下载着,迟早都要下载的,接下来是将 maven 配置到 myeclipse 中

• 打开 myeclipse,Window --> Preferences --> MyEclipse -->

Maven4MyEclipse --> Maven

• 确定JDK是用你自己的:

1. 创建Maven的普通java项目:

• mvn archetype:create

• -DgroupId=packageName

• -DartifactId=projectName

 2. 创建Maven的Web项目:

• mvn archetype:create

• -DgroupId=packageName

• -DartifactId=webappName

• -DarchetypeArtifactId=maven-archetype-webapp

 

 3. 编译源代码: mvn compile

 4. 编译测试代码:mvn test-compile

 5. 运行测试:mvn test

 6. 产生site:mvn site

 7. 打包:mvn package

 8. 在本地Repository中安装jar:mvn install

 9. 清除产生的项目:mvn clean

 10. 生成eclipse项目:mvn eclipse:eclipse

 11. 生成idea项目:mvn idea:idea

 12. 组合使用goal命令,如只打包不测试:mvn -Dtest package

 13. 编译测试的内容:mvn test-compile

 14. 只打jar包: mvn jar:jar

 15. 只测试而不编译,也不测试编译:mvn test -skipping compile -

skipping test-compile

 ( -skipping 的灵活运用,当然也可以用于其他组合命令)

 16. 清除eclipse的一些系统设置:mvn eclipse:clean

 17. 下载包的源文件:mvn dependency:sources

 

常用的命令:

• mvn package

• mvn eclipse:eclipse

• mvn compile

• mvn jar:jar

• mvn clean

• B、下载Storm-start (

https://github.com/nathanmarz/storm-

starter/archive/master.zip)

• C、进入下载目录,对zip文件解压

• D、进入解压后的文件目录,修改m2-pom.xml (将

twitter4j-core和twitter4j-stream替换为下面的部分)

 

<dependency>

<groupId>org.twitter4j</groupId>

<artifactId>twitter4j-core</artifactId>

<version>[2.2,)</version>

</dependency>

<dependency>

<groupId>org.twitter4j</groupId>

<artifactId>twitter4j-stream</artifactId>

<version>[2.2,)</version>

</dependency>

 

• E、编译项目。转到项目根目录,使用mvn -f m2-pom.xml

package 进行编译

• F、复制 storm-starter目录下的m2_pom.xml 为pom.xml

,放在与m2_pom.xml同一目录下

• G、打jar包 mvn jar:jar

• 如果还需要对工程代码进行修改可以导入eclipse

• G.1 使用mvn eclipse:eclipse编译成eclipse工程

• G.2 eclipse import project

• O、提交运行

• 拷贝jar包到Storm所在机器上。

编译无误后,在Storm-starter中target目录如下:

将storm-starter-0.0.1-SNAPSHOT-jar-with-

dependencies.jar,拷贝到指定的目录下面

• P、执行命令:

./storm jar /usr/soft/stormrun/storm-starter-0.0.1-

SNAPSHOT-jar-with-dependencies.jar

storm.starter.WordCountTopology test

• Q:查看UI http://ip:8080

注意:

storm 启动supervisor报错java.lang.NoSuchMethodError:

org.slf4j.helpers.Util.report(Ljava/lang/String)V

解决方案:去掉lib里面的log4j-over-slf4j-1.6.6.jar

 

Storm配置详解

配置项  配置说明

storm.zookeeper.servers ZooKeeper服务器列表

storm.zookeeper.port ZooKeeper连接端口

storm.local.dir

storm使用的本地文件系统目录(必须存在并且storm进程可

读写)

storm.cluster.mode Storm集群运行模式([distributed|local])

storm.local.mode.zmq

Local模式下是否使用ZeroMQ作消息系统,如果设置为false

则使用java消息系统。默认为false

storm.zookeeper.root ZooKeeper中Storm的根目录位置

storm.zookeeper.session.timeout 客户端连接ZooKeeper超时时间

storm.id 运行中拓扑的id,由storm name和一个唯一随机数组成。

 

nimbus.host nimbus服务器地址

nimbus.thrift.port nimbus的thrift监听端口

nimbus.childopts 通过storm-deploy项目部署时指定给nimbus进程的jvm选项

nimbus.task.timeout.secs 心跳超时时间,超时后nimbus会认为task死掉并重分配给另一个地址。

nimbus.monitor.freq.secs

nimbus检查心跳和重分配任务的时间间隔.注意如果是机器宕掉nimbus

会立即接管并处理。

nimbus.supervisor.timeout

.secs

supervisor的心跳超时时间,一旦超过nimbus会认为该supervisor已死并停

止为它分发新任务.

nimbus.task.launch.secs

task启动时的一个特殊超时设置.在启动后第一次心跳前会使用该值来临

时替代nimbus.task.timeout.secs.

nimbus.reassign 当发现task失败时nimbus是否重新分配执行。默认为真,不建议修改。

 

nimbus.file.copy.expiration.se

cs

nimbus判断上传/下载链接的超时时间,当空闲时间超过该设定时

nimbus会认为链接死掉并主动断开

ui.port Storm UI的服务端口

drpc.servers DRPC服务器列表,以便DRPCSpout知道和谁通讯

drpc.port Storm DRPC的服务端口

supervisor.slots.ports

supervisor上能够运行workers的端口列表.每个worker占用一个端口,

且每个端口只运行一个worker.通过这项配置可以调整每台机器上运

行的worker数.(调整slot数/每机)

supervisor.childopts 在storm-deploy项目中使用,用来配置supervisor守护进程的jvm选项

supervisor.worker.timeout.sec

s

supervisor中的worker心跳超时时间,一旦超时supervisor会尝试重启

worker进程.

supervisor.worker.start.timeo

ut.secs

supervisor初始启动时,worker的心跳超时时间,当超过该时间

supervisor会尝试重启worker。因为JVM初始启动和配置会带来的额

外消耗,从而使得第一次心跳会超过supervisor.worker.timeout.secs

的设定

 

supervisor.enable

supervisor是否应当运行分配给他的workers.默认为true,该选项

用来进行Storm的单元测试,一般不应修改.

supervisor.heartbeat.frequency.se

cs

supervisor心跳发送频率(多久发送一次)

supervisor.monitor.frequency.secs supervisor检查worker心跳的频率

worker.childopts

supervisor启动worker时使用的jvm选项.所有的”%ID%”字串会

被替换为对应worker的标识符

worker.heartbeat.frequency.secs worker的心跳发送时间间隔

task.heartbeat.frequency.secs task汇报状态心跳时间间隔

task.refresh.poll.secs

task与其他tasks之间链接同步的频率.(如果task被重分配,其他

tasks向它发送消息需要刷新连接).一般来讲,重分配发生时其

他tasks会理解得到通知。该配置仅仅为了防止未通知的情况。

topology.debug 如果设置成true,Storm将记录发射的每条信息。

topology.optimize

master是否在合适时机通过在单个线程内运行多个task以达到

优化topologies的目的.

 

topology.workers

执行该topology集群中应当启动的进程数量.每个进程内部将以线程方式执

行一定数目的tasks.topology的组件结合该参数和并行度提示来优化性能

topology.ackers

topology中启动的acker任务数.Acker保存由spout发送的tuples的记录,并探

测tuple 何时被完全处理.当Acker探测到tuple被处理完毕时会向spout发送确

认信息.通常应当根据topology的吞吐量来确定acker的数目, 但一般不需要

太多.当设置为0时,相当于禁用了消息可靠性,storm会在spout发送tuples后立

即进行确认.

topology.message.timeout.s

ecs

topology中spout发送消息的最大处理超时时间.如果一条消息在该时间窗口

内未被成功ack,Storm会告知spout这条消息失败。而部分spout实现了失败消

息重播功能。

topology.kryo.register

注册到Kryo(Storm底层的序列化框架)的序列化方案列表.序列化方案可以是

一个类名,或者是com.esotericsoftware.kryo.Serializer的实现.

topology.skip.missing.kryo.r

egistrations

Storm是否应该跳过它不能识别的kryo序列化方案.如果设置为否task可能会

装载失败或者在运行时抛出错误.

topology.max.task.parallelis

m

在一个topology中能够允许的最大组件并行度.该项配置主要用在本地模式

中测试线程数限制.

 

topology.max.spout.pending

一个spout task中处于pending状态的最大的tuples数量.该配置应

用于单个task,而不是整个spouts或topology.

topology.state.synchronization.tim

eout.secs

组件同步状态源的最大超时时间(保留选项,暂未使用)

topology.stats.sample.rate 用来产生task统计信息的tuples抽样百分比

topology.fall.back.on.java.serializati

on

topology中是否使用java的序列化方案

zmq.threads 每个worker进程内zeromq通讯用到的线程数

zmq.linger.millis

当连接关闭时,链接尝试重新发送消息到目标主机的持续时长.这

是一个不常用的高级选项,基本上可以忽略.

java.library.path

JVM启动(如Nimbus,Supervisor和workers)时的java.library.path设

置.该选项告诉JVM在哪些路径下定位本地库.

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值