我是Storm和Cassandra的新手。我想用一个Bolt来写一个Spout发出的字符串,在Cassandra的一个列族中。我已经阅读了示例here,这对我来说似乎有点复杂,因为它在Cassandra DB中使用不同的类进行编写。此外,我想知道在Cassandra DB中写入字符串的次数。在这个例子中,对我来说,我们不知道如何控制在Cassandra DB中输入的字符串数量?
简单地说,我需要一个Bolt来将Spout发出的字符串写入Cassandra列族,例如200条记录?
提前致谢!
答案 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"));
}
}