/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.storm.hbase.topology; import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.StormSubmitter; import backtype.storm.topology.TopologyBuilder; import backtype.storm.tuple.Fields; import org.apache.storm.hbase.bolt.HBaseLookupBolt; import org.apache.storm.hbase.bolt.mapper.HBaseProjectionCriteria; import org.apache.storm.hbase.bolt.mapper.SimpleHBaseMapper; import java.util.HashMap; import java.util.Map; public class LookupWordCount { private static final String WORD_SPOUT = "WORD_SPOUT"; private static final String LOOKUP_BOLT = "LOOKUP_BOLT"; private static final String TOTAL_COUNT_BOLT = "TOTAL_COUNT_BOLT"; public static void main(String[] args) throws Exception { Config config = new Config(); Map<String, Object> hbConf = new HashMap<String, Object>(); if(args.length > 0){ hbConf.put("hbase.rootdir", args[0]); } config.put("hbase.conf", hbConf); WordSpout spout = new WordSpout(); TotalWordCounter totalBolt = new TotalWordCounter(); SimpleHBaseMapper mapper = new SimpleHBaseMapper().withRowKeyField("word"); HBaseProjectionCriteria projectionCriteria = new HBaseProjectionCriteria(); projectionCriteria.addColumn(new HBaseProjectionCriteria.ColumnMetaData("cf", "count")); WordCountValueMapper rowToTupleMapper = new WordCountValueMapper(); HBaseLookupBolt hBaseLookupBolt = new HBaseLookupBolt("WordCount", mapper, rowToTupleMapper) .withConfigKey("hbase.conf") .withProjectionCriteria(projectionCriteria); //wordspout -> lookupbolt -> totalCountBolt TopologyBuilder builder = new TopologyBuilder(); builder.setSpout(WORD_SPOUT, spout, 1); builder.setBolt(LOOKUP_BOLT, hBaseLookupBolt, 1).shuffleGrouping(WORD_SPOUT); builder.setBolt(TOTAL_COUNT_BOLT, totalBolt, 1).fieldsGrouping(LOOKUP_BOLT, new Fields("columnName")); if (args.length == 1) { LocalCluster cluster = new LocalCluster(); cluster.submitTopology("test", config, builder.createTopology()); Thread.sleep(30000); cluster.killTopology("test"); cluster.shutdown(); System.exit(0); } else if (args.length == 2) { StormSubmitter.submitTopology(args[1], config, builder.createTopology()); } else{ System.out.println("Usage: LookupWordCount <hbase.rootdir>"); } } }