简体   繁体   English

从 Apache Storm 写入 Mongodb

[英]Write to Mongodb from Apache storm

I am trying to write a custom stream grouping which writes to Mongodb.我正在尝试编写一个写入 Mongodb 的自定义流分组。 I am running a local cluster for now.我现在正在运行本地集群。 I have a custom stream class and a mongo object.我有一个自定义流类和一个 mongo 对象。 I write to mongodb in both the prepare() and chooseTask().我在 prepare() 和 chooseTask() 中都写入了 mongodb。 It writes to mongodb but the supervisors cannot start.它写入 mongodb,但主管无法启动。 I see this error in the supervisor log:我在主管日志中看到此错误:

b.s.d.worker [ERROR] Error on initialization of server mk-worker
java.lang.NoClassDefFoundError: com/mongodb/MongoClient

at storm.starter.MongoMonitorObject.<init>(MongoMonitorObject.java:23) ~[stormjar.jar:0.10.0]


at storm.starter.ModStreamGrouping.prepare(ModStreamGrouping.java:94)
 ~[stormjar.jar:0.10.0]

I am making changes in the storm starter project for now.我现在正在对 Storm 启动项目进行更改。

public class ModStreamGrouping implements CustomStreamGrouping, Serializable{

  java.util.List<java.lang.Integer> targetTasks = new ArrayList();

  @Override
  public List<Integer> chooseTasks(int taskId,List<Object> values) {
      System.out.println("taskiD = " + taskId);
      System.out.println("values = " + values);
      return numTasks[0];
  }

  @Override
  public void prepare(WorkerTopologyContext context, GlobalStreamId stream, java.util.List<java.lang.Integer> targetTasks) {

      MongoMonitorObject mmo = new 
      System.out.println(" in prep() ");
      System.out.println("targetTasks = " + targetTasks);
      numTasks = targetTasks.size();

  }
}

public class MongoMonitorObject {
  private static final Logger LOG = LoggerFactory.getLogger(MongoMonitorObject.class);

  public MongoMonitorObject(java.util.List<java.lang.Integer> targetTasks){
  try{
    MongoClient mongoClient = new MongoClient("localhost", 27017);
    DB db = mongoClient.getDB( "loadDB" );
    DBCollection collection = db.getCollection("testCollection");
    for (Integer task : targetTasks) {
       BasicDBObject document = new BasicDBObject();
       document.put("tid", task);
       collection.insert(document);
    }
  }

  catch (UnknownHostException e) {
    System.out.println(" in UnknownHostException ");
    LOG.info(" in UnknownHostException ");
  }
  catch (Exception e) {
    System.out.println(" in Exception ");
    LOG.info(" in Exception ");
  }
  }
}

The stream grouping is defined in a ModStreamGrouping.java and mongo connection is defined in MongoMonitorObject.java.流分组在 ModStreamGrouping.java 中定义,mongo 连接在 MongoMonitorObject.java 中定义。 Both belong to the package storm.starter.两者都属于storm.starter 包。

I can upload the topology but the supervisors cannot spawn workers.我可以上传拓扑,但主管不能产生工人。 There's a small link I'm missing somewhere but I don't know where exactly.我在某处遗漏了一个小链接,但我不知道具体在哪里。 I added the following in storm starter's pom.xml to include mongodb connectivity:我在 Storm starter 的 pom.xml 中添加了以下内容以包含 mongodb 连接:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>2.13.3</version>
</dependency>
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>bson</artifactId>
    <version>2.13.3</version>
</dependency>

Edit: I read it here: https://github.com/mongodb/mongo-java-driver编辑:我在这里阅读: https : //github.com/mongodb/mongo-java-driver

mongodb-java-driver is a all-in-one jar, it contains bson and core mongodb-java-driver 是一个多合一的 jar,它包含 bson 和 core

Therefore dependency mongodb-java-driver is enough.因此依赖mongodb-java-driver就足够了。

If use dependency mongodb-driver , dependencies bson and core are needed.如果使用依赖mongodb-driver ,则需要依赖bsoncore

Original post:原帖:

Try add mongodb-driver-core and use the newer version dependencies尝试添加mongodb-driver-core并使用较新版本的依赖项

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-core</artifactId>
    <version>3.2.2</version>
</dependency>

The MongoDB Java Driver uber-artifact, containing mongodb-driver, mongodb-driver-core, and bson MongoDB Java Driver uber-artifact,包含 mongodb-driver、mongodb-driver-core 和 bson

Check ithere 在这里检查

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM