Jstorm是阿里在storm的基础上开发的一个流计算系统,提供比storm更多的功能和更好的稳定性。
github主页的中文文档对安装过程、基本概念等做了简单的叙述,在这里我根据我实际的安装过程中遇到的问题记录一下整个流程。
由于我搭建的集群环境没有外网,我提前下载好了所有需要的组件,也建议大家这么做,主要包括以下:
需要特别注意的是,Github的官方教程中提到了安装zeroMQ和jzmq,这两个其实不是必需的,消息队列我们可以根据自己的需求来配置。
另外强烈推荐安装 pdsh 和 pdcp ,这两个命令对管理大规模的分布式集群非常有用,可以减少大量工作量。
安装Python
# tar –jxvf Python-2.7.3.tar.bz2
# cd Python-2.7.3
# ./configure
# make
# make install
# cd /usr/bin
# ll |grep python
# rm -rf python
# ln -s Python_HOME/Python-2.7.3/python.exe ./python
# python
安装Java
# tar -zxf jdk-7u51-linux-i586.tar.gz
# vi ~/.bash_profile
#java env conf
export JAVA_HOME=<span style="color:#ff0000;">/your java directory</span>
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
# source ~/.bash_profile
最后在终端执行java -version确认一下。
安装ZooKeeper
# tar -zxf zookeeper-3.4.6.tar.gz
#ZooKeeper env conf
export ZOOKEEPER_HOME=<span style="color:#ff0000;">/your zookeeper directory</span>
export PATH=$ZOOKEEPER_HOME/bin:$PATH
export CLASSPATH=.:$ZOOKEEPER_HOME/lib
# mv zoo_sample.cfg zoo.cfg
dataDir - 顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort - 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
dataDir=$ZOOKEEPER_HOME/data
server.1=<span style="color:#ff0000;">第1个节点ip</span>:2888:3888
server.2=<span style="color:#ff0000;">第2个节点ip</span>:2888:3888
……
server.3=<span style="color:#ff0000;">第n个节点ip</span>:2888:3888
# zkServer.sh start
提示启动成功后可以执行jps查看是否有ZooKeeper的进程,也可以执行zkServer status查看详细信息。
安装Jstorm
unzip jstorm-0.9.3.zip
#jstorm env conf
export JSTORM_HOME=<span style="color:#ff0000;">/your jstorm directory</span>
export PATH=$JSTORM_HOME/bin:$PATH
source一下使之生效:
# source ~/.bash_profile
3.配置jstorm,配置文件为$JSTORM_HOME/conf/storm.yaml
配置项(红色为必须项):
- storm.zookeeper.servers: 表示zookeeper服务器的地址
- storm.zookeeper.root: 表示jstorm在zookeeper中的根目录,当多个JStorm共享一个ZOOKEEPER时,需要设置该选项,默认即为“/jstorm”
- nimbus.host: 表示nimbus的地址
- storm.local.dir: 表示jstorm临时数据存放目录,需要保证jstorm程序对该目录有写权限,如果一台机器同时运行storm和jstorm的话, 则不要共用一个目录,必须将二者分离开
- java.library.path: zeromq 和java zeromq library的安装目录,默认"/usr/local/lib:/opt/local/lib:/usr/lib"
- supervisor.slots.ports: 表示supervisor 提供的端口slot列表,注意不要和其他端口发生冲突,默认是68xx,而storm的是67xx
- supervisor.disk.slot: 表示提供数据目录,当一台机器有多块磁盘时,可以提供磁盘读写slot,方便有重IO操作的应用。
- topology.enable.classloader: false, 默认关闭classloader,如果应用的jar与jstorm的依赖的jar发生冲突,比如应用使用thrift9,但jstorm使用thrift7时,就需要打开classloader
- nimbus.groupfile.path: 如果需要做资源隔离,比如数据仓库使用多少资源,技术部使用多少资源,无线部门使用多少资源时,就需要打开分组功能, 设置一个配置文件的绝对路径,改配置文件如源码中group_file.ini所示
将ZooKeeper所有服务器的ip写在storm.zookeeper.servers下,注意每行写一个!
4.然后在提交jar的节点 和 计划安装WebUI的节点 上:
#mkdir ~/.jstorm
#cp -f $JSTORM_HOME/conf/storm.yaml ~/.jstorm
安装Jstorm Web UI (Tomcat)
下载地址:http://tomcat.apache.org/
必须使用tomcat 7.0 或以上版本, web ui 可以和nimbus不在同一个节点。
1.解压安装tomcat:
tar -xzf apache-tomcat-7.0.37.tar.gz
2.将服务器设置为jstorm的webUI:
cd apache-tomcat-7.0.37/webapps
cp $JSTORM_HOME/jstorm-ui-0.9.3.war ./
mv ROOT ROOT.old
ln -s jstorm-ui-0.9.3 ROOT
3.启动tomcat:
cd ../bin
./startup.sh
4.集群启动后访问该节点的8080(默认)端口即可访问jstorm webUI了。
启动jstorm集群
在nimbus 节点上执行 “nohup jstorm nimbus &”, 查看$JSTORM_HOME/logs/nimbus.log检查有无错误
在supervisor节点上执行 “nohup jstorm supervisor &”, 查看$JSTORM_HOME/logs/supervisor.log检查有无错误
访问安装webUI节点的8080端口可以查看整个集群的状态。
有什么问题欢迎一起讨论,一起进步。