Storm-HBase集成--配置和开发

原创 2016年08月29日 12:07:32

1 Storm0.9.3中的对HBase的集成

Storm新版本0.9.3中重新整理和加入了对HBase的集成模块,除了基本的Bolt和Spout之外,加入了用于访问HBase的Trident。利用这个Trident,我们可以更加快速的编写Storm访问HBase的代码逻辑。

关于Storm-HBase模块中,几个主要的功能类如下:

类名 介绍
org.apache.storm.hbase.trident.mapper.TridentHBaseMapper
把HBase的Row Key, 列簇和列,对应到Storm Trident中Tuple的Field
org.apache.storm.hbase.trident.mapper.SimpleTridentHBaseMapper
上面的HBaseMapper的一个简单继承实现,指定Rowkey的Field和列簇/列的Field
org.apache.storm.hbase.bolt.mapper.HBaseValueMapper
用户继承这个类来实现把HBase的Cell映射成Storm中的Tuple,这个类通常是被继承后使用
org.apache.storm.hbase.trident.state.HBaseUpdater
更新HBaseState的类
org.apache.storm.hbase.trident.state.HBaseState
Trident中负责HBase数据的状态类
org.apache.storm.hbase.trident.state.HBaseStateFactory
工厂类,负责生产HBaseState对象
org.apache.storm.hbase.bolt.mapper.HBaseProjectionCriteria
负责定义HBase数据到Storm Tuple的投影,需要指定HBase的表名,列族名和列
org.apache.storm.hbase.security.HBaseSecurityUtil
专门用于让Storm通过HBase集群的Kerberos安全验证的类

2 代码示例

下面是一个完整的从Kafka中读取数据,并写入HBase的代码(Trident模式)。

// Storm Tuple中的两个Field,分别叫做word 和 count
Fields fields = new Fields("word", "count");
 
// 定义HBase配置相关和Kerberos相关
String hBaseConfigKey = "config_key";
System.setProperty("java.security.krb5.realm", "HADOOP.QIYI.COM");
System.setProperty("java.security.krb5.kdc", "kerberos-hadoop-dev001-shjj.qiyi.virtual");
 
//载入HBase和Kerberos相关配置,Config对象是来自backtype.storm.Config 类
Config conf = new Config();
conf.setDebug(true);
Map<String, String> hBaseConfigMap = new HashMap<String, String>();
hBaseConfigMap.put(HBaseSecurityUtil.STORM_KEYTAB_FILE_KEY, "/home/yeweichen/yeweichen.keytab");
hBaseConfigMap.put(HBaseSecurityUtil.STORM_USER_NAME_KEY, "yeweichen@HADOOP.QIYI.COM");
conf.put("config_key", hBaseConfigMap);
 
// 定义Trident拓扑,从Kafka中获取数据
TridentTopology tridentTopology = new TridentTopology();
BrokerHosts zk = new ZkHosts("10.121.43.14,10.121.43.17");
TridentKafkaConfig spoutConf = new TridentKafkaConfig(zk, "mytopic");
spoutConf.forceFromStart = true;
spoutConf.scheme = new SchemeAsMultiScheme(new StringScheme());
OpaqueTridentKafkaSpout spout = new OpaqueTridentKafkaSpout(spoutConf);
 
//定义HBase的Mapper,指定“word”字段的内容作为rowkey,列族名为cf
TridentHBaseMapper tridentHBaseMapper = new SimpleTridentHBaseMapper()
        .withColumnFamily("cf")
        .withColumnFields(new Fields("word"))
        .withColumnFields(new Fields("count"))
        .withRowKeyField("word");
 
// LogCollect就是自定义的Mapper
HBaseValueMapper rowToStormValueMapper = new LogCollectMapper();
 
//定义投影类,加入cf列族中的word和count两个列
HBaseProjectionCriteria projectionCriteria = new HBaseProjectionCriteria();
projectionCriteria.addColumn(new HBaseProjectionCriteria.ColumnMetaData("cf", "word"));
projectionCriteria.addColumn(new HBaseProjectionCriteria.ColumnMetaData("cf", "count"));
 
//定义HBaseState类的属性类Option
HBaseState.Options options = new HBaseState.Options()
        .withConfigKey(hBaseConfigKey)
        .withDurability(Durability.SYNC_WAL)
        .withMapper(tridentHBaseMapper)
        .withProjectionCriteria(projectionCriteria)
        .withRowToStormValueMapper(rowToStormValueMapper)
        .withTableName("storminput");
 
//使用工厂方法和Option生成HBaseState对象
StateFactory factory = new HBaseStateFactory(options);
 
//定义Stream,从Kafka中读出的数据,使用AddTimeFunction方法把它生成word和field两个字段,然后把他们写入HBase,如上面定义的,word字段作为row key
tridentTopology.newStream("myspout", spout).each(new Fields("str"), new AddTimeFunction(), new Fields("word", "count"))
        .partitionPersist(factory, fields, new HBaseUpdater(), new Fields());
 
// 提交拓扑
StormSubmitter.submitTopology(args[0], conf,tridentTopology.build());


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Kafka+storm+hbase<三者集成遇到坑以及解决办法>

本博客基于以下软件:Centos 7.3(1611) kafka_2.10-0.10.2.1.tgz zookeeper-3.4.10.tar.gz hbase-1.3.1-bin.tar.gz ap...
  • Gpwner
  • Gpwner
  • 2017年05月28日 23:06
  • 1920

Storm、Kafka、Hbase 整合 java 例子

我的需求是从kafka里取数据数据,然后对数据进行加工,最后保存到HBase里。 1.拓扑 这里我的spout用的是storm-kafka-0.93.jar里的KafkaSpout类来作为...
  • lwb314
  • lwb314
  • 2015年07月30日 09:45
  • 3743

kafka+storm+hbase整合试验(Wordcount)

kafka+storm+hbase整合:kafka作为分布式消息系统,实时消息系统,有生产者和消费者;storm作为大数据的实时处理系统;hbase是apache hadoop 的数据库,其具有高效的...

kafka+storm+hbase架构设计

kafka+storm+hbase架构设计 我们都知道,kafka作为分布式消息系统,实时消息系统,有生产者和消费者;storm作为大数据的实时处理系统;hbase是apache hadoop 的数据...

storm-hbase jar包中的bolt节点源码解析

一段时间内,大家都是自己在storm的节点中实现对hbase的操作,不管是普通的topo还是在trident中都是这样;不知道从那个版本起,在storm的压缩包中就多出了好几个jar包,把针对habs...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Storm opaqueTridentKafkaSpout+HBaseMapState实例

需求Trident实现WordCount案例:Kafka+Storm+HBase,部署在集群中运行,其中 KafkaSpout使用OpaqueTridentKafkaSpout HBaseStat...
  • Nougats
  • Nougats
  • 2017年06月01日 11:51
  • 753

Storm Trident 示例

Storm Trident的核心数据模型是一批一批被处理的“流”,“流”在集群的分区在集群的节点上,对“流”的操作也是并行的在每个分区上进行。 Trident有五种对“流”的操作: 1. ...

基于HBase做Storm 实时计算指标存储

HBase 做Storm 实时计算指标存储

Storm HBase遇到的问题

Storm HBase遇到的问题
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Storm-HBase集成--配置和开发
举报原因:
原因补充:

(最多只允许输入30个字)