更新时间:2024-08-05 GMT+08:00
Storm-HBase开发指引
操作场景
本章节只适用于Storm和HBase交互的场景。本章中描述的jar包的具体版本信息请以实际情况为准。
应用开发操作步骤
- 确认Storm和HBase组件已经安装,并正常运行。
- 将storm-examples导入到IntelliJ IDEA开发环境,请参见准备Storm应用开发环境。
- 下载并安装HBase客户端。
- 获取相关配置文件。获取方法如下:
在安装好的HBase客户端目录下找到目录“/opt/clientHbase/HBase/hbase/conf”,在该目录下获取到core-site.xml、hdfs-site.xml、hbase-site.xml配置文件。
- 获取相关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
- 在安装好的HBase客户端目录下找到目录HBase/hbase/lib,获取如下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()); }
部署运行及结果查看
- 导出本地jar包,请参见打包Strom样例工程应用。
- 将1中导出的本地Jar包,4中获取的配置文件和5中获取的jar包合并统一打出完整的业务jar包,请参见打包Strom应用业务。
- 执行命令提交拓扑。
storm jar /opt/jartarget/source.jar com.huawei.storm.example.hbase.SimpleHBaseTopology hbase-test
因为示例中的HBaseBolt并没有建表功能,在提交之前确保HBase中存在相应的表,若不存在需要手动建表,HBase shell建表语句如下create 'WordCount', 'cf'。
- 拓扑提交成功后请自行登录HBase集群查看。
父主题: Storm应用开发常见问题