本文详细描述如何在archlinux上搭建twitter storm cluster,转载请注明出处,谢谢。

有关archlinux基本系统安装,请参照archlinux简明安装指南一文,下面以上述为基础讲解如何一步步安装twitter storm cluster.

先列出安装主要步骤

  1. 安装oracle jdk
  2. 安装必须的编译工具gcc, g++, make
  3. 安装python2.7, unzip
  4. 编译安装zeromq
  5. 编译安装jzmq
  6. 下载lein
  7. 下载storm-starter
  8. 下载storm release版本
  9. 安装zookeeper为了自动运行storm cluster,安装supervisord

安装oracle jdk

在linux平台上标配的java是openjdk,如果要安装oracle的jdk的话,需要从官方下载相应的安装包。使用archlinux幸福的一点就是有yaourt,一切可以变得非常简单,:).

#yaourt -S jdk

注意安装完的java路径,应该是在/opt/java, 这个后面会用到。

修改/etc/profile, 添加环境变量JAVA_HOME,为PATH添加/opt/java/bin

PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/java/bin"
export PATH
export JAVA_HOME="/opt/java"

安装编译工具

在twitter storm中会使用zeromq,因为zeromq是用c&c++编写的,所以需要安装相应的编译工具,不要使用archlinux中的版本,因为目前pacman或aur中的zeromq版本是3.x,而twitter storm中需要的zeromq是2.1.7

#pacman -S gcc g++ libtool pkg-config make autoconf git util-linux

安装python2.7, unzip

#pacman -S python2 unzip 

编译安装zeromq,jzmq

从 http://download.zeromq.org/zeromq-2.1.7.tar.gz下载zeromq 2.1.7

#tar zvxf zeromq-2.1..tar.gz
#config
#make
#make install

安装的路径是/usr/local/lib

编译安装jzmq

#git clone https://github.com/nathanmarz/jzmq.git
#cd jzmq
#./autogen.sh
#./configure --with-zeromq=/usr/local
#make 注意,此处可能会出错,解决办法是修改jzmq/src/Makefile.am,将classdist_noinst.stamp修改为classnoinst.stamp
#make install

安装完zeromq和jzmq之后,修改/etc/ld.so.conf,在该文件中添加如下一行

/usr/local/lib

然后运行

#ldconfig 

为了验证libjzmq确实使用的zeromq是自行编译的版本,可使用如下命令进行检测。

#ldd /usr/local/lib/libjzmq.so
linux-gate.so. (0xb779e000)
libzmq.so.1 => /usr/local/lib/libzmq.so.1 (0xb7749000)
libuuid.so. => /usr/lib/libuuid.so. (0xb7743000)
librt.so. => /usr/lib/librt.so. (0xb773a000)
libpthread.so. => /usr/lib/libpthread.so. (0xb771e000)
libstdc++.so. => /usr/lib/libstdc++.so. (0xb7635000)
libm.so. => /usr/lib/libm.so. (0xb75ee000)
libc.so. => /usr/lib/libc.so. (0xb743e000)
libgcc_s.so. => /usr/lib/libgcc_s.so. (0xb7422000)
/usr/lib/ld-linux.so. (0xb779f000)

如果libzmq.so.1确实指向/usr/local/lib中的版本,则说明版本使用正确。

安装storm-starter

storm-starter是由storm的作者为了storm的初学者快速上手而创建的一个github项目。

#git clone https://github.com/nathanmarz/storm-starter.git

编译运行, 注意这是运行在local模式而非常cluster模式

#lein deps
#lein compile
#java -cp $(lein classpath) storm.starter.ExclamationTopology

注:

    直接从http://leiningen.org/下载lein script,而非直接使用pacman或yaourt来安装

#chmod +x ./lein
#cp ./lein /usr/local/bin
#export LEIN_ROOT=1 如果想以root来运行lein,需要设置该变量  

安装zookeeper

#yaourt -S zookeeper

作简单的配置,修改文件/etc/zookeeper/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/lib/zookeeper
# the port at which the clients will connect
clientPort=2181

因为zookeeper只对IPv6地址进行监听,为了强制其只监听IPv4地址,需要修改/opt/zookeeper-3.4.5/bin/zkServer.sh,在start)一节中加入 "-Djava.net.preferIPv4Stack=true", 整体看起来如下所示

case $ in
start)
echo -n "Starting zookeeper ... "
if [ -f $ZOOPIDFILE ]; then
if kill - `cat $ZOOPIDFILE` > /dev/null >&; then
echo $command already running as process `cat $ZOOPIDFILE`.
exit
fi
fi
nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
"-Djava.net.preferIPv4Stack=true" \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" >& < /dev/null &
if [ $? -eq ]
then
if /bin/echo -n $! > "$ZOOPIDFILE"
then
sleep
echo STARTED
else
echo FAILED TO WRITE PID
exit
fi
else
echo SERVER DID NOT START
exit
fi
;;

注意蓝底红字的一行。

启动zookeeper

#/opt/zookeeper-3.4./bin/zkServer.sh start 

下载安装storm

从storm-project.net下载storm-0.8.2,将其解压到/opt目录下

#unzip storm-0.8..zip

修改/opt/storm-0.8.2/conf/storm.yaml, 文件内容如下

########### These MUST be filled in for a storm configuration
storm.zookeeper.servers:
- "localhost"
# - "server2"
#
nimbus.host: "localhost"
#
#
# ##### 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.metrics.LoggingMetricsConsumer"
# parallelism.hint: 1
# - class: "org.mycompany.MyMetricsConsumer"
# parallelism.hint: 1
# argument:
# - endpoint: "metrics-collector.mycompany.org"
java.library.path: "/usr/local/lib:/usr/local/share/java"
supervisor.slots.ports:
- 6700
- 6701

注意:

  yaml要求配置项必须以空格打头

修改storm脚本,将#!/usr/bin/python改为#!/usr/bin/python2, /usr/bin/python是指向python3的所以需要显示将其改为python2

准备运行cluster模式了

#/opt/storm-0.8./bin/storm nimbus
#/opt/storm-0.8./bin/storm supervisor
#/opt/storm-0.8./bin/storm ui

上述每条指令需要单独运行在一个终端,如果ui启动成功,可以使用浏览器来访问localhost:8080查看整个cluster的状况了。

部署Topology到cluster

#./storm jar $HOME/working/storm-starter/target/storm-starter-0.0.-SNAPSHOT-standalone.jar storm.starter.ExclamationTopology exclamationTopology

一切顺利的话,应该可以看到类似的输出

0    [main] INFO  backtype.storm.StormSubmitter  - Jar not uploaded to master yet. Submitting jar...
91 [main] INFO backtype.storm.StormSubmitter - Uploading topology jar /root/working/storm-starter/target/storm-starter-0.0.1-SNAPSHOT-standalone.jar to assigned location: storm-local/nimbus/inbox/stormjar-c73d28f0-68fc-4e6e-98b5-c4d1355aa94f.jar
667 [main] INFO backtype.storm.StormSubmitter - Successfully uploaded topology jar to assigned location: storm-local/nimbus/inbox/stormjar-c73d28f0-68fc-4e6e-98b5-c4d1355aa94f.jar
670 [main] INFO backtype.storm.StormSubmitter - Submitting topology exclamationTopology in distributed mode with conf {"topology.workers":3,"topology.debug":true}
2449 [main] INFO backtype.storm.StormSubmitter - Finished submitting topology: exclamationTopology

自动化运行storm cluster

每次都要手工启动storm cluster并不是一件很令人愉快的事,最好是能自动启动。解决办法总是有的,使用python supervisor即可。

#pacman -S supervisor
#mkdir -p /var/log/storm

修改supervisor配置文件,在文件最后添加如下内容

[program:storm-nimbus]
environment=JAVA_HOME=/opt/java, PATH="/usr/sbin:/usr/bin:/usr/local/bin:/opt/java/bin"
command=/opt/storm-0.8.2/bin/storm nimbus
;;user=storm
autostart=true
autorestart=true
startsecs=10
startretries=999
log_stdout=true
log_stderr=true
logfile=/var/log/storm/nimbus.out
logfile_maxbytes=20MB
logfile_backups=10 [program:storm-supervisor]
environment=JAVA_HOME=/opt/java, PATH="/usr/sbin:/usr/bin:/usr/local/bin:/opt/java/bin"
command=/opt/storm-0.8.2/bin/storm supervisor
;;user=storm
autostart=true
autorestart=true
startsecs=10
startretries=999
log_stdout=true
log_stderr=true
logfile=/var/log/storm/supervisor.out
logfile_maxbytes=20MB
logfile_backups=10

注:

    在上述配置中显示加入了environment一行,主要是为了解决可执行文件搜索路径的问题,否则会报错说无法找到java可执行程序因其不在标准路径/usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin中。

启动supervisord

#systemctl start supervisord

想开机自动运行supervisord的话,执行如下指令

#systemctl enable supervisord

参考资料

  1. Running a Multi-Node Storm Cluster http://www.michael-noll.com/tutorials/running-multi-node-storm-cluster/

在archlinux上搭建twitter storm cluster的更多相关文章

  1. 【原】storm源码之mac os x编译twitter storm源码

    twitter storm是由backtype公司创始人nathanmarz一手研发和开源的流计算(实时计算)框架,堪称实时计算领域的hadoop.nathanmarz也是在mac os x环境下开发 ...

  2. 【转】Twitter Storm: 在生产集群上运行topology

    Twitter Storm: 在生产集群上运行topology 发表于 2011 年 10 月 07 日 由 xumingming 作者: xumingming | 可以转载, 但必须以超链接形式标明 ...

  3. 在CentOS上搭建Storm集群

    Here's a summary of the steps for setting up a Storm cluster: Set up a Zookeeper clusterInstall depe ...

  4. STORM_0002_在做好的zookeeper集群上搭建storm的开发环境

    参考文献http://www.cnblogs.com/panfeng412/archive/2012/11/30/how-to-install-and-deploy-storm-cluster.htm ...

  5. Kafka实战-Storm Cluster

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

  6. Twitter Storm 安装实战

    实际上安装Twitter Storm是上周三的事情了,周三的时候安装了一个单机版的,用WordCount跑了一下,感觉还不错.周四试着在集群上安装,碰到了一些问题,一直折腾到周五,留了个尾巴(没有做测 ...

  7. Twitter Storm源代码分析之ZooKeeper中的目录结构

    徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...

  8. twitter storm源码走读之1 -- nimbus启动场景分析

    欢迎转载,转载时请注明作者徽沪一郎及出处,谢谢. 本文详细介绍了twitter storm中的nimbus节点的启动场景,分析nimbus是如何一步步实现定义于storm.thrift中的servic ...

  9. [转载] 使用 Twitter Storm 处理实时的大数据

    转载自http://www.ibm.com/developerworks/cn/opensource/os-twitterstorm/ 流式处理大数据简介 Storm 是一个开源的.大数据处理系统,与 ...

随机推荐

  1. CSRF和XSS

    XSS(跨站脚本攻击): 攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击 XSS是什么?它的全名是:Cross-site scriptin ...

  2. 如何在Win8系统上建立WIFI热点

    1.首先将鼠标移到桌面左下角,单击右键,在弹出的快捷菜单中找到“命令提示符(管理员)”,点击 2.点击后,系统就以管理员权限打开了命令提示符,在命令提示符中输入以下命令“netsh wlan set ...

  3. 谈Web前端安全编码

    最近开发中涉及到有关输出正确的HTML标签这样的问题,正好对字符编码这块儿多看看,之前对这个方面认识的不深,思考的确实不够,如果下次再碰见类似的问题,若再次不少时间去调研的花,就得不偿失了. 就像正则 ...

  4. 学习配置vsftp 进行ftp文件的传输

    一. FTP 说明 linux 系统下常用的FTP 是vsftp, 即Very Security File Transfer Protocol. 还有一个是proftp(Profession ftp) ...

  5. js之事件冒泡和事件捕获介绍

    链接:http://www.jb51.net/article/42492.htm (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. (2)捕获型事件 ...

  6. PHP 判断数组里的值是否有存在

     一维数组检测<?php  $a = array('as','ddf','ddf','as','qwe','wer','ert'); $res = array_unique($a); var_d ...

  7. select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)

    select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型, 原型: int select(int maxfd,fd_set *rds ...

  8. Android判断App是否在前台运行(转)

    原文地址: http://blog.csdn.net/zuolongsnail/article/details/8168689 Android开发中,有时候需要判断App是否在前台运行. 代码实现如下 ...

  9. MATLAB信号与系统分析(五)——连续时间信号的频谱分析

    一.实验目的: 1.掌握傅立叶级数(FS),学会分析连续时间周期信号的频谱分析及MATLAB实现: 2.掌握傅立叶变换(FT),了解傅立叶变换的性质以及MATLAB实现. 二.利用符号运算求傅里叶级数 ...

  10. Android 贝塞尔曲线 折线图

    1.贝塞尔曲线:http://baike.baidu.com/view/60154.htm,在这里理解什么是贝塞尔曲线 2.直接上图: 3.100多行代码就可以画出贝塞尔曲线,直接上代码 packag ...