`
flychao88
  • 浏览: 753286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】Hbase性能优化四个要点

 
阅读更多

1 hbase.hregion.max.filesize应该设置多少合适

  默认值:256M

  说明:Maximum HStoreFile size. If any one of a column families' HStoreFiles has grown to exceed this value, the hosting HRegion is split in two.

  HStoreFile的最大值。如果任何一个Column Family(或者说HStore)的HStoreFiles的大小超过这个值,那么,其所属的HRegion就会Split成两个。

  调优:

  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

 

  2 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因子数等

 

  3 从性能的角度谈table中family和qualifier的设置

  对于传统关系型数据库中的一张table,在业务转换到hbase上建模时,从性能的角度应该如何设置family和qualifier呢?

  最极端的,①每一列都设置成一个family,②一个表仅有一个family,所有列都是其中的一个qualifier,那么有什么区别呢?

  从读的方面考虑:

  family越多,那么获取每一个cell数据的优势越明显,因为io和网络都减少了。

  如果只有一个family,那么每一次读都会读取当前rowkey的所有数据,网络和io上会有一些损失。

  当然如果要获取的是固定的几列数据,那么把这几列写到一个family中比分别设置family要更好,因为只需一次请求就能拿回所有数据。

  从写的角度考虑:

  首先,内存方面来说,对于一个Region,会为每一个表的每一个Family分配一个Store,而每一个Store,都会分配一个MemStore,所以更多的family会消耗更多的内存。

  其次,从flush和compaction方面说,目前版本的hbase,在flush和compaction都是以region为单位的,也就是说当一个family达到flush条件时,该region的所有family所属的memstore都会flush一次,即使memstore中只有很少的数据也会触发flush而生成小文件。这样就增加了compaction发生的机率,而compaction也是以region为单位的,这样就很容易发生compaction风暴从而降低系统的整体吞吐量。

  第三,从split方面考虑,由于hfile是以family为单位的,因此对于多个family来说,数据被分散到了更多的hfile中,减小了split发生的机率。这是把双刃剑。更少的split会导致该region的体积比较大,由于balance是以region的数目而不是大小为单位来进行的,因此可能会导致balance失效。而从好的方面来说,更少的split会让系统提供更加稳定的在线服务。而坏处我们可以通过在请求的低谷时间进行人工的split和balance来避免掉。

  因此对于写比较多的系统,如果是离线应该,我们尽量只用一个family好了,但如果是在线应用,那还是应该根据应用的情况合理地分配family。

 

  4 hbase.regionserver.handler.count

  RegionServer端开启的RPC监听器实例个数,也即RegionServer能够处理的IO请求线程数。默认是10.

  此参数与内存息息相关。该值设置的时候,以监控内存为主要参考。

  对于 单次请求内存消耗较高的Big PUT场景(大容量单次PUT或设置了较大cache的scan,均属于Big PUT)或ReigonServer的内存比较紧张的场景,可以设置的相对较小。

  对于 单次请求内存消耗低,TPS(TransactionPerSecond,每秒事务处理量)要求非常高的场景,可以设置的相对大些。

分享到:
评论

相关推荐

    Hbase权威指南

    - 内存:足够的内存对于提高HBase性能至关重要,建议使用大容量内存。 - 存储:采用RAID或JBOD配置来提高磁盘I/O性能。 - IOPS:选择高IOPS的硬盘或固态硬盘来提升数据访问速度。 - **软件环境**: - Java环境:...

    hadoop+hbase系列配置文档

    #### 四、Hadoop与HBase配置要点 配置Hadoop与HBase时需要注意以下几点: - **Hadoop配置**:确保所有节点的时间同步;正确设置`core-site.xml`、`hdfs-site.xml`、`mapred-site.xml`等配置文件。 - **HBase配置**...

    大数据技术 Hadoop开发者第二期 MapReduce HDFS Hive Mahout HBase 共64页.pdf

    #### 四、Nutch 中 MapReduce 应用的几个特殊点 - **特殊点概述**:探讨在 Nutch 中使用 MapReduce 时遇到的一些特殊情况。 - **案例分析**:通过具体案例,展示如何应对这些特殊情况,包括但不限于数据分片、任务...

    数据库处理(基础设计实现)

    此外,考虑数据库性能优化,如合理设计索引,也是设计时需注意的要点。 3. **Spark与数据库交互**:Spark作为一个分布式计算框架,常用于大规模数据处理。它可以连接到多种类型的数据库进行数据读取和写入,如通过...

    谭志坚分析

    3. **库文件管理**:合理管理和升级依赖库文件有助于优化系统性能,减少不必要的资源消耗。 4. **工具集成**:利用Ambari等管理工具可以方便地进行集群监控和配置管理,提高工作效率。 5. **数据库与第三方服务集成*...

    基于Hadoop和OpenStack的数据平台.zip

    在实际操作中,Hadoop和OpenStack的整合可能会面临性能优化、安全防护、监控报警等问题。例如,合理配置Hadoop的参数以提高性能,使用Heat模板自动化部署Hadoop集群,通过Ceilometer进行资源监控,以及利用Keystone...

    MongoDB 43 道面试题及答案.docx

    分析器显示的是针对数据库的每个操作的性能特征,如果使用 profiler 查询时,速度比实际慢。 你能移动 moveChunk 目录下的旧文件吗? 是的,可以移动 moveChunk 目录中的旧文件,在正常的碎片操作期间,这些文件...

    NoSQL数据库笔谈

    - **要点**: 如何利用NoSQL技术优化照片存储和服务。 ##### 4. Twitter运维经验 - **要点**: 强调了监控、配置管理和故障恢复机制的重要性。 #### 五、总结 NoSQL数据库因其灵活性、可扩展性和高性能等特点,在...

    Pro Apache Hadoop 2nd Edition 2014

    4. **性能优化** - 提供了一系列关于如何优化Hadoop性能的实用建议,包括硬件选择、软件配置调整等方面的知识点。 5. **数据仓库与BI集成** - 讨论了如何将Hadoop与传统数据仓库技术和商业智能工具相结合,实现...

    基于Hadoop平台的分布式搜索引擎.zip

    1. 性能优化:通过调整Hadoop集群参数,如Block大小、MapReduce任务数量等,提高处理效率。同时,对索引进行压缩,减少存储空间。 2. 数据一致性:在分布式环境中,保持数据的一致性是一大挑战。可以通过Hadoop的...

    [Hadoop权威指南(第2版)].(Hadoop:The.Definitive.Guide).文字版.pdf

    - **性能优化**:提供了多种提升Hadoop应用性能的方法,例如数据分区、Combiner函数的应用等。 - **Hadoop生态系统**:详细介绍了与Hadoop相关的其他开源项目,如Hive、Pig、HBase等,以及它们如何相互配合共同解决...

    hadoop权威指南

    - **概念**: HBase是一个分布式的、面向列的NoSQL数据库系统。 - **特点**: - 实时读写能力。 - 高性能随机访问。 - 支持PB级别的数据量。 - **应用场景**: - 实时数据分析。 - 物联网应用。 - 社交网络。 ##...

Global site tag (gtag.js) - Google Analytics