1 安装zookeeper
zookeeper是一个分布式协作的Apache hadoop项目,它提供了分布式同步,选举leader等功能,解决了分布式应用中的数据管理问题。
- 下载zookeeper-3.4.9
下载zookeeper-3.4.9.tar.gz,解压到/opt/。
sudo tar -C /opt -zxvf zookeeper-3.4.9.tar.gz
- 在/etc/profile新建环境变量
export ZK_HOME=/opt/zookeeper-3.4.9
export PATH=$ZK_HOME/bin:$JAVA_HOME/bin:$MYSQL_HOME/bin:$TOMCAT_HOME/bin:$SQLITE_HOME/bin:$M2_HOME/bin:$PATH
要使得该环境变量生效,则必须在当前终端下运行
source /etc/profile
- 修改zookeeper的配置文件
zookeeper的默认配置文件是$ZK_HOME/conf/zoo.cfg。但是tarball只提供了zoo_sample.cfg的样例,我们必须添加这个配置文件。
cd $ZK_HOME/conf
sudo cp zoo_sample.cfg zoo.cfg
我们当然可以使用上面的默认配置,而且该配置就足够了。我个人修改zoo.cfg的dataDir,读者可以根据自己的喜好修改。
dataDir=/var/zookeeper
这时就要创建该目录,而且要修改权限,使得当前用户能够在该目录下创建文件。
sudo mkdir /var/zookeeper
sudo chmod a+w /var/zookeeper
注意,这里a不能省略,否则other可能仍然没有写权限。
- 启动和停止zookeeper
zkServer.sh start
zkServer.sh stop
2 安装storm
nimbus和supervisor上都必须安装storm依赖库,然后再安装storm。zeromq提供分布式环境下的传输层的通信机制,是一个网络库。但是0.9的storm使用了Netty。jzmq是zeromq的Java绑定。
2.1 安装依赖库
- 安装zeromq
下载zeromq-4.0.3.tar.gz。解压到/tmp,并安装。
tar -C /tmp -zxvf zeromq-4.0.3.tar.gz
cd /tmp/zeromq-4.0.3
./configure
make
sudo make install
如果make出错,可能要创建一些文件。同时还要安装一些工具,如libtool。
- 安装jzmq
安装过程和上述类似。下载jzmq.tgz。
tar -C /tmp -zxvf jzmq.tgz
cd /tmp/jzmq
./autogen.sh
./configure
make
sudo make install
2.2 安装storm
storm的安装与zookeeper的安装十分类似。storm是一个实时大数据处理框架,具有容错性,易于扩展等优点。它支持本地模式和远程模式,在本地模式下可以进行开发和测试,而远程模式是生产模式,将拓扑提交到storm集群中。但它只有一个nimbus节点(主节点,守护进程),支持多个supervisor节点(工作节点,守护进程),中间通过多个zookeeper节点来保存分布式的信息。一个supervisor节点可以可能有4个work节点,而一个worker节点是一个java进程,里面将执行多个executor线程,也就是task,一般是spout或者bolt。
- 下载apache-storm-0.9.5.tar.gz
解压到/opt
sudo tar -C /opt -zxvf apache-storm-0.9.5.tar.gz
- 在/etc/profile新建环境变量
export STORM_HOME=/opt/apache-storm-0.9.5
export PATH=$STORM_HOME/bin:$ZK_HOME/bin:$JAVA_HOME/bin:$MYSQL_HOME/bin:$TOMCAT_HOME/bin:$SQLITE_HOME/bin:$M2_HOME/bin:$PATH
要使得该环境变量生效,则必须在当前终端下运行
source /etc/profile
- 修改配置文件storm.yaml
在$STORM_HOME/conf/storm.yaml最后添加一行
storm.local.dir: "/var/stormData"
创建/var/stormData
sudo mkdir /var/stormData
sudo chmod a+w /var/stormData
其他设置将使用/opt/apache-storm-0.9.5/lib/storm-core.0.9.5.jar下的defaults.yaml的配置,也就是默认的库在/usr/local/lib/,我们手动make的zeromq和jzmq都在这个里面。这样配置只能以nimbus启动,而且zookeeper也在这台机器上运行(监听2181端口)。而要以supervisor启动,则其storm.yaml必须指定nimbus和zookeeper的IP。默认supervisor有4个worker,端口分别是6700 ~ 6703。
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
########### These MUST be filled in for a storm configuration
storm.zookeeper.servers:
- "192.168.43.209" #指定zookeeper的IP
# - "server2"
#
nimbus.host: "192.168.43.209"#指定nimbus的IP
#
#
# ##### 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"
## Metrics Consumers
# topology.metrics.consumer.register:
# - class: "backtype.storm.metric.LoggingMetricsConsumer"
# parallelism.hint: 1
# - class: "org.mycompany.MyMetricsConsumer"
# parallelism.hint: 1
# argument:
# - endpoint: "metrics-collector.mycompany.org"
storm.local.dir: "/var/stormData"
- 修改logs的权限
修改$STORM_HOME/logs的权限,使得可以创建日志。
sudo mkdir $STORM_HOME/logs
sudo chmod a+w $STORM_HOME/logs
3 启动集群
一台机器(假设IP为192.168.43.209)安装zookeeper和storm,作为nimbus启动,同时启动ui服务,使得可以访问http://192.168.43.209:8080监控topology的状态:
zkServer.sh start
storm nimbus &
storm ui &
另一台机器安装storm,但必须指定nimbus和zookeeper,如上面的storm.yaml,作为supervisor启动。启动如下:
storm supervisor &
事实上,我们可以把zookeeper和nimbus分开在不同的机器上运行,可以有多台机器运行zookeeper,可以有多台机器运行supervisor(只要安装了storm,并指定nimbus和zookeeper),从而增强并行计算的能力。
4 提交并运行拓扑
这里使用单词计数的程序,但storm的版本必须和安装的一致,如都是apache-storm-0.9.5。如果依赖和集群的storm版本不一致,可能会出错!!!另外,本人在使用apache-storm-1.0.2.tar.gz版本运行不起来,提示缺少backtype,或者出现重复的jar包。所以最后考虑使用apache-storm-0.9.5.tar.gz,在lib/storm-core-0.9.5.jar下有这个java包。
在运行nimbus的机器下下载StormDemo.tar.gz,并解压,提交target目录下的jar。
storm jar target/StormDemo-1.0-SNAPSHOT.jar com.stormdemo.MyTopology 2
注意,必须在项目的根目录下运行这个命令,否则会提示找不到主类。另外,com.stormdemo.MyTopology是main入口,而’/home/gua/input.txt’必须在supervisor下存在,因为拓扑会读取指定的文件。它保存的是很多行英文单词。
另外,可以停止拓扑的运行:
storm kill 拓扑名
本文参考
http://www.cnblogs.com/panfeng412/archive/2012/11/30/how-to-install-and-deploy-storm-cluster.html
http://www.tianshouzhi.com/api/tutorials/storm/17
http://blog.sina.com.cn/s/blog_406d9bb00100ui5p.html