关于HBase的一些零碎事
来源:互联网 发布:yy官方协议软件 编辑:程序博客网 时间:2024/05/02 02:24
对于HBase这种类似BigTable的系统,其优化之一是消除了磁盘的随机写。付出的代价是将最新的数据保存在内存表中,对内存有较大的需求。如果内存表的数量较多,则每个内存表就会在较小的时候刷到磁盘,导致磁盘文件多而且小。范围读取数据的时候就会跨多个数据文件甚至多个节点。为提升读性能,系统都会设计有compaction操作。另外为了防止某些情况下数据文件过大(hbase.hregion.max.filesize,默认256M,太大的数据文件在compaction等操作是对内存的消耗更大),HBase也设计了split操作。Compaction和Split操作,对于在线应用的响应时间都容易造成波动,他们的策略需要根据应用的特性进行调整。建议在业务低峰期手工调整。
HBase的regionserver宕机超过一定时间后,HMaster会将其所管理的region重新分布到其他存活的regionserver,由于数据和日志都持久在HDFS中,因此该操作不会导致数据丢失。但是重新分配的region需要根据日志恢复原regionserver中的内存表,这会导致宕机的region在这段时间内无法对外提供服务。而一旦重分布,宕机的节点起来后就相当于一个新的regionserver加入集群,为了平衡,需要再次将某些region分布到该server。 因此整个超时(zookeeper.session.timeout,默认3分钟)建议根据情况进行调整,一半情况下,宕机重启后即可恢复,如果重启需要10分钟,region重分布加恢复的时间要超过5分钟,那么还不如等节点重启。Region Server的内存表memstore如何在节点间做到更高的可用,是HBase的一个较大的挑战。Oceanbase也是采用内存表保持最新的更新数据,和HBase不同的是,Oceanbase使用的是集中的UpdateServer,只需要全力做好UpdateServer的容灾切换即可对业务连续性做到最小影响。分布还是集中,哪些功能分布,哪些功能集中,各自取不同平衡,是目前大部分分布式数据库或者存储的一个主要区别。当然,像Cassandra这种全分布的,架构上看起来很完美,实际应用起来反而问题更多。
对于java应用,线上运维最大的挑战之一就是heap管理。GC的方式,以及使用内存表和cache丢内存的消耗,可能导致局部阻塞应用或者stop the world全局阻塞或者OOM。因此HBase的很多参数设置都是针对这两种情况。HBase使用了较新的CMS GC(-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode)。
默认触发GC的时机是当年老代内存达到90%的时候,这个百分比由 -XX:CMSInitiatingOccupancyFraction=N 这个参数来设置。concurrent mode failed发生在这样一个场景:
当年老代内存达到90%的时候,CMS开始进行并发垃圾收集,于此同时,新生代还在迅速不断地晋升对象到年老代。当年老代CMS还未完成并发标记时,年老代满了,悲剧就发生了。CMS因为没内存可用不得不暂停mark,并触发一次全jvm的stop the world(挂起所有线程),然后采用单线程拷贝方式清理所有垃圾对象。这个过程会非常漫长。为了避免出现concurrent mode failed,我们应该让GC在未到90%时,就触发。
通过设置 -XX:CMSInitiatingOccupancyFraction=N
这个百分比, 可以简单的这么计算。如果你的 hfile.block.cache.size 和 hbase.regionserver.global.memstore.upperLimit 加起来有60%(默认),那么你可以设置 70-80,一般高10%左右差不多。
(以上CMS GC的说明引自HBase性能调优)
目前关于HBase的书不多,《Hadoop: The Definitive Guide》第二版有一章,另外最权威的要算官方的这本电子书了。
这篇是最近看HBase过程中的一些零碎的东西,记录于此备忘。
- 关于HBase的一些零碎事
- 关于HBase的一些零碎事
- 关于Python的一些零碎的东西
- 关于一些java的零碎的知识点
- 关于一些C#的零碎资料--转载
- 关于程序的一些零碎思考
- 关于微软的一些零碎思考
- 关于生活的一些零碎感悟
- 关于asp.net的一些零碎想法
- 黑马程序员--关于一些零碎的知识
- 关于C语言的一些零碎知识
- 关于面试的一些零碎想法
- 关于git的一些零碎知识
- hbase Web UI中的一些零碎
- 关于Hbase的一些优化
- 关于VGG以及一些零碎
- 一些零碎的整理
- MFC的一些零碎
- 11
- 2014年1月14日星期二(DEMO7-2,加载3D线框立方体物体模型)
- Longest Common Prefix
- 为什么用Win32forth编程的程序员不多
- 在Ubuntu 13.10 下安装支持SSL的Apache
- 关于HBase的一些零碎事
- 编译原理学习笔记05——(识别孙悟空72变之魔鬼特训—递归下降分析程序构造)——2014_1_20
- Maximum Subarray
- Letter Combinations of a Phone Number - LeetCode
- [MySQL Delay]生产环节主从延迟的问题解决过程记录: sync_binlog=0
- 关于 hadoop-2.2 配置中的 yarn.nodemanager.aux-services 项
- SAP Cloud offering (网络搜集)
- Binary Tree Inorder Traversal - LeetCode
- Search Insert Position