My Octopress Blog

life and I

Twitter Storm

| Comments

简介

Twitter Storm是Twitter开源的一个实时流数据处理框架,主要基于Java,部分可用 python。原来是BackType开发的,后被Twitter收购,整理后开源。主要用于下面三个领域

  1. 信息流处理(stream processing): 处理实时数据和更新数据库
  2. 连续计算(continuous computation): 可以连续查询并反馈给用户
  3. 分布式远程过程调用(distributed rpc): 处理密集数据。

特点如下

  1. 编程模型类似mapreduce,简化复杂性
  2. 使用各种语言,默认支持clojure, java, ruby, python。支持其他语言需要实现storm的通信协议
  3. 容错性。管理工作进程和节点的故障
  4. 水平扩展。计算在多线程,进程和服务器间进行
  5. 可靠消息处理。storm保证每个消息至少被完整处理一次
  6. 快速。 使用zeromq为底层消息队列
  7. 本地模式。用于快速开发和调试

storm-start

编译及安装

jdk

首先需要安装jdk支持否则会提示缺少tools.jar,需要注意的是要安装jdk6,jdk7编译 会有问题。具体步骤见install jdk on ubuntu

注意如果先安装jdk,然后安装maven2的话,需要重新设置下jdk版本,具体见上面的安装

twitter4j

然后去下载twitter4j,否则安装时会 提示缺少这个库支持,而且也下载不来,应该是被墙了。

在编译twitter4j时,利用其文件夹内的package.sh文件。只有twitter-core编译成功 其他的没有库支持,而且也下不来,需要首先安装twitter-core

下载最新的jdk6进行编译的话,缺少json包支持,需要在twitter4j-core文件夹中的 pom.xml中添加json包依赖见maven2 json

需要忽略test进行编译打包,首先完成core的编译,然后安装

1
2
3
4
5
$cd  twitter4j-core
$mvn compile
$mvn package -Dmaven.test.skip=true
$mvn install:install-file -DgroupId=org.twitter4j -DartifactId=twitter4j-core -Dversion=2.2.6-SNAPSHOT -Dpackaging=jar -Dfile=target/twitter4j-core-2.2.6-SNAPSHOT.jar
$cd ..

然后编译安装twitter-async

1
2
3
4
5
$cd twitter4j-async
$mvn compile
$mvn package -Dmaven.test.skip=true
$mvn install:install-file -DgroupId=org.twitter4j -DartifactId=twitter4j-async -Dversion=2.2.6-SNAPSHOT -Dpackaging=jar -Dfile=target/twitter4j-async-2.2.6-SNAPSHOT.jar
$cd ..

最后编译安装twitter-stream

1
2
3
4
5
$cd twitter4j-stream
$mvn compile
$mvn package -Dmaven.test.skip=true
$mvn install:install-file -DgroupId=org.twitter4j -DartifactId=twitter4j-stream -Dversion=2.2.6-SNAPSHOT -Dpackaging=jar -Dfile=target/twitter4j-stream-2.2.6-SNAPSHOT.jar
$cd ..

storm-start

利用maven进行编译测试

1
mvn -f m2-pom.xml compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass=storm.starter.WordCountTopology

打包

1
mvn -f m2-pom.xml package

注:如果需要在单机模式下运行打包内的文件,需要首先安装storm的release版本 然后运行

1
storm jar target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology

安装storm

依赖

build-essential

1
sudo apt-get install build-essential

zookeeper

1
2
3
4
5
 wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
 tar zxf zookeeper-3.3.3.tar.gz
 cp -R zookeeper-3.3.3 /usr/local/
 ln -s /usr/local/zookeeper-3.3.3/ /usr/local/zookeeper
 vi ~./bashrc (设置ZOOKEEPER_HOME和ZOOKEEPER_HOME/bin)

编辑/etc/enviroment,添加

1
2
ZOOKEEPER_HOME=/usr/loacl/zookeeper
PATH="$PATH:$ZOOKEEPER_HOME/bin"

设置配置文件

1
2
3
 cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg (用zoo_sample.cfg制作$ZOOKEEPER_HOME/conf/zoo.cfg)
 sudo mkdir /tmp/zookeeper
 sudo mkdir /var/log/zookeeper

好的,zookeeper的单机安装已经完成了。

zeromq

1
2
3
4
5
6
7
 wget http://download.zeromq.org/historic/zeromq-2.1.7.tar.gz
 tar zxf zeromq-2.1.7.tar.gz
 cd zeromq-2.1.7
 ./configure
 make
 make install
 sudo ldconfig (更新LD_LIBRARY_PATH)

./configure时会遇到uuid

jzmq

1
2
3
4
5
6
7
8
9
 cd jzmq
 ./autogen.sh
 ./configure
 touch src/classdist_noinst.stamp
 cd src/org/zeromq/
 javac *.java
 cd ../../../
 make
 sudo make install

需要安装pkg-config, libtool, automake

需要创建classdist_noinst.stamp后编译java文件否则会报错

1
`classdist_noinst.stamp', needed by `org/zeromq/ZMQ.class'.  Stop

完成后设置PATH

参考

Twitter Storm:What & Why?

Twitter Storm 实时数据处理框架分析总结

Twitter Storm 在生产集群运行拓扑

Twitter Storm blog 参考

blog one

tter storm 配置项

storm-starter

storm

Twitter Storm 安装实战

安装twitter storm集群组件ZeroMQ,jzmq时遇到的一系列问题

taobaoer blog

Comments