HBASE高级应用

标签: hbase 应用 | 发表时间:2014-12-15 17:53 | 作者:zhangxiong0301
出处:http://www.iteye.com

1、行健或表设计

 

基本原则是尽量把查询的维度或信息存入行健中,因为这样筛选数据的效率最高。从表的形式看,主要有列少行多的高表和行多列少的宽表,一般情况下高表更有优势,因为hbase只能按行拆分。

 

防止数据过热:当时间序列类型的数据(行健为时间戳)写入时,数据集中在一个region中,很容易产生读写热点。解决办法有:1)添加hash前缀,2)字段交换或提升权重:即在行键中添加另外一个字段或交换杭建中多个字段的位置,3)随机化,比如对整个行健取MD5,作为新的行健。以上方法顺序度的性能由高到低,而写入的速度由低到高。

 

行健决定数据的读取维度或模式,数据行行健有序。但如果需要额外的读取顺序,则可以给表添加格外的列族,用于存储其他读取顺序的索引。比如:对于收件箱应用,行健为userID,data列族存消息数据(列名为messageID,值为消息内容),而idx列族存索引(列为标示+消息主题,值为附加信息)。这样就可以在读取索引列族时,得到按主题有序的数据。

 

2、辅助索引

 

辅助索引是为了数据可以按行健之外的方式快速定位数据。解决方案有:

1)由客户端管理索引:维护数据表和辅助索引表两个表。当数据写入时,除了写入数据外,还要将数据表的行健写入索引表。这些操作全部由应用层客户端完成,很灵活,但是缺少事务特性,当数据写入成功而索引失败时两个表将不同步,可以采用定期修剪(如周期性的跑mapreduce任务来删除或增加不一致的条目)解决。

 

2)带索引的事务性HBASE(ITHBASE):开源、扩展了hbase,主要增加保证所有辅助索引更新一致性的事务功能。同样需要数据表和辅助索引表两张表,跟客户端管理索引不同的是这些操作都在服务器端自动完成。缺点是独立于hbase发行,可能不支持某些版本的hbase。

 

3)带索引的hbase:不同以上两种方式为每个索引单独建表存储,这种方式直接在内存存储索引。当region第一次被打开或者memstore被刷写到磁盘时,通过扫描整个region来建立索引。这种方式可能消耗大量的IO和时间资源,入侵性很强,在按照辅助索引定义的顺序查找时数据表上做的是随机查找,也存在hbase版本兼容问题;优点是数据时同步的不需要额外的事务支持,而且支持类型如byte等。

 

4)协处理器:使用协处理器框架提供的服务器端的钩子函数实现类似于ITHBASE和IHBASE的索引,但不需要替换任何服务器端类。协处理器为每个region载入索引层,并维护索引。

 

3、搜索集成

 

辅助索引可以按行健意外的顺序遍历表,但不能用任意关键字来搜索数据。实现方式有:

 

1)客户端管理索引:hbase存储数据,mapreduce任务生成索引,还需用hbase作为Lucene的后台存储。另一种实现方法是把数据表的更新也转发到邻近的索引服务器中。一个实现是facebook的收件箱搜索系统:每行是一个单独的收件箱即一个用户一行;列消息中被索引的词,时间戳是消息ID,值是附加信息如词在消息中的位置。

 

2)Lucene:一个外部托管的项目提供了BuildTableIndex类,这个类以前是hbase中contrib的一部分。该类扫描整个表并建立Lucene索引并存在hdfs上。这种方式只使用hbase存储数据。

3)HBasene:直接在hbase内部建立搜索索引,并提供lucene API。

4)协处理器:协处理器提供的钩子维护索引,索引直接存储在hdfs上,每个region都有自己索引,通过搜索分布在所有region上的索引以获取完整的结果。

 

4、事务

 

1)事务型HBASE:ITHbase有一些取代默认客户端类和服务器端类的扩展类,增加啦跨行甚至跨表的事务支持。每个region都保持了一个事务列表,从beginTransaction开始,到commit结束。每次读写操作有一个事务ID,保证不受其他事务影响。

 

2)zookeeper:利用znode实现分布式锁。

 

5、布隆过滤器

 

布隆过滤器有两种:行级过滤器和行加列级的过滤器。特别注意的是:当数据表中不包含特定的行时,布隆过滤器给出正确回答;相反则不一定正确;表数据在major合并之前,会存在很多文件,常规查找要加载所有可能包含特定行的所有文件的某个数据块,然后遍历这些数据块看是否真包含这些数据。因此,使用布隆过滤器的前提之一就是,同一行数据更新集中在少数存储文件上,要不然通过布隆过滤器也无法排除文件,还是得加载这些文件中的特定块。单元格比较小才合适加布隆过滤器,否则,不拢过滤器占用的空间会很大,反而增加IO负担。使用行加列不拢过滤器的的情况是:更新的一行数据分布在大部分存储文件,每个存储文件包含该行的一部分,且更新小部分列,且读模式为按列读。综上,决定是否使用布隆过滤器,取决于数据表的读写模式和单元格大小,而过滤原则是能有效过滤掉更多的存储文件。

 

6、版本管理

 

数据的版本或时间戳分隐式上版本管理和显式版本管理。隐式版本会有一些问题存在,主要发生在集群机器时间不同步时。如客户端写入一行数据,region服务器时间慢1小时,假如客户端再读出最近一个小时的数据,则会把刚写入的数据遗漏。另外,region拆分时把region一分为二,假如一个子region被分配到另外一台机器上,当另外这台机器更新数据时,可能时间戳小于之前的时间戳,从而导致最近更新的数据被认为是老数据。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [hbase 应用] 推荐:

HBASE高级应用

- - 数据库 - ITeye博客
基本原则是尽量把查询的维度或信息存入行健中,因为这样筛选数据的效率最高. 从表的形式看,主要有列少行多的高表和行多列少的宽表,一般情况下高表更有优势,因为hbase只能按行拆分. 防止数据过热:当时间序列类型的数据(行健为时间戳)写入时,数据集中在一个region中,很容易产生读写热点. 解决办法有:1)添加hash前缀,2)字段交换或提升权重:即在行键中添加另外一个字段或交换杭建中多个字段的位置,3)随机化,比如对整个行健取MD5,作为新的行健.

Hypertable应用实践:比肩HBase

- - 技术改变世界 创新驱动中国 - 《程序员》官网
Hypertable是一个开源、高性能、可伸缩的数据库,采用与Google的BigTable相似的模型. BigTable让用户可以通过一些主键来组织海量数据,并实现高效的查询. Hypertable和HBase分别是BigTable的两个开源实现:HBase主要使用Java语言开发,而Hypertable使用Boost C++,另外在一些细节的设计理念上也有所不同.

hbase两个典型应用实例

- - CSDN博客推荐文章
本文介绍hbase的两个典型应用实例OpenTSDB和地理信息系统. 学习一种技术最好的办法就是了解一个正在使用的应用系统是如何应用这种技术来解决问题的. 其中开源的OPenTSDB数据监控系统就是应用hbase解决数据存储的. 同时hbase还能很好的应对地理信息系统(GIS)中的两个挑战:大规模数据处理的延迟和空间位置建模.

HBase的一些应用设计tip

- - BlogJava_首页
1,对于HBase的存储设计,要考虑它的存储结构是:rowkey+columnFamily:columnQualifier+timestamp(version)+value = KeyValue in HBase,一个KeyValue依次按照rowkey,columnkey和timestamp有序.

HBASE在QIHOO 360搜索中的应用

- - 开源软件 - ITeye博客
【CSDN现场报道】中国IT界技术盛会——Hadoop与大数据技术大会(Hadoop&BigData Technology Conference 2012,HBTC 2012)于2012年11月30日-12月1日在北京新云南皇冠假日酒店隆重召开. 本次大会以“大数据共享与开放技术”为主题,聚焦于Hadoop与大 数据,力邀数十位国内外Hadoop及大数据技术应用的产学界人士和实践企业,探讨大数据技术生态系统的现状和发展趋势,并围绕Hadoop与大数据热点 技术和应用实践进行深入解析.

HBase 核心原理与应用场景

- -
HBase是大数据NoSQL领域里非常重要的分布式KV数据库,是一个高可靠、高性能、高伸缩的分布式存储系统,目前国内知名公司都有在大规模使用,社区也非常活跃. 本文就是学习HBase的敲门砖,主要从以下几个方面解读HBase. HBase是Google的BigTable的开源实现,底层存储引擎是基于LSM-Tree数据结构设计的.

HBase在淘宝的应用和优化小结

- - NoSQLFan
本文来自于NoSQLFan联合作者@ koven2049,他在淘宝从事Hadoop及HBase相关的应用和 优化. 对Hadoop、HBase都有深入的了解,本文就是其在工作中对HBase的应用优化小结,分享给大家. 原文地址: http://walkoven.com/?p=57. 文章PDF下载: http://walkoven.com/hbase:optimization and apply summary in taobao.pdf.

使用常用工具测试HBase应用

- - CSDN博客云计算推荐文章
虽然业界采用Apache HBase来构建终端用户应用的范围越来越多,但是许多这种应用并没有经过良好的测试. 通过这篇文章,你可以了解到有关这方面的一些容易实现的测试方法. 我们首先以 JUnit为例, 然后是 Mockito 和 Apache MRUnit, 接着会使用HBase的一个微型集群来做集成测试.

Pora2应用中HBase高并发读写性能优化

- - 搜索技术博客-淘宝
淘宝搜索的个性化离线实时分析系统Pora已升级至Pora2,Pora2是在基于Yarn的流式计算框架IStream基础上开发的,同时为保证数据和消息的实时处理系统中较多地使用了HBase,是一个典型的高并发读写HBase的分布式应用. 系统在发布之初遇到了比较严重的性能问题,表现为处理速度跟不上实时日志,并且整个Hadoop/HBase集群压力大,连带其它应用受影响.

理解Hadoop-Hbase原理与应用小结

- - 数据库 - ITeye博客
首先Hbase中的一个“元素”是由行键、列族名、限定符、时间戳唯一标识的并且行键作为数据行在表里的唯一标识,我们只有通过行键来访问列族别无他法. 修改数据:我们先找到要修改的行键把新的数据记录追加到对应的列族中并打上一个新时间戳代表最新版本. 删除数据:插入带有删除标记的行进入,相当于把整个行键所在的行删了.