
# Storm-HBase开发指引
#### 操作场景
本章节只适用于Storm和HBase交互的场景。本章中描述的jar包的具体版本信息请以实际情况为准。
#### 应用开发操作步骤
1. 确认Storm和HBase组件已经安装，并正常运行。
2. 将storm-examples导入到IntelliJ IDEA开发环境，请参见[准备Storm应用开发环境](https://support.huaweicloud.com/devg3-mrs/mrs_07_420005.html)。
3. 下载并安装HBase客户端。
4. 获取相关配置文件。获取方法如下：
   
   在安装好的HBase客户端目录下找到目录"/opt/clientHbase/HBase/hbase/conf"，在该目录下获取到core-site.xml、hdfs-site.xml、hbase-site.xml配置文件。
   
   
5. 获取相关jar包。获取方式如下：
   
   - 在安装好的HBase客户端目录下找到目录HBase/hbase/lib，获取如下jar包：
     - hbase-\*.jar
     
     - hadoop-\*.jar
     
     - jackson-core-asl-\<version\>.jar
     
     - jackson-mapper-asl-\<version\>.jar
     
     - commons-cli-\<version\>.jar
     
     - commons-io-\<version\>.jar
     
     - commons-lang-\<version\>.jar
     
     - commons-lang3-\<version\>.jar
     
     - commons-collections-\<version\>.jar
     
     - commons-configuration2-\<version\>.jar
     
     - guava-\<version\>.jar
     
     - protobuf-java-\<version\>.jar
     
     - netty-all-\<version\>.jar
     
     - zookeeper-\<version\>.jar
     
     - zookeeper-\<version\>.jar
     
     - zookeeper-jute-\<version\>.jar
     
     - metrics-core-\<version\>.jar
     
     - commons-validator-\<version\>.jar
      
   
   - 在HBase客户端安装目录下找到目录HBase/hbase/lib/client-facing-thirdparty，获取commons-logging-\<version\>.jar。
   
   - 在HBase客户端安装目录下找到目录HBase/hbase/lib/jdbc，获取htrace-core-\<version\>-incubating.jar和htrace-core4-\<version\>-incubating.jar。
   
   - 在样例工程"/src/storm-examples/storm-examples/lib"中获取如下jar包：
     - storm-hbase-\<version\>.jar
     
     - storm-autocreds-\<version\>.jar
      
   
   
   
   
 
#### IntelliJ IDEA代码样例
创建Topology。
```
public static void main(String[] args) throws Exception   
      {  
          Config conf = new Config(); 
          //增加kerberos认证所需的plugin到列表中，安全模式必选  
          setSecurityConf(conf,AuthenticationType.KEYTAB); 
          if(args.length >= 2)  
          {  
          //用户更改了默认的keytab文件名，这里需要将新的keytab文件名通过参数传入  
          conf.put(Config.STORM_CLIENT_KEYTAB_FILE, args[1]);  
          }  
          //hbase的客户端配置，这里只提供了“hbase.rootdir”配置项，参数可选  
          Map<String, Object> hbConf = new HashMap<String, Object>();  
          if(args.length >= 3)  
          {  
              hbConf.put("hbase.rootdir", args[2]);  
          }  
          //必配参数，若用户不输入，则该项为空  
          conf.put("hbase.conf", hbConf);  
          //spout为随机单词spout  
          WordSpout spout = new WordSpout();  
          WordCounter bolt = new WordCounter();  
          //HbaseMapper，用于解析tuple内容  
          SimpleHBaseMapper mapper = new SimpleHBaseMapper()  
                  .withRowKeyField("word")  
                  .withColumnFields(new Fields("word"))  
                  .withCounterFields(new Fields("count"))  
                  .withColumnFamily("cf");  
          //HBaseBolt，第一个参数为表名  
          //withConfigKey("hbase.conf")将hbase的客户端配置传入HBaseBolt  
          HBaseBolt hbase = new HBaseBolt("WordCount", mapper).withConfigKey("hbase.conf");  
          // wordSpout ==> countBolt ==> HBaseBolt  
          TopologyBuilder builder = new TopologyBuilder();  
          builder.setSpout(WORD_SPOUT, spout, 1);  
          builder.setBolt(COUNT_BOLT, bolt, 1).shuffleGrouping(WORD_SPOUT);  
          builder.setBolt(HBASE_BOLT, hbase, 1).fieldsGrouping(COUNT_BOLT, new Fields("word"));  
          //命令行提交拓扑  
          StormSubmitter.submitTopology(args[0], conf, builder.createTopology());  
  }
```
#### 部署运行及结果查看
1. 导出本地jar包，请参见[打包Storm样例工程应用](https://support.huaweicloud.com/devg3-mrs/mrs_07_420017.html)。
2. 将[1]中导出的本地Jar包，[4]中获取的配置文件和[5]中获取的jar包合并统一打出完整的业务jar包，请参见[打包Storm应用业务](https://support.huaweicloud.com/devg3-mrs/mrs_07_420018.html)。
3. 执行命令提交拓扑。 
   **storm jar /opt/jartarget/** **source.jar com.huawei** **.storm.example.hbase.SimpleHBaseTopology hbase-test**
   ![](https://support.huaweicloud.com/devg3-mrs/public_sys-resources/note_3.0-zh-cn.png)
   因为示例中的HBaseBolt并没有建表功能，在提交之前确保HBase中存在相应的表，若不存在需要手动建表，HBase shell建表语句如下**create 'WordCount', 'cf'**。
   
   
4. 拓扑提交成功后请自行登录HBase集群查看。
 
