Hadoop学习笔记之HBase应用场景
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Hadoop学习笔记之HBase应用场景,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4122字,纯文字阅读大概需要6分钟。
内容图文
今天的主要来分析一下HBase的特点,提出一些真实的应用场景,利用HBase去解决应用中的效率问题;
- HBase特点概述
HBase是google的Bigtable的开源实现,建立在HDFS上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。
HBase介于nosql和rdbms之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。
主要用来存储非结构化和半结构化的松散数据。因为底层是Hadoop所以完全和hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。HBase中的表一般有这样的特点:
分析我们的业务的时候我们不要从关系数据库表的结构去构思未来表的结构。我们主要去看我们的数据的特点是否具备我们上面提到三个特点。如果具备的话我们一般认为这种业务数据适合放到HBase上来存储。
- 大:一个表可以有上亿行,上百万列;数据量大,并且表很宽;
- 面向列:面向列(族)的存储和权限控制,列(族)独立检索;
- 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏;
场景1:对变形金刚实时数据监控应用(虚拟场景)
1.场景描述:
2.业务分析
我们主要是对某个变形金刚的一段时间内状态进行分析,实时对变形金刚的状态进行监控和分析;
假如我们的每一帧数据作为一行的话,我们的表会很宽,有100个列簇,1000*100列;
我们来看我下设计图
- 从大这个特点上来我们这个场景是满足的。
- 从宽的特点上来说我们这个场景也是可以满足的。
- 变形金刚上提供数据传输模块,对1000个零部件的状态的指标进行监控并以1秒/帧实时传输到数据中心;
- 假如现在有100个变形金刚,数据量=1000(指标)*100个变形金刚=100000条指标;
- 一年的数据量是31536亿条指标,那么存储十年的数据的话我就不算了,太大了。
package com.hugy.hadoop.invoke; import java.io.IOException; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Random; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.Result; import com.hugy.hadoop.hbase.HBaseHelper; public class HBaseInvoke { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { System.out.println("HBase 操作开始..."); Configuration conf = new Configuration(); conf.set("hbase.zookeeper.quorum", "hadoop"); conf.set("hbase.zookeeper.property.clientPort", "2181"); HBaseHelper hbase = new HBaseHelper(conf); // 2.1创建表 String tableName = "thransformersdata";// 变形金刚指标数据存储表 hbase.deleteTable(tableName); String colFamilies[] = { "thransformer1","thransformer2","thransformer3","thransformer4","thransformer5"}; hbase.createTable(tableName, colFamilies); Random random = new Random(); Date starttime=new Date(); long rowkey = starttime.getTime()/1000; for (int x = 1; x <=5; x++)// 5秒钟的数据 { rowkey++; //一秒钟一帧数据 for (int i = 1; i <= 5; i++)// 5个变形金刚 { for (int j = 1; j <= 100; j++)// 100个指标 { hbase.insertRecord(tableName,Long.toString(rowkey), "thransformer"+i, "quota"+j, Float.toString(0.3f)); } } } // 2.4查询整个Table List<Result> list = null; list = hbase.getAllRecord(tableName); Iterator<Result> it = list.iterator(); while (it.hasNext()) { Result rs2 = it.next(); for (KeyValue kv : rs2.raw()) { System.out.print("row key is : " + new String(kv.getRow())); System.out.print("family is : " + new String(kv.getFamily())); System.out.print("qualifier is:" + new String(kv.getQualifier())); System.out.print("timestamp is:" + kv.getTimestamp()); System.out.println("Value is : " + new String(kv.getValue())); } } } }
部分输出结果输出如下:
row key is : 1406466972 family is? : thransformer3 qualifier is:quota91 timestamp is:1406495760290 Value? is? : 0.3
row key is : 1406466972 family is? : thransformer3 qualifier is:quota92 timestamp is:1406495760314 Value? is? : 0.3
row key is : 1406466972 family is? : thransformer3 qualifier is:quota93 timestamp is:1406495760352 Value? is? : 0.3
row key is : 1406466972 family is? : thransformer3 qualifier is:quota94 timestamp is:1406495760366 Value? is? : 0.3
row key is : 1406466972 family is? : thransformer3 qualifier is:quota95 timestamp is:1406495760379 Value? is? : 0.3
row key is : 1406466972 family is? : thransformer3 qualifier is:quota96 timestamp is:1406495760437 Value? is? : 0.3
row key is : 1406466972 family is? : thransformer3 qualifier is:quota97 timestamp is:1406495760450 Value? is? : 0.3
内容总结
以上是互联网集市为您收集整理的Hadoop学习笔记之HBase应用场景全部内容,希望文章能够帮你解决Hadoop学习笔记之HBase应用场景所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。