文档章节

Storm集群的搭建与配置

datapro
 datapro
发布于 2015/06/12 22:13
字数 1803
阅读 179
收藏 2

安装Storm集群

这一章节将详细描述如何搭建一个Storm集群。下面是接下来需要依次完成的安装步骤:

  • 搭建Zookeeper集群;

  • 安装Storm依赖库;

  • 下载并解压Storm发布版本;

  • 修改storm.yaml配置文件;

  • 启动Storm各个后台进程。

1、Zookeeper的搭建参考:http://my.oschina.net/u/2377453/blog/464739

搭建Zookeeper集群注意事项:

  1. 由于Zookeeper是快速失败(fail-fast)的,且遇到任何错误情况,进程均会退出,因此,最好能通过监控程序将Zookeeper管理起来,保证Zookeeper退出后能被自动重启。详情参考这里

  2. Zookeeper运行过程中会在dataDir目录下生成很多日志和快照文件,而Zookeeper运行进程并不负责定期清理合并这些文件,导致占用大量磁盘空间,因此,需要通过cron等方式定期清除没用的日志和快照文件。详情参考这里。具体命令格式如下:java -cp zookeeper.jar:log4j.jar:conf org.apache.zookeeper.server.PurgeTxnLog <dataDir> <snapDir> -n <count>

2、安装Storm依赖库

接下来,需要在Nimbus和Supervisor机器上安装Storm的依赖库,具体如下:

  1. ZeroMQ 2.1.7 – 请勿使用2.1.10版本,因为该版本的一些严重bug会导致Storm集群运行时出现奇怪的问题。少数用户在2.1.7版本会遇到"IllegalArgumentException"的异常,此时降为2.1.4版本可修复这一问题。

  2. JZMQ

  3. Java 6

  4. Python 2.6.6

  5. unzip

以上依赖库的版本是经过Storm测试的,Storm并不能保证在其他版本的Java或Python库下可运行。

注意:

    安装过程中经常出现需要依赖,请务必使用yum安装各种依赖

    YUM出现问题请参考这篇文章:http://my.oschina.net/u/2377453/blog/466141

3、安装ZMQ 2.1.7

下载后编译安装ZMQ:

#wget    //http://download.zeromq.org/zeromq-2.1.7.tar.gz//下载
#tar -xzf zeromq-2.1.7.tar.gz    //解压
#cd zeromq-2.1.7    //切换目录
//编译且安装
#./configure        
#make    
#make install
安装时可能出现如下依赖:
1.安装c++编译器
#sudo yum install gcc-c++
2.下载libsodium
//https://github.com/jedisct1/libsodium/archive/1.0.1.tar.gz
3.安装libtool
#sudo yum install libtool
4.安装autoconf-2.68
#wget //http://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.gz
#./configure
#make && make install

注意事项:

1. 如果安装过程报错uuid找不到,则通过如下的包安装uuid库:
#yum install uuid*
#yum install e2fsprogs*
2. 如果出现c++编译环境
#yum install gcc-c++

4、安装JZMQ

下载后编译安装JZMQ:

#wget   // https://codeload.github.com/zeromq/jzmq/zip/master//下载
#unzip jzmq-master.zip //解压
#cd jzmq-maste    //切换目录
//编译安装
#./autogen.sh
#./configure
#make
#make install

为了保证JZMQ正常工作,可能需要完成以下配置:

  1. 正确设置 JAVA_HOME环境变量

  2. 安装Java开发包

  3. 注意事项:

     1. 如果运行./configure命令出现connot find zmq.h

加入两台export:
export CPPFLAGS=-I/root/installs/zeromq/include
export LDFLAGS=-L/root/installs/zeromq/lib/

 

5、 安装Java 6

1. 下载并安装JDK 6

2. 配置JAVA_HOME环境变量;

3. 运行java、javac命令,测试java正常安装。

6、安装Python2.7.10

1. 下载Python2.7.10:

wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz

2. 编译安装Python2.7.10:

#xz -d Python-2.7.10.tar.xz//可能需要安装xz,sudo yum install xz 
#tar –xvf Python-2.7.10.tar.gz  
#cd Python-2.7.10
#./configure
#make
#make install
注意:
1、python默认安装路径:/usr/local/bin/pythonN
2、新安装的python要替代系统自带的python必须将系统自带的python的链接文件删除:/usr/bin/python
3、使用命令创建自己的链接文件:ln -s /usr/local/bin/pythonN /usr/bin/python
N位版本号

3. 测试Python2.7.10:

#python -V
Python 2.7.10

7、安装unzip

1. 如果使用RedHat系列Linux系统,执行以下命令安装unzip:

apt-get install unzip

2. 如果使用Debian系列Linux系统,执行以下命令安装unzip:

yum install unzip

8、下载并解压Storm发布版本

下一步,需要在Nimbus和Supervisor机器上安装Storm发行版本。

1. 下载Storm发行版本,推荐使用Storm0.8.1:

wget https://github.com/downloads/nathanmarz/storm/storm-0.8.1.zip

2. 解压到安装目录下:

unzip storm-0.8.1.zip

3. 修改storm.yaml配置文件

Storm发行版本解压目录下有一个conf/storm.yaml文件,用于配置Storm。默认配置在这里可以查看。conf/storm.yaml中的配置选项将覆盖defaults.yaml中的默认配置。以下配置选项是必须在conf/storm.yaml中进行配置的:

注意:配置文件中“:”以及“-”左右两边必须有空格(→_→我被坑了好久才发现这个问题)

#配置storm使用的zookeeper集群的地址
storm.zookeeper.servers:
     - "hostA"
     - "hostB"
#(选配)如果zookeeper默认端口不是2181,则需要配置zookeeper端口
storm.zookeeper.port : 2181
#配置主节点nimbus所在的主机
nimbus.host : "host"
#配置storm的工作目录
storm.local.dir : "/root/app/storm/tmp"
#配置本地模式下是否使用ZeroQM作为消息系统,默认为false:使用java消息系统
storm.local.mode.zmq : true
#配置supervisor节点可以使用worker进程的端口,默认情况为4个worker进程,端口如下
supervisor.slots.ports : 
 - 6700
 - 6701
 - 6702
 - 6703

9、启动Storm各个后台进程

最后一步,启动Storm的所有后台进程。和Zookeeper一样,Storm也是快速失败(fail-fast)的系统,这样Storm才能在任意时刻被停止,并且当进程重启后被正确地恢复执行。这也是为什么Storm不在进程内保存状态的原因,即使Nimbus或Supervisors被重启,运行中的Topologies不会受到影响。

以下是启动Storm各个后台进程的方式:

  1. Nimbus: 在Storm主控节点上运行"bin/storm nimbus 1 > /dev/null 2 &1 &"启动Nimbus后台程序,并放到后台执行;

  2. Supervisor: 在Storm各个工作节点上运行"bin/storm supervisor 1 /dev/null 2 &1 &"启动Supervisor后台程序,并放到后台执行;

  3. UI: 在Storm主控节点上运行"bin/storm ui  1 > /dev/null 2 &1 &"启动UI后台程序,并放到后台执行,启动后可以通过http://{nimbus host}:8080观察集群的worker资源使用情况、Topologies的运行状态等信息。

  4. 命令解释:“1 > /dev/null 2 &1”,linux命令,意思是标准输出(1)到/dev/null,异常输出(2)同样输出到/dev/null(&1就是引用1输出的位置),&后台运行,如果在命令最前端加入“nohub”,则变为即使关闭终端也会继续运行.

     

注意事项:

  1. Storm后台进程被启动后,将在Storm安装部署目录下的logs/子目录下生成各个进程的日志文件。

  2. 经测试,Storm UI必须和Storm Nimbus部署在同一台机器上,否则UI无法正常工作,因为UI进程会检查本机是否存在Nimbus链接。

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

至此,Storm集群已经部署、配置完毕,可以向集群提交拓扑运行了。

10、向集群提交任务

1)启动Storm Topology:

storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3

其中,allmycode.jar是包含Topology实现代码的jar包,org.me.MyTopology的main方法是Topology的入口,arg1、arg2和arg3为org.me.MyTopology执行时需要传入的参数。

2)停止Storm Topology:

storm kill {toponame}

其中,{toponame}为Topology提交到Storm集群时指定的Topology任务名称。

参考资料

1. https://github.com/nathanmarz/storm/wiki/Tutorial

2. https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster

© 著作权归作者所有

datapro
粉丝 16
博文 37
码字总数 22063
作品 0
广州
高级程序员
私信 提问
加载中

评论(0)

Twitter Storm集群搭建小结

最近自己尝试搭建了一下Twitter Storm的集群,参考了很多网友的博客,特别是徐明明的;这里只对自己搭建时的过程和所遇到的问题做一个小总结,方便查阅。 Storm是Twitter开源的一个实时计算框...

Breath_L
2012/10/21
7.4K
4
Storm入门 第三章 Storm安装部署步骤

本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以“注意事项”的形式给出。 3.1 Storm集群组件 Storm集群中包含...

坏坏一笑
2014/12/03
124
0
Kafka实战-Storm Cluster

1.概述   在《Kafka实战-实时日志统计流程》一文中,谈到了Storm的相关问题,在完成实时日志统计时,我们需要用到Storm去消费Kafka Cluster中的数据,所以,这里我单独给大家分享一篇Sto...

smartloli
2015/06/18
0
0
Apache Storm简介及安装

一、环境准备 3台虚拟机 ○ 主机名分别是:L0, L2, L3 ○ 操作系统:CentOS 6.7 ○ 已经装有JDK 7 ○ 已经装有 zookeeper-3.4.10 apache-storm-0.9.6.tar.gz 二、Storm简介 Apache Storm是一...

冬语
04/01
0
0
storm-环境搭建和第一个topology

从原理到操作,还是有点距离 :) 基于 Linux ubuntu 3.13.0-24-generic ------------- 预备工作 * java * python(>=2.6) * zeromq * jzmq * zookeeper 下载(不需安装) wget https://github......

深蓝苹果
2014/06/10
425
0

没有更多内容

加载失败,请刷新页面

加载更多

记录一题生产者消费者问题

//有一个容器,能存储一定的产品,有put和get方法,有两个生产者,8个消费者的线程阻塞 import java.util.LinkedList; import java.util.concurrent.TimeUnit; public class Test3<T> { Lin...

南桥北木
20分钟前
13
0
线程池源码解读——回归基础

线程池源码解读——回归基础 线程池源码解读——回归基础 线程池的好处: JDK提供的创建线程池: java 中创建线程的方式: 线程池源码解读: 记录的知识点: 线程池的好处: 降低资源的开销 ...

lihua20103181
22分钟前
54
0
2D游戏开发课程学习笔记(6)-pygame小游戏开发

游戏简介 使用pycharm开发的小游戏《嗷大喵快跑》。是一款比较简单的酷跑游戏,只有5关。 玩法介绍 按空格键控制可以让猫跳跃,要同时躲避子弹和恶龙的袭击。 结束以后会有高分榜。 游戏预览...

pl彭莉
25分钟前
37
0
pygame制作小游戏——魔塔大闯关

pygame制作小游戏——魔塔大闯关 开发工具:vscode 游戏介绍:一开始玩家有100的生命值,10的攻击力,10的防御力,玩家可以通过获得相应颜色的钥匙来打开相应颜色门,玩家可开挂一次,通过点...

JulYi
26分钟前
8
0
垃圾回收:可达性分析算法、生存还是死亡(两次标记)

判断哪些内存需要回收 引用计数算法、可达性分析算法。引用计数算法优点实现简单,但是无法判断循环引用。 可达性分析算法:通过一系列的GC ROOTS作为起点,往下搜索,所走过的路径叫引用链。...

mrsuperli
29分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部