关闭

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

标签: stormhbase
3792人阅读 评论(2) 收藏 举报
分类:

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());


0
0
查看评论

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

kafka+storm+hbase整合:kafka作为分布式消息系统,实时消息系统,有生产者和消费者;storm作为大数据的实时处理系统;hbase是apache hadoop 的数据库,其具有高效的读写性能! 这里把kafka生产的数据作为storm的源头spout来消费,经过bolt处理把结果保...
  • m0_37739193
  • m0_37739193
  • 2017-05-19 16:26
  • 2239

Storm、Kafka、Hbase 整合 java 例子

我的需求是从kafka里取数据数据,然后对数据进行加工,最后保存到HBase里。 1.拓扑 这里我的spout用的是storm-kafka-0.93.jar里的KafkaSpout类来作为输入源,我自己写的后边贴出来,不过我自己写的有问题,会把Topology跑死 packag...
  • lwb314
  • lwb314
  • 2015-07-30 09:45
  • 3993

Storm opaqueTridentKafkaSpout+HBaseMapState实例

需求Trident实现WordCount案例:Kafka+Storm+HBase,部署在集群中运行,其中 KafkaSpout使用OpaqueTridentKafkaSpout HBaseState使用HBaseMapState实现buildTopology()方法创建并返回tridentTop...
  • Nougats
  • Nougats
  • 2017-06-01 11:51
  • 1183

Storm Trident API 使用详解

一、概述      Storm Trident中的核心数据模型就是“Stream”,也就是说,Storm Trident处理的是Stream,但是实际上Stream是被成批处理的,Stream被切分成一个个的Batch分布到集群中,所有应用在Stream上的函数最...
  • qq_36864672
  • qq_36864672
  • 2017-12-12 14:44
  • 131

Storm之trident聚合操作介绍

转载自:http://blog.sina.com.cn/s/blog_6ff05a2c0101k6xj.html Trident主要有5类操作: 1、作用在本地的操作,不产生网络传输。 2、对数据流的重分布,不改变流的内容,但是产生网络传输。 3、聚合操作,有可能产生网络传输...
  • myrainblues
  • myrainblues
  • 2014-06-11 10:22
  • 8842

Storm1.1.0<trident+window+Hbase集成实现词频统计TopN>

1.温故而知新,使用词频统计实现TopN,以下是使用到的依赖:<dependencies> <dependency> <groupId>org.apache.storm</groupId> ...
  • Gpwner
  • Gpwner
  • 2017-07-10 16:10
  • 653

Storm trident state

Trident在读写有状态的数据源方面是有着一流的抽象封装的。状态既可以保留在topology的内部,比如说内存和HDFS,也可以放到外部存储当中,比如说Memcached或者Cassandra。这些都是使用同一套Trident API。 Trident以一种容错的方式来管理状态以至于当你在更新状...
  • opensure
  • opensure
  • 2015-05-19 17:39
  • 2899

Kafka+Storm+HBase项目Demo(7)--Trident使用

本文内容部分来自Trident Tutorial。Trident是基于Storm的实时计算模型的高级抽象。它可以实现高吞吐(每秒数百万条消息)的有状态流处理和低延迟分布式查询。如果以前使用过高级批处理工具(比如Pig或Cascading),则对Trident的概念会非常熟悉,比如连接、聚合、分组、功...
  • zhi_fu
  • zhi_fu
  • 2017-07-18 20:50
  • 258

Storm 时间滑动窗口+topN+Hbase

需求 wordcount使用滑动时间窗口,每10秒计算过去30秒的单词个数。并在该时间窗口排出TOP5,存入HBase中(排名作为Rowkey,word与count作为Column) 实现过程 自定义Function切割字符串 public static class Split exten...
  • Nougats
  • Nougats
  • 2017-06-09 22:46
  • 519

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 apache-storm-1.1.0.tar.gz hadoop-2.8.0.tar.gz jdk-8u...
  • Gpwner
  • Gpwner
  • 2017-05-28 23:06
  • 3105
    个人资料
    • 访问:1907525次
    • 积分:21641
    • 等级:
    • 排名:第411名
    • 原创:612篇
    • 转载:787篇
    • 译文:4篇
    • 评论:76条
    技术交流
    域名出售
    www.importnew.cn
    www.jinrimiantiao.com
    文章分类
    最新评论