Storm经验总结
来源:互联网 发布:游戏计时器软件 编辑:程序博客网 时间:2024/06/01 23:02
1. Storm启动命令
我启动Strom命令以后就卡在那了,Ctrl+C或者关闭SSH都会导致服务关闭。
正确的启动命令是
storm ui &
然后敲
exit
退出以后,再关闭SSH服务就不会关闭了。
2.Storm发布命令
我将我本地运行正常的StromTopology工程,打成jar包
放到了storm的安装目录下的lib下
我的目录是
/usr/local/apache-storm-0.9.3/lib
然后把a.jar包复制到这个目录下,然后敲命令
storm jar a.jar test.SimpleTopology lwb_1
其中,黑色的'storm jar'是strom命令;红色的是我工程的jar包;蓝色的是我jar包里的主函数;最后lwb_1是我给服务起的名字。
3.Storm加载问题
我用一个工程打了2个jar包名字不一样,其中a.jar里边用的主函数是A;b.jar主函数是B
当然,A与B在a.jar和b.jar都有。
然后在A类和B类里,我都调用了C类。
这个时候,我放到strom上,先启动a.jar,然后卡住了。不知道为什么,我这个strom每次发布服务以后,都得卡半天,大概一分钟左右的时间,才能开始执行。
然后我又启动b.jar
如果我只启动a.jar,那么卡一分钟左右会执行。
但是当我启动a.jar以后马上改成启动b.jar
就会出现b.jar马上就执行了,但是a.jar就再也不执行了。
我目前的猜想是A与B都调用了C类。而B先加载了C类。所以A执行等待B释放C。所以A就卡住不懂了这只是我的猜想。
所以我要说的是,如果在strom上,跑2个任务,最好类别重复。
4.Storm里Executor跟Task的关系
之前一直没怎么想网上跟资料上说的他们2的关系是什么意思。直到我写了下边的代码。
topologyBuilder.setBolt("simple-bolt", new SimpleBolt(), 3).setNumTasks(2).shuffleGrouping("simple-spout");
这里可以看见我在代码里显示的设置了Executor为3,Task的数量为2.
然后运行的时候我发现storm UI监控里Executor跟Task的数量都是2个。但是我程序里明明设置的是3个。
这个时候再回去想书上写的东西,我就明白了,Task是在Executor线程里边跑的,而且一个
Executor必须要有一个Task,这个时候,因为我的程序只设置了2个Task,所以有一个Executor根本没有Task可以跑,所以这个不是没有了,就是没跑。
所以在监控页看见的Executor跟Task的数量才都是2个。
5.storm多线程导致数据不对的问题。
这几天一直在做试验,我是从在strom的spout里从kafka里取数据出来,然后在bolt里插入到Hbase里。有的时候用多线程以后就会出现数据对不上的问题,找了半天。
最后发现是插入的时候,记录rowkey我用的是bolt里的一个Long型的静态变量,导致出现数据条数不对的情况,我把数据的rowkey保证唯一以后,问题不再出现。
5.storm的Bolt与Bolt之间可以直接传递对象因为Values就是继承了一下ArrayList,但是这个对象要传递就必须序列化,否则会报错。
public void execute(Tuple input) {try {A a = new A();String mesg = input.getString(0);Integer aaa = 1;if (mesg != null) { collector.emit(new Values( mesg+"mesg is processed!",mesg,a));// System.out.println("Bolt"+this.hashCode()+":"+mesg);}} catch (Exception e) {e.printStackTrace(); // To change body of catch statement use File |collector.fail(input);// Settings | File Templates.}collector.ack(input);}
在下个bolt里,直接取就可以,或者直接getValue也行,这里的"obj"是在declareOutputFields里声明的
A a = (A)input.getValueByField("obj");
A.java
public class A implements Serializable{/** * */private static final long serialVersionUID = -6812487879564685130L;public void aaa(String a) {HashMap<String, String> map = new HashMap<String, String>();System.out.println(a+map);}}
- Storm经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- HDU 1039 - Check Words
- Android开发技巧——PagerAdapter的再次简单封装
- Java中Date类与Calendar类的用法和转化
- 我的bashrc - PS1
- iOS开发UI篇—UITableview控件简单介绍
- Storm经验总结
- 用 Arduino Uno 给 Arduino Mini(Pro)烧录程序
- dubbo(分布式架构)+zookeeper(注册中心)+spring(provider和consumer) 基本使用
- 镜像网站
- Svn Intro - Trunk Branches Tags
- 安卓的四大组件
- Android中控件绕中心旋转动画
- GRE写作必备句型
- 母函数 hdu 1171