Storm-HBase集成--配置和开发
来源:互联网 发布:网络如何赚钱 编辑:程序博客网 时间:2024/06/01 16:46
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.HBaseStateTrident中负责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
- Storm-HBase集成--配置和开发
- Storm-HBase集成--配置和开发
- Storm-HBase集成--配置和开发
- storm-hbase集成:win7下用eclipse开发ubuntu上的storm-hbase程序
- Storm和JDBC native集成
- 集成Lucene和HBase
- hive和hbase集成
- Kafka+Storm+HBase项目Demo(3)--Storm安装配置
- Kafka+storm+hbase<三者集成遇到坑以及解决办法>
- storm安装和配置
- storm, kafka集成之本地开发、测试
- Storm集成Kafka应用的开发
- storm教程(六):Storm 和kafka的集成
- hive和hbase集成应用
- hive和hbase集成异常
- Twitter Storm: 配置开发环境
- Twitter Storm: 配置开发环境
- Twitter Storm: 配置开发环境
- Hystrx权威指南--Hystrix是什么
- Chapter04 编写基本的MapReduce程序(三) 非JAVA语言编写mapreduce程序2
- Linux curl命令模拟Http请求(get/post),绑定host访问
- 8.7 特征分解
- redis集群搭建
- Storm-HBase集成--配置和开发
- 使用docker部署codis
- ETL之kettle数据同步
- Android 开发实用小技巧
- MySQL索引介绍
- GO学习系列:设计模式 --- 简单工厂模式
- 优化--字典值/轮播图缓存优化以及页面静态化
- SSM/Web.xml配置信息
- I2C的物理层特点