简介:
由于对基础服务吞吐能力进行升级,目标tps10w+,mysql数据库无法承载,限制了基础服务的能力,需要将相关数据表进行迁出至nosql中,经过调研和比较后决定使用Hbase来进行数据存储。因为作者之前工作未涉及到如此大的数据量,也没有在项目中使用过Hbase因此需要进行技术调研,考虑到有些小伙伴可能和我有一样的,因此决定将调研和开发过程通过技术博客的形势记录下来,希望能给大家带来一些帮助和思考。
Hbase概览
Hbase简介:
当您需要对大数据进行随机、实时读写访问时,请使用ApacheHbase™。这个项目的目标是在商品硬件集群上托管非常大的表——数十亿行和数百万列。ApacheHbase是一个开源的、分布式的、版本化的、非关系的数据库,模仿谷歌的Chang等人的结构化数据分布式存储系统。就像Bigtable利用了谷歌文件系统提供的分布式数据存储一样,ApacheHbase在Hadoop和HDFS上提供了类似大表的功能。
——apache 对hbase简介
Hbase特性:
·线性和模块化可伸缩性
·数据的强一致性
·表的伸缩和配置灵活
·注册表服务器之间的自动故障转移支持
·简易的Java API 调用
·块缓存和布隆过滤器快速实时查询
·序列化支持:XML,Protobuf,二进制等
·可扩展的基于jruby的(JIRB) shell
·支持导出指标经过Hadoop metrics子系统,导出到文件,ganglia,或JMX
Hbase概念术语:
简单来说,应用程序是以表的方式在Hbase存储数据的。表是由行和列构成的,所有的列是从属于某一个列族的。行和列的交叉点称之为cell,cell是版本化的。cell的内容是不可分割的字节数组。表的行键也是一段字节数组,所以任何东西都可以保存进去,不论是字符串或者数字。Hbase的表是按key排序的,排序方式之针对字节的。所有的表都必须要有主键-key.
1.RowKey:主键,可以暂时对比Mysql数据库中表的主键(rowkey会和数据水平拆分region有关),请不要单纯的认为它只是一个简单的主键哦!
2.列族Column Family:Table在水平方向有一个或者多个ColumnFamily组成,一个ColumnFamily中可以由任意多个Column组成,即ColumnFamily支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。
个人解读:列簇,可以先将他看成是对表中列的一个分类,根据数据的类型和修改频率来分,像我们数据表中可能很多列插入数据后基本不变,有些列后续修改比较频繁就可以将它们通过列簇进行区分出来,这样在修改到的时候性能也会提升很多,同时列簇的数量建议不要太多
为什么列簇不要太多?
理由:更大的Region可以使你集群上的Region的总数量较少。 一般来言,更少的Region可以使你的集群运行更加流畅。(你可以自己随时手工将大Region切割,这样单个热点Region就会被分布在集群的更多节点上)。较少的Region较好。一般每个RegionServer在20到小几百之间。 调整Region大小以适合该数字。0.90.x 版本, 默认情况下单个Region是256MB。Region 大小的上界是 4Gb. 0.92.x 版本, 由于 HFile v2 已经将Region大小支持得大很多, (如, 20Gb).可能需要实验,基于硬件和应用需要进行配置。可以调整hbase-site.xml中的 hbase.hregion.max.filesize属性. RegionSize 也可以基于每个表设置: HTableDescriptorhttp://hbase.apache.org/apidocs/org/apache/hadoop/hbase/HTableDescriptor.html.
3.列column:由Hbase中的列族ColumnFamily + 列的名称(cell)组成列。
4.单元格cell:Hbase中通过row和columns确定的为一个存贮单元称为cell。
5.版本version:每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引
注:version在Hbase运行原理中也是很重要的,相同版本,最新版本,老版本有什么用,在使用要注意什么,这些都要清楚,否则你在使用中可能与遇到各种各样奇奇怪怪的问题。后面会专门写一篇Hbase版本相关的博客,在此先提醒各位同学要关注版本问题哟!!!
6.Hbase数据结构图:
| 行健(主键) | 列簇A(baseA:个人信息) | 列簇B (baseB:个人简介 ) | ||
| name | sex | interest | occupation | |
| rowkey0001 | 张三 | 男 | 撸啊撸 | 程序员 |
| rowkey0002 | 王小莉 | 女 | shopping | 网红 |
注:这张表用户表,我定义了两个列簇:根据修改频繁度和列分类(基础信息,简介),在设计Hbase表时大家要考虑冗余一些字段,也要考虑这些数据量带来存储空间大小做一些取舍衡量。
Hbase下载Hbase是建立Hadoop基础上的数据库文件,因此Hbase是分布式的数据库。Hbase也提供了单机版的安装。使用过程中请注意JDK,Hadoop,Hbase之间相对应的版本,避免发生未知问题!!!
JDK 和 Hbase 版本关系表: Hadoop和Hbase版本关系表:注1:Google公司有三篇重要的论文分别为《Google File System》、《Google Bigtable》和《Google MapReduce》,这三篇论文阐述了Google的三种技术,GFS分布式文件系统,Bigtable分布式数据存储系统,MapReduce编程模型。为后续解决分布式并行计算提供了参考。也为大数据技术的发展和应用提供了可能。
注2: 技术调研资料参考地址:
Hbase apache 官方地址
Hbase 官方文档中文版
看Google三篇重要论文有感
Hbase教程(一) Hbase入门教程



