storm学习(一):搭建storm单机调试环境
来源:互联网 发布:万网域名怎么样 编辑:程序博客网 时间:2024/05/04 05:23
最近工作需要,学习storm的使用。
这里做一下单机环境的搭建备忘:
storm官网地址:http://storm-project.net/
文档地址:http://storm-project.net/documentation.html
官方文档说明:
storm有两种操作模式:本地单机模式和远程模式。 本地模式可以用来开发以及测试topologies使用,本地模式模拟集群环境在本地的一个进程中。远程模式是将自己的topologies程序打包后提交到远程的集群环境中运行。
下面说一下本地单机模式环境的搭建:
单机模式主要是在代码中加入:
import backtype.storm.LocalCluster;LocalCluster cluster = new LocalCluster();用LocalCluster来模拟集群环境,所以单机环境的开发环境其实只需要讲storm的jar包放在classpath就可以了。
这里建议使用maven来管理依赖的jar包,pom.xml的例子,可以点击这里。
官方给出了一个storm-starter 例子。大家下载之后可以把项目导入到eclipse里导入之前把项目中的m2-pom.xml改成pom.xml,这样就可以被eclipse导入。
如果在eclipse里只要可以运行storm.starter.WordCountTopology 可以看到程序运行的效果。也可以使用maven来运行项目,执行如下命令:
$ mvn -f m2-pom.xml compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass=storm.starter.WordCountTopology
这里我在实际操作过程中遇到两个问题说明一下,
第一,storm-starter依赖的jar包找不到。 报 twitter4j-stream,twitter4j-core 这两个jar找不到,原因是资源库被墙获取不到,一个可以使用代理翻墙。另外可以修改版本设置有些版本的jar可以获取也不影响使用。修改pom.xml
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
<version>[2.2,)</version>
</dependency>
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-stream</artifactId>
<version>[2.2,)</version>
</dependency>
第二,是在运行的时候报错,错误提示某段python代码出错。 这个和我的本机环境有关,我本机安装了Python2.7 python3.3两个版本而这个代码报错的原因是使用了python3来执行python脚本。 我用ln -s修改了 python的默认链接指向python2.7再运行可以顺利执行。(这个例子里面为什么使用了python。由于刚刚接触还没有读代码也不太清楚)。
运行的截图如下:
最后再说一下本地安装storm。这个也算作开发环境一部分。使用场景是在本地上传jar包到集群环境下运行。
首先下载最新版本storm。解压到本地任何目录,解压后将storm目录里面bin 目录设置在环境变量path中。保证storm下bin/storm是可以运行的。
之后就可以使用storm命令进行jar包发布。不过需要修改storm的客户端配置。
在storm目录下conf/storm.yaml文件,设置nimbus.host: 为storm集群中nimbus所在的服务器ip地址 冒号后面注意要有空格。
这里在实际操作的过程中遇到几个问题:
1.storm修改配置之后没有生效,原因是storm脚本的问题。
CONF_DIR = os.path.expanduser("~/.storm") 这个说明storm配置文件设置在用户目录下的.storm文件夹中。
解决办法一个是把配置文件放在~/.storm目录中。另外一个方法是修改这段代码路径到配置文件所在的目录。之后保存推出问题解决。
2.执行storm list的时候报错
Exception in thread "main" java.lang.RuntimeException: org.apache.thrift7.protocol.TProtocolException: Required field 'supervisor_id' is unset! Struct:SupervisorSummary(host:hslave1, uptime_secs:531, num_workers:8, num_used_workers:0, supervisor_id:null)at storm.starter.ReachTopology.main(ReachTopology.java:194)Caused by: org.apache.thrift7.protocol.TProtocolException: Required field 'supervisor_id' is unset! Struct:SupervisorSummary(host:hslave1, uptime_secs:531, num_workers:8, num_used_workers:0, supervisor_id:null)at backtype.storm.generated.SupervisorSummary.validate(SupervisorSummary.java:682)at backtype.storm.generated.SupervisorSummary.read(SupervisorSummary.java:597)at backtype.storm.generated.ClusterSummary.read(ClusterSummary.java:456)at backtype.storm.generated.Nimbus$getClusterInfo_result.read(Nimbus.java:10648)at org.apache.thrift7.TServiceClient.receiveBase(TServiceClient.java:78)at backtype.storm.generated.Nimbus$Client.recv_getClusterInfo(Nimbus.java:451)at backtype.storm.generated.Nimbus$Client.getClusterInfo(Nimbus.java:439)at storm.starter.ReachTopology.main(ReachTopology.java:184)
原因是服务器用的storm版本与客户端使用的storm版本不一致,统一storm版本后问题解决
3.用storm jar执行storm-starter项目时发现还是在本地执行
执行的命令如下:
storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology
结果执行显示在本地执行
因为配置文件已经修改,排除配置文件的问题。
最后查看WordCountTopology的代码发现
if (args != null && args.length > 0) { conf.setNumWorkers(3); StormSubmitter.submitTopology(args[0], conf, builder.createTopology()); } else { conf.setMaxTaskParallelism(3); LocalCluster cluster = new LocalCluster(); cluster.submitTopology("word-count", conf, builder.createTopology()); Thread.sleep(10000); cluster.shutdown(); }
原来执行的时候需要后面加上参数否则就是在本地环境下运行
执行命令:
storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology wordCountTopology 执行正常问题解决
- storm学习(一):搭建storm单机调试环境
- storm单机环境搭建
- storm学习(二):搭建storm集群环境
- Storm单机环境配置
- Storm单机环境配置
- storm单机环境部署
- storm单机环境部署
- Windows下Storm+Kafka+Zookeeper单机开发环境搭建测试
- Storm单机环境部署文档
- Ubuntu单机版 Storm 开发环境搭建与org.apache.storm.utils.NimbusLeaderNotFoundException问题
- Storm学习(一)Storm介绍
- Storm学习(一) Storm介绍
- Storm学习(一)Storm介绍
- Storm学习(一)Storm介绍
- Storm学习一: Storm简介
- storm集群环境搭建
- storm 开发环境搭建
- Storm环境搭建注意事项
- MySQL引用外部sql脚本
- 挺有意思的一副对联
- VC6.0,OpenCV实现人脸特征检测
- android ListView监听滚动条滚动到底部时继续加载
- UIView的clipsTobounds属性
- storm学习(一):搭建storm单机调试环境
- 自定义Activity间切换的动画
- http协议详解
- C/C++对文件操作的小结
- java 形参、实参
- MFC与QT区别
- MySql数据库基本命令
- Linux版本选择三
- IE与Firefox属性float不兼容使用clearboth