HBase使用优化(持续更新)
2013-07-18 10:27
323 查看
这里只准备介绍我实际操作中遇到的一些使用优化或解决办法,想大致了解hbase优化的同学可以参考我之前转載的几篇博文。
1. 第一个我想说的是HBase的写操作,api层面上的优化(比如批量写,关闭wal之类的)我这里就不啰嗦了,我想要说的是rowKey的设计,这个问题一般会跟io的大小息息相关,io越大,rowKey的设计就必须更谨慎,避免出现数据热点,往往一个不好的设计会导致某些regionserver的负载非常大,而某些regionserver则非常空闲,严重影响读写性能及可用性。比如一个以时间戳作为rowkey的表设计,往往新产生的日志写入都是在最后的region,这样的话不管该表的regions怎么分布,所有的写入压力都只在管理最后region的regionserver上。如果存在多个这样的表,极有可能使某个regionserver的负载过大而导致regionserver宕掉,所以我们最好不要用时间戳作为rowkey前缀。我以前管理过这么一个hbase集群,规模不大,但每天的写入量不小,它的表基本都是以时间戳作为前缀,然后呢每次监控都会有某几台机器各种飘红,然后宕掉,最后整个集群瘫痪,无奈之下只能手动的均衡当前被写入的region,尽量把当前活跃的region平分到各个regionserver上,这样才稳定了集群。同时随着当前活跃region的变换,得定期做移动操作(hbase
shell move命令),所以这不是一个有效的解决办法,另外还有一个解决的办法就是自定义HBase的LoadBanlance,通过改变region的分布策略来均衡HBase集群的负载,这个功能在0.92及以后的版本中实现。可参考淘宝技术博的一遍文章《HBase中如何开发LoadBalance插件》
2. 第二个我想说的是Hbase的读操作,往往我们批量分析hbase数据的时候会用到scan,用提供的api,不得不说,性能不怎么样,拿count操作来举例,往往count一个表得等到你大眼瞪小眼,但这你怨不得它,单线程么,所以我们在批量读的时候可以把rowkey分段,通过多线程来读,这有点类似于hive的思路,但比hive简单,这样读起来性能会快很多。至于怎么分段,就看你的表设计和数据量了,提供一个简单的分段方法,就是按region的起始rowkey来分。
3. ……
1. 第一个我想说的是HBase的写操作,api层面上的优化(比如批量写,关闭wal之类的)我这里就不啰嗦了,我想要说的是rowKey的设计,这个问题一般会跟io的大小息息相关,io越大,rowKey的设计就必须更谨慎,避免出现数据热点,往往一个不好的设计会导致某些regionserver的负载非常大,而某些regionserver则非常空闲,严重影响读写性能及可用性。比如一个以时间戳作为rowkey的表设计,往往新产生的日志写入都是在最后的region,这样的话不管该表的regions怎么分布,所有的写入压力都只在管理最后region的regionserver上。如果存在多个这样的表,极有可能使某个regionserver的负载过大而导致regionserver宕掉,所以我们最好不要用时间戳作为rowkey前缀。我以前管理过这么一个hbase集群,规模不大,但每天的写入量不小,它的表基本都是以时间戳作为前缀,然后呢每次监控都会有某几台机器各种飘红,然后宕掉,最后整个集群瘫痪,无奈之下只能手动的均衡当前被写入的region,尽量把当前活跃的region平分到各个regionserver上,这样才稳定了集群。同时随着当前活跃region的变换,得定期做移动操作(hbase
shell move命令),所以这不是一个有效的解决办法,另外还有一个解决的办法就是自定义HBase的LoadBanlance,通过改变region的分布策略来均衡HBase集群的负载,这个功能在0.92及以后的版本中实现。可参考淘宝技术博的一遍文章《HBase中如何开发LoadBalance插件》
2. 第二个我想说的是Hbase的读操作,往往我们批量分析hbase数据的时候会用到scan,用提供的api,不得不说,性能不怎么样,拿count操作来举例,往往count一个表得等到你大眼瞪小眼,但这你怨不得它,单线程么,所以我们在批量读的时候可以把rowkey分段,通过多线程来读,这有点类似于hive的思路,但比hive简单,这样读起来性能会快很多。至于怎么分段,就看你的表设计和数据量了,提供一个简单的分段方法,就是按region的起始rowkey来分。
3. ……
相关文章推荐
- HBase查询优化——持续更新
- VS2005环境使用——持续更新
- Devexpress 控件使用小结(根据使用情况持续更新)
- ubuntu使用问题与解决记录[持续更新]
- git 日常使用整理(持续更新)
- Intellij IDEA使用指南(持续更新)
- .Net Mvc View页面引擎Razor使用笔记-持续更新
- .Net Mvc View页面引擎Razor使用笔记-持续更新
- Eclicpse使用出现BUG汇总及解决办法,持续更新中。。。
- markdown使用技巧(持续更新)
- xcode使用 (持续更新中……)
- Spring 4.0使用日记(持续更新)
- python使用小语法---持续更新
- 大数据IMF传奇行动绝密课程第118课:Spark Streaming性能优化:如何获得和持续使用足够的集群计算资源
- java 关于使用java1.8的localDateTime日期操作的基本使用以及一些使用技巧 持续更新...
- enum枚举的使用总结 在android中的应用 持续更新
- Python·Jupyter Notebook各种使用方法记录·持续更新
- Aggreagation 日常使用语句汇总(持续更新)
- 数据仓库(十一)---hive使用小技巧积累(持续更新)
- 使用GIT期间遇到的问题(持续更新)