Storm里的jave类加载问题
来源:互联网 发布:软件著作权侵权认定 编辑:程序博客网 时间:2024/06/01 09:25
其实我也不懂。
但是我昨天发现了一个问题,由此展开了实现,具体结果如下。
试验1:一个工程里边2个主函数,分别启动成2个服务
我的storm服务器,我每次把打包好的程序放上,发布了以后都要等一会才能运行。大概1分钟左右。
我这里的做法是
一个工程,其中有2个类都是主函数,A.java与B.Java
然后再A与B里我都调用了C.java与D.java。
然后我把工程打包成a.jar与b.jar
这个时候,我放到strom上,先启动a.jar,然后卡住了。
然后我又启动b.jar
如果我只启动a.jar,那么卡一分钟左右会执行。
但是当我启动a.jar以后马上改成启动b.jar
就会出现b.jar马上就执行了,但是a.jar就再也不执行了。
我目前的猜想是A与B都调用了C类。而B先加载了C类。所以A执行等待B释放C。所以A就卡住不懂了这只是我的猜想。
试验2:我要试验试验1里的猜想。看看是否存在2个jar会互相加载对方的class就因为路径一样。
环境同上,但是这次,我对D.java进行了修改。D不对数据库进行修改,上边的a.jar与b.jar里,D.java都会插入记录到数据库
然后我把工程再次打包成c.jar,这次我只启动c.jar这个时候问题来了!
c.jar启动以后,数据库里仍然被插入了数据,但是我的c.jar里的D.java是已经不往数据库里插数据了。
那么说明strom加载的是我a.jar或者b.jar里的D.java这个类。
于是我删除了服务器上在试验1里已经上传的a.jar与b.jar,只留下c.jar,再次启动c.jar,OK这次启动后不再往数据库里插入记录了。
得出结论就是不懂的jar包会加载其他jar包里与自己jar包里地址完全相同的类,引起程序错误,所以如果在strom上,跑2个任务,最好JAVA类都别重复。
试验3:strom加载的jar包到底应该放在哪里。
试验之前遇到的问题。
我的需求是在strom里从kafka里取数据出来然后插入到HBase里。
上边能够在strom里正常跑的任务已经有了,Hbase操作类我也写好了。
于是,我在strom的D.java里实例化了Hbase操作类。其中D.java是一个strom正常的Bolt
public class SimpleBolt2 extends BaseBasicBolt
Hbase操作类,正常在本地用主函数调用是没有问题的,能够正常插入数据,建表,删表等操作。
我这种写法在本地跑StromTopology也是没问题的,能够正常插入Hbase.
但是当我放到storm服务器上跑,问题来了。
主要是2个提示,第一个是
Hbase操作类不能被初始化 Could not initialize class HbaseUtil
第二个是HbaseUtil里加载的类,就是Hbase相关的类,不能被找到。classNofound
所以我怀疑是我的依赖包放的位置不对,没被加载,那么究竟应该怎么办。
试验具体步骤
我这里主要是要确定我的jar包应该放在什么位置,因为Hbase依赖包太多所以这里我做个别的试验。
首先我新建一个工程T1,里边只有一个类,CCC.java
然后打包成ccc.jar,我这里CCC.jar,实现了序列化接口。(其实实现接口与没实现接口我都试验了)。
然后我把ccc.jar加入我原来的工程,之后我在我的Bolt1里边调用了A.java,这个A.java就在我的Topology包里
然后AAA.java里实例化了CCC.java。
程序发布运行以后,就会报错,说是A.java里找不到CCC.java.我把ccc.jar放在storm安装目录的lib里
放在JDK里lib里,放在JRE的lib里,放在/usr/share/java里,都不行。
所以这个问题最后没解决!
在aboutyun里有人建议我把ccc.jar利用maven跟我的Topology打成一个jar包发布。这样就能找到了,但是我没试验过。
- Storm里的jave类加载问题
- jave类加载
- jave里JFormattedTextField的简单用法
- jave eclipse开发遇上的问题
- jave的抽象类与接口
- storm的日志问题
- storm消费kafka,没有往zk里写offset的问题
- Jave savepoint的用法
- 学习jave的学习方法
- JAVE的优势
- Jave的面向对象
- Mybaits的Jave API
- Jave Runtime类学习
- jave
- Jave conn to Oracle问题
- Jave web 中的乱码问题
- 关于加载android里 .so文件的问题
- Strut2里拦截器不能加载的问题
- 安卓加密
- android 4.2以上版本永不休眠
- Unity Mesh Collider 顶点太多报错
- 给stardict添加本地辞典
- 构造函数理解
- Storm里的jave类加载问题
- [CodeForces] Round #313 Div 2 E / Div 1 C Gerald and Giant Chess 不用容斥的递推组合数学
- 自动机,状态机,有限自动机,有限状态机,有限状态自动机,非确定下有限状态自动,确定性有限状态自动机的区别于联系
- GRE写作必备句型
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
- 使用PullToRefresh实现下拉刷新和上拉加载
- mysql启动错误[Bind on TCP/IP port:...]
- maven的安装与配置
- 【MySQL】解决windows下mysql匿名登陆无法使用mysql数据库的问题