我的apachestorm应用程序有问题,我是个初学者。特别是,在提交拓扑之后,当我尝试将一个螺栓连接到mongodb时。我有一个喷口可以发射随机值(只是为了测试),还有一个螺栓可以将它们插入mongodb。问题是,当喷口开始发射时,mongodb-bolt执行失败。我捕获了螺栓的异常运行时:
java.lang.NoClassDefFoundError: com/mongodb/MongoClient at bolts.MongoInsertBolt.prepare(MongoInsertBolt.java:29) at backtype.storm.daemon.executor$fn__5694$fn__5707.invoke(executor.clj:757) at backtype.storm.util$async_loop$fn__545.invoke(util.clj:477) at clojure.lang.AFn.run(AFn.java:22) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassNotFoundException: com.mongodb.MongoClient at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) [...]
此问题仅在群集模式下持续存在。在本地模式下,它工作得很好,我可以访问mongodb,提交查询等。这是我的bolt实现。
提前谢谢。
private MongoClient mongoClient;
private DBCollection table;
public void prepare(Map stormConf, TopologyContext context,OutputCollector collector) {
this.collector = collector;
this.mongoClient = new MongoClient("xxx.yyy.zzz.www",27020);
mongoClient.setWriteConcern(WriteConcern.SAFE);
DB db = mongoClient.getDB("DB_Storm");
this.table = db.getCollection("storm_netflow");
}
public void execute(Tuple input) {
String netflow = input.getStringByField("netpack");
BasicDBObject document = new BasicDBObject();
document.put("id", netflow);
this.table.insert(document);
[...]
this.mongoClient.close();
}
暂无答案!
目前还没有任何答案,快来回答吧!