分享

JStorm-0.9.6.2安装配置

desehawk 发表于 2015-2-14 23:12:50 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 1 53019

问题导读

1.如何安装JStorm UI?
2.如何验证JStorm 是否安装成功?







JStorm是由Alibaba开源的实时计算系统,它使用Java重写了Apache Storm(使用Clojure+Java混编),而且在原来的基础上做了很多改进的地方。使用Java重写,对于使用Java的开发人员来说,可以通过阅读源码来了解JStorm内部的原理和实现,而且可以根据运行错误日志来排查错误。
下面通过安装配置,以及简单使用的验证,来说明JStorm宏观上与Apache Storm的不同之处。
安装配置JStorm Server
首先,要保证JDK成功安装配置,然后在一个节点上下载、安装、配置JStorm。例如,我在hadoop1节点上,下载并解压缩:
  1. wget http://42.121.19.155/jstorm/jstorm-0.9.6.2.zip
  2. unzip jstorm-0.9.6.2.zip
  3. cd jstorm-0.9.6.2
复制代码
修改配置文件conf/storm.yaml,内容修改如下:
  1. ########### These MUST be filled in for a storm configuration
  2. storm.zookeeper.servers:
  3.      - "10.10.4.128"
  4.      - "10.10.4.129"
  5.      - "10.10.4.130"
  6. storm.zookeeper.root: "/jstorm"
  7. # %JSTORM_HOME% is the jstorm home directory
  8. storm.local.dir: "/tmp/jstorm/data"
  9. java.library.path: "/usr/local/lib:/opt/local/lib:/usr/lib"
  10. supervisor.slots.ports:
  11.     - 6800
  12.     - 6801
  13.     - 6802
  14.     - 6803
复制代码
要保证ZooKeeper集群已经成功启动,并在ZooKeeper中创建/jstorm,执行如下命令:
  1. ssh zookeeper@10.10.4.128
  2. /usr/local/zookeeper/bin/zkCli.sh
复制代码
然后创建/jstorm,执行如下命令:
  1. create /jstorm ""
复制代码
配置环境变量JSTORM_HOME,修改~/.bashrc文件,增加如下内容:
  1. export JSTORM_HOME=/home/kaolatj/jstorm-0.9.6.2
  2. export  PATH=$PATH:$JSTORM_HOME/bin
复制代码
使环境变量生效:
  1. source ~/.bashrc
复制代码
配置完上面内容后,需要创建~/.jstorm目录,并将配置好的storm.yaml文件拷贝到该目录下:
  1. mkdir ~/.jstorm
  2. cp -f $JSTORM_HOME/conf/storm.yaml ~/.jstorm
复制代码
最好在每个节点都执行上述配置,尤其是在提交Topology的时候,如果没有这个就会报错的。
最后,要将JStorm安装文件拷贝到集群其他从节点上,我这里有2个从节点hadoop2和hadoop3,执行如下命令:
同样,在从节点上配置好环境变量JSTORM_HOME。
安装JStorm UI
安装JStorm UI,可以安装在任何一个节点上,只要保证JStorm UI的安装包(WAR文件)的配置文件和JStorm集群相同即可。JStorm UI运行在Web容器之中,可以使用Tomcat。我这里,直接在Nimbus节点上安装Jstorm UI。
首先,安装Tomcat Web容器:
  1. wget http://apache.fayea.com/tomcat/tomcat-7/v7.0.57/bin/apache-tomcat-7.0.57.zip
  2. unzip apache-tomcat-7.0.57.zip
  3. cd apache-tomcat-7.0.57
  4. chmod +x bin/*.sh
复制代码

然后,将jstorm-ui-0.9.6.2.war软件包拷贝到Tomcat的webapps目录下,jstorm-ui-0.9.6.2.war直接在解压缩的jstorm-0.9.6.2.zip包中,拷贝即可:
  1. cp ~/jstorm-0.9.6.2/jstorm-ui-0.9.6.2.war webapps/
  2. mv ROOT ROOT.old
  3. ln -s jstorm-ui-0.9.6.2 ROOT
复制代码

在启动Tomcat之前,要保证配置文件$JSTORM_HOME/conf/storm.yaml拷贝到目录~/.jstorm下面。
最后,启动Tomcat,并查看日志:
  1. bin/catalina.sh start
  2. tail -100f logs/catalina.out
复制代码

JStorm UI安装完成后,可以通过访问http://10.10.4.125:8080即可看到Web UI界面。
另外,可以直接通过源码进行构建,将对应的配置配好的文件$JSTORM_HOME/conf/storm.yaml直接打包到WAR文件里面,然后就可以直接发布到Web容器中(如Tomcat),这样可以不用将$JSTORM_HOME/conf/storm.yaml拷贝到目录~/.jstorm下面。
验证JStorm
我这里写了一个相对比较复杂的JStorm程序,原来是基于apache-storm-0.9.2-incubating构建的应用,现在迁移到JStorm计算平台,保留了Apache Storm中一些工具包,像storm-kafka,同时还用到Kafka,在Storm UI上DAG图如下所示:
1.png

参考Maven依赖配置如下:
  1. <properties>
  2.      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3.      <jstorm.version>0.9.6.2-snapshot</jstorm.version>
  4. </properties>
  5. <dependencies>
  6.      <dependency>
  7.           <groupId>com.alibaba.jstorm</groupId>
  8.           <artifactId>jstorm-server</artifactId>
  9.           <version>${jstorm.version}</version>
  10.           <scope>provided</scope>
  11.      </dependency>
  12.      <dependency>
  13.           <groupId>com.alibaba.jstorm</groupId>
  14.           <artifactId>jstorm-client</artifactId>
  15.           <version>${jstorm.version}</version>
  16.           <scope>provided</scope>
  17.      </dependency>
  18.      <dependency>
  19.           <groupId>com.alibaba.jstorm</groupId>
  20.           <artifactId>jstorm-client-extension</artifactId>
  21.           <version>${jstorm.version}</version>
  22.           <scope>provided</scope>
  23.      </dependency>
  24.    
  25.      <dependency>
  26.           <groupId>org.apache.storm</groupId>
  27.           <artifactId>storm-kafka</artifactId>
  28.           <version>0.9.3-rc1</version>
  29.           <exclusions>
  30.                <exclusion>
  31.                     <groupId>log4j</groupId>
  32.                     <artifactId>log4j</artifactId>
  33.                </exclusion>
  34.           </exclusions>
  35.      </dependency>
  36.      <dependency>
  37.           <groupId>org.apache.kafka</groupId>
  38.           <artifactId>kafka_2.9.2</artifactId>
  39.           <version>0.8.1.1</version>
  40.           <exclusions>
  41.                <exclusion>
  42.                     <groupId>org.apache.zookeeper</groupId>
  43.                     <artifactId>zookeeper</artifactId>
  44.                </exclusion>
  45.                <exclusion>
  46.                     <groupId>log4j</groupId>
  47.                     <artifactId>log4j</artifactId>
  48.                </exclusion>
  49.           </exclusions>
  50.      </dependency>
  51.      <dependency>
  52.           <groupId>org.apache.hadoop</groupId>
  53.           <artifactId>hadoop-client</artifactId>
  54.           <version>2.2.0</version>
  55.           <exclusions>
  56.                <exclusion>
  57.                     <groupId>org.slf4j</groupId>
  58.                     <artifactId>slf4j-log4j12</artifactId>
  59.                </exclusion>
  60.           </exclusions>
  61.      </dependency>
  62.      <dependency>
  63.           <groupId>org.apache.hadoop</groupId>
  64.           <artifactId>hadoop-hdfs</artifactId>
  65.           <version>2.2.0</version>
  66.           <exclusions>
  67.                <exclusion>
  68.                     <groupId>org.slf4j</groupId>
  69.                     <artifactId>slf4j-log4j12</artifactId>
  70.                </exclusion>
  71.           </exclusions>
  72.      </dependency>
  73.      <dependency>
  74.           <groupId>com.github.ptgoetz</groupId>
  75.           <artifactId>storm-hdfs</artifactId>
  76.           <version>0.1.3-SNAPSHOT</version>
  77.      </dependency>
  78.      <dependency>
  79.           <groupId>commons-configuration</groupId>
  80.           <artifactId>commons-configuration</artifactId>
  81.           <version>1.10</version>
  82.      </dependency>
  83.      <dependency>
  84.           <groupId>org.slf4j</groupId>
  85.           <artifactId>slf4j-api</artifactId>
  86.           <version>1.7.5</version>
  87.           <scope>provided</scope>
  88.      </dependency>
  89.    
  90. </dependencies>
复制代码
提交Topology程序包到JStorm集群,执行如下命令:
  1. bin/jstorm jar ~/jstorm-msg-process-0.0.1-SNAPSHOT.jar org.shirdrn.storm.msg.MsgProcessTopology MsgProcessTopology
复制代码

然后,我们可以通过命令行来查看Topology列表:
  1. bin/jstorm list
复制代码
结果示例如下所示:
  1. ClusterSummary(supervisors:[SupervisorSummary(host:hadoop2, supervisor_id:43bb2701-4a3c-4941-8605-68000c66eea5, uptime_secs:89864, num_workers:4, num_used_workers:2), SupervisorSummary(host:hadoop3, supervisor_id:0e72bc94-52d2-4695-8c29-8fbf57d89c9c, uptime_secs:96051, num_workers:4, num_used_workers:3)], nimbus_uptime_secs:226520, topologies:[TopologySummary(id:WordCountTopology-1-1420369616, name:WordCountTopology, status:ACTIVE, uptime_secs:237166, num_tasks:5, num_workers:3, error_info:Y), TopologySummary(id:MsgProcessTopology-3-1420447738, name:MsgProcessTopology, status:ACTIVE, uptime_secs:159044, num_tasks:23, num_workers:2, error_info:)], version:0.9.6.2)
复制代码

接着再看一下JStorm UI首页的效果图,如图所示:

2.png

运行在JStorm集群上的MsgProcessTopology,点击上图中的Topology Name中的链接,就可以看到Topology的效果图,如下所示:

3.png

在Jstorm UI首页上,点击Supervisor节点链接,可以查看各个节点上运行的Topology及其Task的消息情况,示例如图所示:

4.png

点击Task List中的链接,还可以查看某个Task的明细信息,不再累述。
问题总结
如果原来基于Apache Storm开发的程序,理论上可以无需改动便可以运行在JStorm集群上,只不过在编译打包的时候,指定JStorm依赖:
  1. <dependency>
  2.      <groupId>com.alibaba.jstorm</groupId>
  3.      <artifactId>jstorm-server</artifactId>
  4.      <version>${jstorm.version}</version>
  5.      <scope>provided</scope>
  6. </dependency>
  7. <dependency>
  8.      <groupId>com.alibaba.jstorm</groupId>
  9.      <artifactId>jstorm-client</artifactId>
  10.      <version>${jstorm.version}</version>
  11.      <scope>provided</scope>
  12. </dependency>
  13. <dependency>
  14.      <groupId>com.alibaba.jstorm</groupId>
  15.      <artifactId>jstorm-client-extension</artifactId>
  16.      <version>${jstorm.version}</version>
  17.      <scope>provided</scope>
  18. </dependency>
复制代码

启动Nimbus和Supervisor进程的时候,一定要在后台启动,否则可能会出现进程无缘无故挂掉的问题,可以执行命令:
  1. nohup jstorm nimbus >/dev/null 2>&1 &
  2. nohup jstorm supervisor >/dev/null 2>&1 &
复制代码

如果忘记配置cp -f $JSTORM_HOME/conf/storm.yaml ~/.jstorm,在提交Topology到JStorm集群时,会出现如下错误:
  1. [INFO  2015-01-04 17:34:50 CuratorFrameworkImpl:238 main] Starting
  2. [WARN  2015-01-04 17:34:50 ClientCnxn:1102 main-SendThread(localhost:2181)] Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
  3. java.net.ConnectException: Connection refused
  4.      at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
  5.      at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:708)
  6.      at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361)
  7.      at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)
  8. [WARN  2015-01-04 17:34:51 ClientCnxn:1102 main-SendThread(localhost:2181)] Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
  9. java.net.ConnectException: Connection refused
复制代码

目前,在哪个节点上提交Topology,必须配置将 $JSTORM_HOME/conf/storm.yaml拷贝到~/.jstorm目录下,否则就会报错。
这个配置,我觉得以后JStorm可以做个优化,只要宿主机安装了JStorm程序,实际上就应该根据环境变量$JSTORM_HOME自动找到对应的配置文件$JSTORM_HOME/conf/storm.yaml。

在使用JStorm Maven依赖的时候,你可以无法在网上找到Public Repository,这时,你需要下载指定版本的JStorm源码,然后在你的开发主机上安装到本地Maven Repository,执行如下命令:
  1. cd ~/jstorm-0.9.6.2
  2. mvn install -DskipTests
复制代码

查看JStorm运行日志,每个Topology的程序运行日志会写入自己的日志文件,便于查看和排错,如图所示:

5.png


已有(1)人评论

跳转到指定楼层
igscn 发表于 2015-7-15 14:50:23
楼主你好,
  请问 jstorm不用指定nimbus和supervisor这些么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条