风暴卡桑德拉整合

时间:2014-10-30 20:35:35

标签: cassandra apache-storm

我是Storm和Cassandra的新手。我想用一个Bolt来写一个Spout发出的字符串,在Cassandra的一个列族中。我已经阅读了示例here,这对我来说似乎有点复杂,因为它在Cassandra DB中使用不同的类进行编写。此外,我想知道在Cassandra DB中写入字符串的次数。在这个例子中,对我来说,我们不知道如何控制在Cassandra DB中输入的字符串数量?

简单地说,我需要一个Bolt来将Spout发出的字符串写入Cassandra列族,例如200条记录?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用Datastax Cassandra Driver或者您可以使用之前发布的storm-cassandra图书馆 您的要求不清楚。你只想存储200个元组? 无论如何,使用示例数据运行拓扑,并在流完成后,查询Cassandra,看看有什么。

Apache Storm和Apache Cassandra是非常深入和广泛的项目。没有学习它们并且为了学习而做示例项目。

答案 1 :(得分:1)

希望这会有所帮助。

    /*Main Class */
    TopologyBuilder builder = new TopologyBuilder();
    Config conf = new Config();
    conf.put("cassandra.keyspace", "Storm_Output"); //Key_space name
    conf.put("cassandra.nodes","ip-address-of-cassandra-machine");
    conf.put("cassandra.port",9042);
    //port on which cassandra is running (Default:9042)

    builder.setSpout("generator", new RandomSentenceSpout(), 1);

    builder.setBolt("counter", new CassandraInsertionBolt(), 1).shuffleGrouping("generator");

    builder.setBolt("CassandraBolt",new CassandraWriterBolt(
            async(
                    simpleQuery("INSERT INTO Storm_Output.tanle_name  (field1,field2 ) VALUES (?,?);")
                        .with(
                            fields("field1","field2 ")
                         )
                    )
            ), 1).globalGrouping("counter");  

    // Config conf = new Config();
    conf.setDebug(true);
    conf.setNumWorkers(1);

    StormSubmitter.submitTopologyWithProgressBar("Cassnadra-Insertion", conf, builder.createTopology());



/*Bolt sending data for insertion into cassandra */
/*CassandraWriter Bolt */
public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {

    Random rand=new Random();       
    basicOutputCollector.emit(new Values(rand.nextInt(20),rand.nextInt(20)));

}

public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
    // TODO Auto-generated method stub
    outputFieldsDeclarer.declare(new Fields("field1","field2"));
}

}