先简单的把本文要做的事罗列一下:
1. 安装zookeeper集群
2. 安装Storm集群,包括一个Storm的nimbus,在nimbus上启用Storm UI 和两个supervisor
3. 跑一个小例子证实安装完成
注:
本例中,nimbus机器IP为10.1.110.24, 两个supervisor分别为10.1.110.21和10.1.110.22。后文不再用通配符写IP。请自行更换IP。
准备工作
1. 下载zookeeper3.4.5(如果你比较懒,猛击这里)
2. 下载Storm当前最新0.9.0.1 (猛击这里)
3. 安装被配置好JDK(最低版本1.6)
注:
Storm0.9之前的版本,底层通讯用的是ZeroMQ,所以还得去装一个老版本的ZeroMQ(2.1.7,不能装太新的)。
由于ZeroMQ的各种问题,新版支持用Netty替代ZeroMQ。性能上据说能提高两倍。但是默认仍是ZeroMQ,Netty方式需要配置来启用。
github上面安装文档并没有更新,所以,如果要装老版的,可以参考这里:
新版的release note:http://storm-project.net/2013/12/08/storm090-released.html
安装ZK
1. 登陆到10.1.110.21并解压tar包(注意给执行权限)
2. 建立zookeeper的data目录,本文以 /var/tmp/zkdata 为例
- mkdir -p /var/tmp/zkdata
3. 建立zk集群的myid文件 (单机版可以跳过该步)
- cd /var/tmp/zkdata
- echo 1 > myid
4. 拷贝zookeeper的conf/zoo_sample.cfg并重命名为zoo.cfg,修改如下:
- # The number of milliseconds of each tick
- tickTime=2000
- # The number of ticks that the initial
- # synchronization phase can take
- initLimit=10
- # The number of ticks that can pass between
- # sending a request and getting an acknowledgement
- syncLimit=5
- # the directory where the snapshot is stored.
- # do not use /tmp for storage, /tmp here is just
- # example sakes.
- dataDir=/var/tmp/zkdata
- # the port at which the clients will connect
- clientPort=2181
- server.1=10.1.110.21:2888:3888
- server.2=10.1.110.22:2888:3888
- server.3=10.1.110.24:2888:3888
- ## Be sure to read the maintenance section of the
- # administrator guide before turning on autopurge.
- ## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html
- #sc_maintenance
- ## The number of snapshots to retain in dataDir
- #autopurge.snapRetainCount=3
- # Purge task interval in hours
- # Set to "0" to disable auto purge feature
- #autopurge.purgeInterval=1
dataDir是配置zk的数据目录的
server.A=B:C:D是集群zk使用的。如果你只想用单个zk,可以不配置。
A - 是一个数字,表示这是第几号服务器。与/var/tmp/zkdata下的myid文件内容一致
B - 是该服务器的IP地址
C - 表示该服务器与集群中的Leader服务器交换信息的端口
D - 表示如果万一集群中的Leader服务器挂了,需要各服务器重新选举时所用的通讯端口
5. (Optional)将zk的bin目录路径加入环境变量
修改/etc/profile文件,在尾部添加如下:
- #zookeeper
- export ZOOKEEPER=/opt/zookeeper-3.4.5
- PATH=$PATH:$ZOOKEEPER/bin
6. 启动zk
- cd /opt/zookeeper-3.4.5/bin
- ./zkServer.sh start
在剩下两台机器重复以上步骤,注意myid要对应
安装Storm
1. 解压tar包并赋予执行权限
2. 将Storm的bin目录加入系统路径
修改/etc/profile文件,在尾部加入如下:
- PATH=$PATH:/opt/storm-0.9.0.1/bin
使其生效
- mkdir -p /var/tmp/storm/workdir/
以上步骤在Storm的集群上的其他机器上重复执行,然后进行配置:
a. 配置nimbus
修改storm的conf/storm.yaml文件如下:
- ########### These MUST be filled in for a storm configuration
- storm.zookeeper.servers:
- - "10.1.110.21"
- - "10.1.110.22"
- - "10.1.110.24"
- #
- # nimbus.host: "nimbus"
- #
- #
- # ##### These may optionally be filled in:
- #
- ## List of custom serializations
- # topology.kryo.register:
- # - org.mycompany.MyType
- # - org.mycompany.MyType2: org.mycompany.MyType2Serializer
- #
- ## List of custom kryo decorators
- # topology.kryo.decorators:
- # - org.mycompany.MyDecorator
- #
- ## Locations of the drpc servers
- # drpc.servers:
- # - "server1"
- # - "server2"
- storm.local.dir: "/var/tmp/storm/workdir"
- storm.messaging.transport: "backtype.storm.messaging.netty.Context"
- storm.messaging.netty.server_worker_threads: 1
- storm.messaging.netty.client_worker_threads: 1
- storm.messaging.netty.buffer_size: 5242880
- storm.messaging.netty.max_retries: 100
- storm.messaging.netty.max_wait_ms: 1000
- storm.messaging.netty.min_wait_ms: 100
Storm的配置文件格式有点让人郁闷。在每个配置项前面必须留有空格,否则会无法识别。
storm.messaging.* 部分是Netty的配置。如果没有该部分。那么Storm默认还是使用ZeroMQ。
storm.messaging.* 部分是Netty的配置。如果没有该部分。那么Storm默认还是使用ZeroMQ。
b. 配置supervisor
修改storm的conf/storm.yaml文件如下:
- ########### These MUST be filled in for a storm configuration
- storm.zookeeper.servers:
- - "10.1.110.21"
- - "10.1.110.22"
- - "10.1.110.24"
- nimbus.host: "10.1.110.24"
- #
- #
- # ##### These may optionally be filled in:
- #
- ## List of custom serializations
- # topology.kryo.register:
- # - org.mycompany.MyType
- # - org.mycompany.MyType2: org.mycompany.MyType2Serializer
- #
- ## List of custom kryo decorators
- # topology.kryo.decorators:
- # - org.mycompany.MyDecorator
- #
- ## Locations of the drpc servers
- # drpc.servers:
- # - "server1"
- # - "server2"
- supervisor.slots.ports:
- - 6700
- - 6701
- - 6702
- storm.local.dir: "/var/tmp/storm/workdir"
- storm.messaging.transport: "backtype.storm.messaging.netty.Context"
- storm.messaging.netty.server_worker_threads: 1
- storm.messaging.netty.client_worker_threads: 1
- storm.messaging.netty.buffer_size: 5242880
- storm.messaging.netty.max_retries: 100
- storm.messaging.netty.max_wait_ms: 1000
- storm.messaging.netty.min_wait_ms: 100
注意:
i. nimbus.host是nimbus的IP或hostname
ii. supervisor.slots.ports 是配置slot的ip地址。配了几个地址,就有几个slot,即几个worker。如果尝试提交的topology所声明的worker数超过当前可用的slot,该topology提交会失败。
iii. storm.messaging 部分是Netty的配置,就不再重复叙述了。
仍然要注意格式问题。
启动集群
1. 启动nimbus
在nimbus机器的Storm的bin目录下执行
- ./storm nimbus
- ./storm ui
3. 启动supervisor
在supervisor机器的Storm的bin目录下执行
- ./storm supervisor
打开Storm UI 页面。本例是起在10.1.110.24上,所以打开: http://10.1.110.24:8080
默认是启在8080端口上,如果你想改成其他的,如8089,直接修改nimbus的storm.yaml文件,添加
- ui.port=8089
部署程序
1. 从https://github.com/nathanmarz/storm-starter去clone或者下载一个例子包
2. 将包内的m2-pom.xml重命名为pom.xml,并修改twitter4j的版本(人在中国伤不起啊.......)
- <dependency>
- <groupId>org.twitter4j</groupId>
- <artifactId>twitter4j-core</artifactId>
- <!--<version>2.2.6-SNAPSHOT</version>-->
- <version>[2.2,)</version>
- </dependency>
- <dependency>
- <groupId>org.twitter4j</groupId>
- <artifactId>twitter4j-stream</artifactId>
- <!--<version>2.2.6-SNAPSHOT</version>-->
- <version>[2.2,)</version>
- </dependency>
用Maven编译
- mvn clean install -Dmaven.test.skip
3. 将storm-starter/target目录下的storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar拷到nimbus服务器上去
4. 部署topology
- ./storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology test
两种方式,
a. 查看StormUI
b. storm的bin目录下运行
- ./storm list
- 769 [main] INFO backtype.storm.thrift - Connecting to Nimbus at localhost:6627
- Topology_name Status Num_tasks Num_workers Uptime_secs
- -------------------------------------------------------------------
- test ACTIVE 28 3 20
6. 关闭topology
a. StormUI上面点选要关闭的topology,如test,然后在新页面的Topology actions中选kill
b. 运行./storm kill test
常见问题
Storm的log文件默认存放在其logs目录下,其中我们一般要关心的是
nimbus下的nimbus.log和ui.log
supervisor下的
superviosr.log - supervisor启动、启动topology task、关闭等信息
worker-xxxx.log - 该worker上运行的task的具体log
1. worker-xxxx.log 显示2013-09-02 15:31:53 worker [WARN] Received invalid messages for unknown tasks. Dropping...
该问题是host配置问题,解析host出问题
解决办法:
a.
- hostname <new-name>
- vi /etc/sysconfig/network
c.
- vi /etc/hosts
- 10.1.110.24 nimbus
- 10.1.110.22 supervisor-22
- 10.1.110.21 supervisor-21
注意:
如果是ipv6,需要更改Storm的配置文件支持ipv6.默认是ipv4。
2. StormUI上面nimbus和supervisor都显示127.0.0.1
解决办法同1
3. 启动时,supervisor.log不停刷新 5fefa024-50b2-4c5c-b8e2-c2360501cb03 still hasn't started
出现几条是正常的,work 启动需要时间。但是如果一直刷新,就有问题。可以到supervisor.log中把它上面紧挨着的java 启动命令考下来,单独执行。看看是哪里有问题。
4. topologykill后,kill supervisor或nimbus,立刻启动,有时会自动shutdown
supervisor和nimbus启动、关闭后,zookeeper上信息会有同步。每次启动,会尝试恢复、停止上一次的task。对于supervisor,可以等到StormUI上面topology完全停止后,再重启,可避免该问题。
5. 如何remote debug?
在storm的conf/storm.yaml里面加入worker.childopts: "-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"。
注:
这个参数是给启动的worker用的,一个worker对应一个JVM进程。所以如果有两个worker在该节点上启动,必定有一个fail。因为端口冲突!
在shutdown一个topology时,该worker的进程并不会自动关闭,所以端口已然被占着。这个时候再启动时,有可能会分配一个新进程,这时又会去绑该端口,也会fail!
所以应尽量避免remote debug,最后在本地模式调试好后才上传至cluster。
注:
这个参数是给启动的worker用的,一个worker对应一个JVM进程。所以如果有两个worker在该节点上启动,必定有一个fail。因为端口冲突!
在shutdown一个topology时,该worker的进程并不会自动关闭,所以端口已然被占着。这个时候再启动时,有可能会分配一个新进程,这时又会去绑该端口,也会fail!
所以应尽量避免remote debug,最后在本地模式调试好后才上传至cluster。
在每次debug后,要kill掉该supervisor才能避免下次部署失败。
原文
http://blog.csdn.net/xeseo/article/details/17678829
相关推荐
storm集群部署和配置过程详解,里面有storm的详细部署步骤
02_流式计算基础_第1天 (Storm集群部署、单词计数、Stream Grouping).docx
Storm集群部署 Storm集群的常用操作命令 Storm集群的进程及日志查看 1、集群部署的基本流程 集群部署的流程:下载安装包、解压安装包、修改配置文件、分发安装包、启动集群。 注意:所有的集群上都需要配置...
Storm集群部署详细手册.docxStorm集群部署详细手册.docx
Storm集群搭建Storm集群搭建Storm集群搭建Storm集群搭建Storm集群搭建Storm集群搭建Storm集群搭建Storm集群搭建Storm集群搭建
storm集群安装文档,通过此文档可以迅速搭建storm的集群,进一步学习storm
今天接上文,来实现一个Storm数据流处理综合案例的第二部分,Storm集群向Kafka集群源源不断读取数据,通过MyBatis写入到MySQL数据库,并部署为远程模式 准备工作 参考上文准备工作 代码编写 思路:Storm集群从...
storm单本安装及集群安装配置,详情见文档,另需要注意storm.yaml的配置。
Storm集群安装部署步骤,一步一步记录了作者亲自实践部署的过程,包括遇到的错误解决办法
文档详细介绍安装storm集群的详细的操作步骤,并配有截图。
今天来实现一个Storm数据流处理综合案例的第一部分,Storm集群向Kafka集群源源不断写入数据,并部署为远程模式 准备工作 搭建三台Kafka集群服务器 参考文档:Linux部署Kafka集群 搭建三台Storm集群服务器 参考...
本文档包括storm集群部署的整体过程:JDK部署,zookeeper集群部署,storm集群部署
大数据集群部署手册(最新最全),个人已经验证过了!希望对大家有帮助!
storm部署(包括所有依赖rpm包、集群搭建详解)
01-storm简介 02-storm部署-1 03-storm部署-2 04-storm部署概念 05-streamgrouping 06-storm组件生命周期 07-storm可靠性1 08-storm可靠性2
基于Storm的分布式流计算集群详细配置
写第一个Storm应用--数单词数量(一个spout读取文本,第一个bolt用来标准化单词,第二个bolt为单词计数) 一、Storm运行模式: 1.本地模式(Local Mode): 即Topology(相当于一个任务,后续会详细讲解) 运行在本地...
01、Storm的集群搭建 04-storm部署概念.avi
Storm入门教程 之Storm原理和概念详解,出自Storm流计算从入门到精通之技术篇,Storm入门视频教程用到技术:Storm集群、Zookeeper集群等,涉及项目:网站PV、UV案例实战、其他案例; Storm视频教程亮点: 1、Storm...
妳那伊抹微笑_云计算之ClouderaManager以及CHD5.1.0集群部署安装文档V1.0.docx 该文档与教程http://blog.csdn.net/u012185296/article/details/38084107 配套使用的,主要讲的是妳那伊抹微笑_云计算之Cloudera...