`
lc_koven
  • 浏览: 352597 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

对提高hbase写性能的一些思考

阅读更多

以下为使用hbase一段时间的三个思考,由于在内存充足的情况下hbase能提供比较满意的读性能,因此写性能是思考的重点。希望读者提出不同意见讨论

 

 

1 autoflush=false的影响

    无论是官方还是很多blog都提倡为了提高hbase的写入速度而在应用代码中设置autoflush=false,然后lz认为在在线应用中应该谨慎进行该设置。原因如下:

    a autoflush=false的原理是当客户端提交delete或put请求时,将该请求在客户端缓存,直到数据超过2M(hbase.client.write.buffer决定)或用户执行了hbase.flushcommits()时才向regionserver提交请求。因此即使htable.put()执行返回成功,也并非说明请求真的成功了。假如还没有达到该缓存而client崩溃,该部分数据将由于未发送到regionserver而丢失。这对于零容忍的在线服务是不可接受的。

    b autoflush=true虽然会让写入速度下降2-3倍,但是对于很多在线应用来说这都是必须打开的,也正是hbase为什么让它默认值为true的原因。当该值为true时,每次请求都会发往regionserver,而regionserver接收到请求后第一件事就是写hlog,因此对io的要求是非常高的,为了提高hbase的写入速度,应该尽可能高地提高io吞吐量,比如增加磁盘、使用raid卡、减少replication因子数等

 

2 hbase.hregion.max.filesize应该设置多少合适
    hbase中hfile的默认最大值(hbase.hregion.max.filesize)是256MB,而google的bigtable论文中对tablet的最大值也推荐为100-200MB,这个大小有什么秘密呢?
    众所周知hbase中数据一开始会写入memstore,当memstore满64MB以后,会flush到disk上而成为storefile。当storefile数量超过3时,会启动compaction过程将它们合并为一个storefile。这个过程中会删除一些timestamp过期的数据,比如update的数据。而当合并后的storefile大小大于hfile默认最大值时,会触发split动作,将它切分成两个region。
    lz进行了持续insert压力测试,并设置了不同的hbase.hregion.max.filesize,根据结果得到如下结论:值越小,平均吞吐量越大,但吞吐量越不稳定;值越大,平均吞吐量越小,吞吐量不稳定的时间相对更小。


    为什么会这样呢?推论如下:


    a 当hbase.hregion.max.filesize比较小时,触发split的机率更大,而split的时候会将region offline,因此在split结束的时间前,访问该region的请求将被block住,客户端自我block的时间默认为1s。当大量的region同时发生split时,系统的整体访问服务将大受影响。因此容易出现吞吐量及响应时间的不稳定现象
    b 当hbase.hregion.max.filesize比较大时,单个region中触发split的机率较小,大量region同时触发split的机率也较小,因此吞吐量较之小hfile尺寸更加稳定些。但是由于长期得不到split,因此同一个region内发生多次compaction的机会增加了。compaction的原理是将原有数据读一遍并重写一遍到hdfs上,然后再删除原有数据。无疑这种行为会降低以io为瓶颈的系统的速度,因此平均吞吐量会受到一些影响而下降。
    综合以上两种情况,hbase.hregion.max.filesize不宜过大或过小,256MB或许是一个更理想的经验参数。对于离线型的应用,调整为128MB会更加合适一些,而在线应用除非对split机制进行改造,否则不应该低于256MB

3 从性能的角度谈table中family和qualifier的设置
    对于传统关系型数据库中的一张table,在业务转换到hbase上建模时,从性能的角度应该如何设置family和qualifier呢?
    最极端的,可以每一列都设置成一个family,也可以只有一个family,但所有列都是其中的一个qualifier,那么有什么区别呢?
    family越多,那么获取每一个cell数据的优势越明显,因为io和网络都减少了,而如果只有一个family,那么每一次读都会读取当前rowkey的所有数据,网络和io上会有一些损失。
    当然如果要获取的是固定的几列数据,那么把这几列写到一个family中比分别设置family要更好,因为只需一次请求就能拿回所有数据。
    以上是从读的方面来考虑的,那么写呢?可以参考一下这篇文章:
http://hbase.apache.org/book/number.of.cfs.html
    首先,不同的family是在同一个region下面。而每一个family都会分配一个memstore,所以更多的family会消耗更多的内存。
    其次,目前版本的hbase,在flush和compaction都是以region为单位的,也就是说当一个family达到flush条件时,该region的所有family所属的memstore都会flush一次,即使memstore中只有很少的数据也会触发flush而生成小文件。这样就增加了compaction发生的机率,而compaction也是以region为单位的,这样就很容易发生compaction风暴从而降低系统的整体吞吐量。
    第三,由于hfile是以family为单位的,因此对于多个family来说,数据被分散到了更多的hfile中,减小了split发生的机率。这是把双刃剑。更少的split会导致该region的体积比较大,由于balance是以region的数目而不是大小为单位来进行的,因此可能会导致balance失效。而从好的方面来说,更少的split会让系统提供更加稳定的在线服务。

    上述第三点的好处对于在线应用来说是明显的,而坏处我们可以通过在请求的低谷时间进行人工的split和balance来避免掉。
     因此对于写比较多的系统,如果是离线应该,我们尽量只用一个family好了,但如果是在线应用,那还是应该根据应用的情况合理地分配family。

 

分享到:
评论

相关推荐

    藏经阁-No.3 当HBase遇上云的思考.pdf

    本文将对HBase在云环境下的应用和思考进行详细的分析和讨论。以下是从文件中提炼出的知识点: 1. 选择HBase的原因:HBase是一种高性能、可扩展的NoSQL数据库,适合处理大规模数据和高并发计算场景。 2. HBase云...

    No.3当HBase遇上云的思考.pdf

    展望未来的部分,则可能涉及HBase的发展趋势,以及云计算技术的演进对HBase应用的潜在影响。 在总结部分,文档指出了云计算中HBase应用的四个核心因素:分布式、提供扩展性计算力延伸、支持算子+SQL的非结构化数据...

    2013年中国数据库大会-09-主流开源NoSQL及分布式存储的应用与思考

    接着,我们看到了大会中关于主流开源NoSQL及分布式存储的应用与思考的 Agenda,包括对传统数据库与NoSQL的选择、典型开源NoSQL存储方案分析、分布式存储经典架构、大规模分布式存储系统设计等关键议题。 从提供的...

    java-大数据基础面试思考.zip

    在大数据场景下,传统的关系型数据库往往无法满足性能需求,因此NoSQL数据库如HBase、Cassandra等应运而生。理解NoSQL数据库的设计理念、数据模型以及它们与关系型数据库的区别,是Java大数据面试中的常见问题。 6...

    大数据技术知识点概要

    通过这些方法,可以显著提高HBase数据库的性能。 5. Spark核心编程 5.1 概述Spark Spark是一个开源的内存计算框架,它将数据加载到内存中进行处理,比传统的基于磁盘的计算框架(如Hadoop)速度更快。 5.2 生态...

    基于预分区策略的装备数据分布式存储方法.pdf

    1. 装备数据的分布式存储需求:随着传感器技术与计算机技术的进步,装备研制与生产过程中产生的数据量日益增长,这促使企业必须思考如何对这些海量、多源和异构的数据进行有效管理。分布式存储技术正是为了解决这一...

    数据库架构选型及平台化建设的思考与实践.pdf

    根据描述中的内容,我们可以推测文档可能涵盖了多种类型的数据库架构,如关系型数据库(如MySQL、Oracle)、分布式数据库(如Hadoop HBase、Cassandra)、NoSQL数据库(如MongoDB、Redis)以及内存数据库(如...

    大云NOSQL系统设计思考 --NOSQL在电信行业的应用 高清完整中文版PDF下载

    ### NoSQL在电信行业的应用及系统设计思考 #### 一、NoSQL概述及其在电信行业的应用背景 NoSQL(Not Only SQL / Non-relational)是一种非关系型数据库系统的统称,它突破了传统关系型数据库的限制,在面对大规模...

    HADOOP的问题和下一代解决方案

    HADOOP问题和下一代解决方案的知识点涉及的内容非常广泛,包括Hadoop的开源特性、商业支持、架构问题以及...这对于企业来说,意味着能够更加高效和低成本地处理大数据,同时也提出了对传统Hadoop集群架构的重新思考。

    Java架构师的岗位职责模板.doc.pdf

    * 参与解决开发过程中的技术问题,提高核心系统的性能、可扩展性和可维护性 * 负责指导和共享技术团队,促进团队代码质量和性能意识的提高 技术要求 * 良好的抽象能力和面向对象的分析和设计能力,具有业务建模...

    崔宝秋:拥抱开源,小米的开源经验分享

    崔宝秋还指出,自主开发虽然可以增加控制力,但研发成本大,存在试错风险,还可能出现对性能和功能评估的误判,以及低估业务增长带来的压力等问题。 针对这些问题,小米有一套自己的开源原则,包括追求快速开发、不...

    2014大数据技术大会PPT合集1

    SDN允许对网络流量进行更灵活的控制,从而可能改善数据可视化过程中的数据传输和处理。他可能讨论了如何通过SDN技术优化大数据流的路由,以实现更高效的数据可视化解决方案。 Zhu Tao的《The "Nanotechnology" in ...

    菜鸟实时数仓技术架构演进.docx

    实时数仓技术架构的演进对于提高数据处理速度、降低成本、确保数据一致性至关重要。菜鸟的技术团队在实践中不断优化其实时数仓架构,以适应日益增长的订单量和对时效性的严格要求。 一. 以前的实时数据技术架构 1...

    菜鸟实时数仓技术架构演进.pdf

    菜鸟网络作为物流供应链的核心企业,对数据处理的实时性和准确性有着极高的要求。传统离线数仓已经无法满足这样的需求,因此,菜鸟的技术团队不断演进其实时数仓技术架构,以应对海量订单和时间敏感性的挑战。 一、...

    5-6度小满金融超大规模图平台实践.pdf

    通过图数据库HBase、Spark、NFS、GPU和K8S等技术,构建了一个具有强大扩展性和高性能查询能力的平台。 2. **图模型训练** 随着数据规模的增加,图模型训练面临着采样和计算复杂度的挑战。度小满在比较了如Euler、...

    美团JVM问题定位和排错

    ### 美团JVM问题定位和排错 ...通过对问题的细致分析和分类,结合具体的案例实践,可以有效地提高问题解决的效率和质量。未来,随着技术的发展,还需要不断更新和完善这一套方法论,以应对更加复杂的技术挑战。

    2017阿里技术年度精选(上)

    这些文章和访谈都倾注了阿里工程师们的心血,不仅包括了技术实践的总结,也涵盖了对技术趋势的思考和展望。希望本书能够帮助读者窥探技术的奥秘,吸取阿里技术团队的智慧精华,最终在技术探索的道路上获得进步和成就...

Global site tag (gtag.js) - Google Analytics