`
wbj0110
  • 浏览: 1585998 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

HBase业务实践(转)

阅读更多

适合读者

2012年因为业务需求,我们的底层数据库从Mysql迁移到HBase上面,正好也亲身经历了HBase-Client从0.92到0.94变化。我们总结了一些业务上面使用HBase的办法,希望本文能够对业务上面刚刚使用HBase的人一些帮助,降低入门门槛。

准备工作

  • HBase Toturial,需要对HBase有一定的了解
  • Mysql 基础,需要对Mysql有一定的了解
  • Java 基础,需要对Java有一点的了解

为什么需要HBase

优势:

  • 再见了,分库分表。再见了,TDDL
  • 更高性能的读和写。

不足:

  • 没有SQL
  • 没有iBtatis、Hibernate这些ORM工具,HBase的ORM目前还不成熟
  • HBase的RowKey的设计要求比较高
  • 需要自己构建索引表

HBase的使用

构建单例的HBaseFactory

构建单例的HBaseFactory,我们只需要关心三个事情

  • hbase.zookeeper.quorum
  • zookeeper.znode.parent
  • HTablePool的maxSize

我们使用的是HTablePool构建一个HBaseFactory对象

*为什么使用HTablePool

HTablePool您可以看成JDBC的连接池,适合多线程使用环境,如果需要把连接“还”给连接池的话,只需要调用HTableInterface#close() 就可以了

HBaseFactory的Interface

 

 

HBaseFactory的Implemention

 

 

Usage

 

 

Scan

  1. StartRow&Cache如果不设置StartRow,那就会从头开始搜索,这样做的话速度就会很慢
    Cache能够保证一次搜索拿到内存的数据,否则您iterator一次就得走一次网络
  2. 关于FilterPrefixFilter是最常用的filter,有个非常需要注意的点
    如果Rowkey是”123_1_00000“这样的,如果prefix是123_1,切记切记要记得写成123_1_

     

    其次要注意filter不要太多,最好不要超过2个

  3. 关于分页在Mysql里面,常常需要用到分页,那么在HBase里面你该如何实现,使用PageFilter配合startRow,但是在Mysql里面常常会有一个总数的概念,切记切记HBase里面不要做类似Count的操作
  4. 关于分布式流式处理比方说,现在有10台机器,需要同时处理1000万的数据,那么这个时候,我们就可以用到checkAndPut。就像Mysql里面的一个乐观锁一样。

具体的做法是:

  • 我们通过PageFilterSingleColumnValueFilter配合startRow获取一部分数据
  • 然后用checkAndPut标记该数据正在处理
  • 最后再用put标记该数据已经处理

HBase实战经验

向下兼容

开发过程中,难免需要加字段的,那这个时候,就需要代码、数据能够向下兼容。

比方说我们现在需要新增一个column,因为是新加的一列,原来的数据这列就是null,那么这时候从HBase里面读到的值就是null,所以写HBase代码一定要注意:

  • 从HBase里面的数据一定要check null,如果是null,我就用一个默认值
  • 代表元数据的DO类的默认值,最好不要是nullnull永远不要存在在代码中
  • 再一次强调,非常建议数据用String的方式存储,因为可视化的数据能够帮您解决很多问题

 

 

RowKey的设计

  1. 建议使用String如果不是特殊要求,RowKey最好都是String。
    • 方便线上使用Shell查数据、排查错误
    • 更容易让数据均匀分布
    • 不必考虑存储成本
  2. RowKey的长度尽量短如果RowKey太长话,第一是,存储开销会增加,影响存储效率;第二是,内存中Rowkey字段过长,内存的利用率会降低,这会降低索引命中率。

    一般的做法是:

    • 时间使用Long来表示
    • 尽量使用编码压缩
  3. RowKey尽量散列RowKey的设计,最重要的是要保证散列,这样就会保证所有的数据都不都是在一个region上,避免做读写的时候负载将会集中在个别region上面。

    假设我们需要存储一个用户的所有微博(暂时不需要考虑时间倒排),这时候的RowKey的设计是UserId_WeiboId ,但是这样设计的话,UserId 的分布就很可能不均匀,因为RowKey是字符串排序的。

    有两种办法来解决这个问题

    • ReversesUserId字符串反转后存储
    • Hash或者ModUserIdMD5 后作取前6位为前缀加入到 UserId 前面
  4. RowKey排序假设我们有个很多微博用户发微博,但是这个时候,我们要开辟一个“广场”,所有的微博都是按照时间倒排序展示在这个“广场”里。这个时候我们就得为原来的UserId_WeiboId建立一张索引表,并且这个表的Rowkey要和时间相关
    • Rowkey的设计可以使用当前时间 - 微博发表时间的 long 值作为 RowKey 的前缀
    • RowKey散列
    • 如果数据可以定期清理如果数据不是需要一直保存的话,就算所有数据落在一个region,因为按时间搜索会指定startRow,存储时候Rowkey也是连续的,所以速度也非常块,当然数据容量最好和DBA商量一下
    • 如果数据都需要保存把DayOfMonth作为前缀

      那么RowKey会是 DayOfMonth_(当前时间 - 微博发表时间)

      不过这样在代码实现上面的时候会有一些麻烦。

  5. 关于事务目前HBase的Put,Delete操作都是事务的,但是如果您希望能够对好几个Table发起一连串操作并且希望是事务的话,目前还没有好的办法。所以HBase使用的时候,要有解决数据出错的觉悟
  6. http://rdc.taobao.org/?p=457

 

 

 

分享到:
评论

相关推荐

    阿里的HBase业务和容灾实践

    标题《阿里的HBase业务和容灾实践》所涉及的知识点非常丰富,覆盖了HBase的基础知识、业务应用、产品线使用建议、容灾策略以及HBase与MySQL的对比。下面将详细解读这些知识点: 1. HBase简介: HBase是一种开源的非...

    阿里的HBase业务和容灾实践.pdf

    阿里的HBase业务和容灾实践,阿里穆公大作,深入阿里内部使用,使用方向推荐必备。 阿里的HBase业务和容灾实践,阿里穆公大作,深入阿里内部使用,使用方向推荐必备。 阿里的HBase业务和容灾实践,阿里穆公...

    HBase最佳实践-读性能优化策略

    合理地进行优化配置,需要深入理解HBase的工作机制和数据存储模型,同时结合实际应用场景和业务需求,对各个参数进行微调,以达到最优的读取性能。在生产环境中,这种优化往往需要反复测试和调整,以实现系统性能的...

    藏经阁-Pinterest的HBase升级实践.pdf

    "Pinterest的HBase升级实践" Pinterest的HBase升级实践是一个关于将Pinterest的HBase从0.94版本升级到1.2版本的实践报告。本报告涵盖了HBase在Pinterest中的应用、升级的挑战、升级步骤、性能调整和最终结果。 一...

    Cloudera-HBase最佳实践及优化

    Cloudera作为一家专注于大数据技术的领先企业,其出品的HBase最佳实践及优化文档,对于使用HBase...通过对HBase深入的了解和实践,用户可以更好地利用其独特的功能来满足复杂的业务需求,并在大数据时代占据竞争优势。

    互联网金融Hbase大数据实践.pptx

    HBase 作为大数据实践中的重要组件,面临着多种挑战,如业务局限、二级索引和集群复制等。为了解决这些挑战,需要打造高性能、可靠、高可用的 HBase 数据中心。高性能需要优化写入和读取性能,降低延迟和提高可用性...

    HBase企业应用开发实战-高清

    《HBase企业应用开发实战》是一本深度剖析HBase在实际业务场景中应用的专业书籍,旨在帮助读者理解和掌握HBase的核心功能、设计理念以及在大规模数据处理中的应用策略。HBase,作为Apache的一个分布式、高性能、基于...

    1-8+携程+HBase+实践.pdf

    综上所述,携程在HBase的实践中展现出强大的大数据处理能力和精细化的运维管理,这为其业务的快速发展提供了坚实的技术支撑。通过深入理解这些实践,我们可以借鉴并应用于自己的大数据项目,提升系统的稳定性和效率...

    基于Mysql的表转HBase小Demo

    本示例“基于Mysql的表转HBase小Demo”提供了一个简单的解决方案,将Mysql中的数据转换并存储到HBase这种分布式列式数据库中。这个过程对于那些希望从传统的关系型数据库迁移到NoSQL数据库,尤其是对大规模数据进行...

    HBase应用实践专场HBaseforSolr.pdf

    根据提供的文档信息,我们可以深入探讨HBase在大数据和人工智能领域的应用实践,特别是关于HBase for Solr的应用场景和技术挑战。 ### HBase查询需求背景 在HBase的实际应用场景中,经常面临一些查询上的难题,...

    HBase最佳实践-读性能优化策略-3——HBase服务器端优化.pdf

    在HBase这样的分布式列式数据库中,读性能的优化至关重要,因为它直接影响到应用程序的响应速度和用户体验。...在实际应用中,还应注意定期评估优化效果,以便及时调整策略,适应不断变化的业务需求。

    HBase在大搜车金融业务中的应用实践

    在《HBase在大搜车金融业务中的应用实践》这一分享中,高级数据架构师申玉宝详细介绍了HBase如何应用于金融行业,尤其是针对大搜车的业务场景,包括数据大屏实践、GPS风控实践和流式数据统计等关键知识点。...

    高可用HBase的技术实践

    阿里巴巴自2011年5月开始使用HBase,至今已有超过200个业务在使用HBase,并且分布在10多个数据中心。单个HBase集群可达到上千台服务器的规模。HBase在阿里巴巴的应用主要包括以下几个方面: 1. **在线存取**:用于...

    HBase最佳实践–Scan用法大观园

    本文来自于范欣欣,文章主要从原理实践及场景介绍的,图文说明详细,希望对大家有帮助。HBase从用法的角度来讲其实乏陈可善,所有更新插入删除基本一两个API就可以搞定,要说稍微有点复杂的话,Scan的用法可能会多...

    HBase在小米中的应用实践

    小米使用HBase支持多种核心业务,如: - **米聊消息全存储**:利用HBase存储大量聊天记录,满足了高并发的写入需求。 - **小米云服务(MiCloud)**:存储用户的短信、通话记录等数据,支持大规模数据的快速查询和...

Global site tag (gtag.js) - Google Analytics