容量规划和Region配置
欢迎转载,请注明:http://blog.csdn.net/oozie123
当我们规划HBase集群容量和执行初始配置时,有很多注意事项。合理配置我们得对HBase内部数据的处理有深入的理解。
1 节点数和硬件/VM配置
1.1物理数据大小
你的数据在磁盘上的物理数据大小与逻辑数据大小截然不同,而且被下面选项影响:
- 增加的HBase开销。
- keyvalue and keysize,每个keyvalue (Cell)最少24字节,小的keyvalue 意味着相对应小开销。
- keyvalue instances 聚合成blocks,blocks是被索引的,索引也是会被储存,Blocksize是基于每一个列簇配置。
译者注:Blocksize配置越大,意味着建立的索引越少,命中的概率也会降低。不同场景,请进行合理规划。
- 压缩和数据块编码。
- region server wal大小(通常小于RS内存的一半)。
- HDFS replication数。
撇开磁盘空间是储存数据的必要条件,1个RS也不能可能储存任意大容量的数据,由于某些像region count和size的限制。
1.2Read/Write吞吐量
计算系统读写吞吐量时,要考虑有多少节点被驱动。每个节点的吞吐量依据数据量和请求模式。根据测试负载的峰值,来规划节点数目的增加。PerformanceEvaluation 和 ycsb工具可以用来测试单个节点和一个测试集群。
对于读,通常5-15Mb/s 每个RS可以被尝试,因为每个RS仅仅有一个活跃的WAL。对于读,没有很好的评估标准,它取决于数据量,请求数,cache命中率。
1.3JVM GC限制
由于GC的花费,RS不能运用非常大的堆内存,也没有好的方式在一个服务器上运行多个RS-es(不是在一台机器上运行多个VMs),这样,推荐使用20~24GB或者更少的内存用于每一个RS。GC调优需要非常大的内存,参见gcpause0, trouble.log.gc。
2 配置region数量和大小
通常少量的regions,集群会运行非常流畅(你可以总是稍微晚些手动split大的regions(如果有必要),或者同过集群负载均衡)。20~200个regions每个RS是比较合理的范围,每个RS的regions数量不能直接配置(除非全部配置disable.splitting
),根据给定表大小,调整region的大小。
注意,每张表的region大多数配置可以通过HTableDescriptor
和shell commands
配置。这些配置会覆盖hbase-site.xml
,通常这在你的表被不同工作负荷使用时特别有用。
另外注意region的大小,HDFS replication 因子不会被考虑进去,而ops.capacity.nodes.datasize
会被纳入考虑。所以如果你的数据是压缩的, replication 是3,9GB region意味着9GB的压缩数据。HDFS replication只会影响磁盘空间,并且大多数HBase代码不可见。
2.1 查看当前regions数
可以通过HMaster UI
或者bin/hbase hbck command
进行查看。
2.2 每个RS中regions上界
通常每个RS最大regions数目决定于memstore memory
的使用情况,每个region拥有自己的memstores
,它们是可配置的,通常是128~256MB,参考hbase.hregion.memstore.flush.size。RS通过指明总内存的百分比给予它的memstores
参考hbase.regionserver.global.memstore.size。
如果内存超过警戒值,会引起一些不良的后果,诸如服务器反应延迟,合并风暴。一个好的起始点指示每个RS该拥有的regions数目为:
((RS memory) * (total memstore fraction)) / ((memstore size)*(# column families))
公式是伪代码,有两种公式可用,第一个是HBase 0.98+
和第二个是 HBase 0.94.x
。
HBase 0.98.x
((RS Xmx) * hbase.regionserver.global.memstore.size) / (hbase.hregion.memstore.flush.size * (# column families))
HBase 0.94.x
((RS Xmx) * hbase.regionserver.global.memstore.upperLimit) / (hbase.hregion.memstore.flush.size * (# column families))+
如果给每个RS 16GB内存,按照公式,在起点,每个RS将拥有16384*0.4/128 ~ 51
个regions。该公式可以扩张到多表。
该计算结果可以被调整公式是假设所有你的regions大约已同样的速度都被填满。如果你的regions只有一部分处于活跃写的状态,你可以调大regions数。即使是所有的regions都在写入,所有的region memstores也不会填满,由于有并发flush数目的限制。这样我们可以设置2~3倍regions数量作为起始点,然而增加regions也就意味找增加风险。
2.3 每个RS中regions下界
如果你拥有大量的数据,可能你想维护大量的regions数去避免每个region太大。
2.4 region大小极值
对于生产环境的大表,region大小的极值通常限制于合并,非常大的合并,如major会降低集群的性能。目前推荐最大region大小是10~20Gb, 5-10Gb 是最优的。
什么值会使一个region split成两个,它通过hbase.hregion.max.filesize配置。
如果你不能很好的估算region的开始大小,你最好直接使用默认值。对于热表,可能你会配置小点(或者手动split热region),如果你的cell比较大,你可以把region配置大点。
2.5 每个RS总数据量
通过上述region大小和每个RS中regions数,保守估计每个RS将维护10GB*100regions=1T
数据量。然而考虑数据量和缓存大小比例在RS级别也很重要。每个服务器1TB数据,10GB block cache
,仅仅只有1%数据被缓存,实在是太勉强。
3 初始化配置和调优
- important configurations
- hbase.regionserver.handler.count
- config.wals
3.1 Compactions
依据读写体积和延迟需求,最优的合并策略是不同的,参考compaction 。
当数据量非常大时,请记住合并对写的吞吐量影响很大。这样,对于写密集型,你可能需要选择低频繁地合并和更多store files才合并。通设置hbase.hstore.compaction.min
为更高值,增大最少合并文件数,同时调大hbase.hstore.blockingStoreFiles
的值。另外你可以考虑使用手动管理合并,参考managed.compactions。
3.2 表预分裂
我们可以在常见表的时候先创建一些regions,这样既可以避免昂贵地分裂,也可以确保表一开始就是分布在多个服务器。
如果一个表预期会增张到很大,则每个RS至少预分裂一个region,不建议直接split到目标值,一个中间值可以被选择。参考manual region splitting decisions和precreate.regions。
容量规划和Region配置相关推荐
- MATLAB代码:基于混合整数规划的微网储能电池容量规划 关键词:储能配置 电池容量规划 微网 混合整数规划
MATLAB代码:基于混合整数规划的微网储能电池容量规划 关键词:储能配置 电池容量规划 微网 混合整数规划 关键词:储能配置 电池容量规划 微网 混合整数规划 参考文档:<基于全寿命周期成本的 ...
- 服务器容量规划文档,服务器容量规划文档
服务器容量规划文档 内容精选 换一换 K8s和Docker容器场景各组件配置具体如表1. 开源oVirt和KVM解决方案典型配置如表1. 服务器容量规划文档 相关内容 在待分析的服务器上安装节点.We ...
- Hyper-v副本容量规划器
为了业务连续性和灾难恢复的目的,Windows Server 2012和Windows Server 2012 R2的Hyper-V管理员可以将其虚拟机从主服务器/集群复制到副本服务器/集群.适用于H ...
- 【elasticsearch】 Elasticsearch集群规模和容量规划的底层逻辑
1.概述 转载:https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484628&idx=1&sn=666e41 ...
- java 服务 容量评估,容器云平台容量规划及管理优化
随着容器云平台实践的深入,容器基础设施资源的分配和使用也暴露出了前期产品设计的一些意料之外的问题.特别在证券行业,资源的使用时段往往比较集中在上午9点到10点时段前后,过了这个时段,资源的使用量就迅速 ...
- 服务器做系统怎么规划,如何做系统容量规划 | 知行天下
为了迎接中秋节及国庆节的到来,需要对线上服务器进行扩容,发现了一些问题,就顺手整理下如何做容量规划 容量规划 容量定义:资源所能支撑特定服务的能力 容量规划:资源管理 适用范围:同构集群 性能 &am ...
- ElasticSearch部署架构和容量规划
一.前言 前面介绍了ElasticSearch原理和使用相关的内容,在生产环境如何比较科学的进行容量规划.部署.调优.排查问题呢,业界和官方也对相关的问题进行总结,我这边也结合自己的经验对这些使用El ...
- 地铁读书笔记-容量规划
容量规划 容量规划可以检查系统处理负载的情况,以及系统如何随着负载的增加而扩展.做容量规划有很多方法,包括研究资源极限和因素分析.本节还包括了扩展的解决方案,包括负载均衡器(load balancer ...
- 【稳定性day5】阿里自动压测及容量规划 - 对抗流量的必杀器
双十一从 2009 诞生到现在,2013 年绝对是一个分水岭. 为什么这么说?因为 2013 有了全链路压测. 每年的 11 月 11 日 00:00:00,阿里巴巴集团最紧张激动的时刻到来了.多收档 ...
最新文章
- 如何使用python批量下载-用Python调用迅雷实现后台批量下载
- Codeforces 1110 简要题解
- html5语音云,搜狗语音云开放平台
- 虚拟dom与diff算法 分析
- c#简单类的继承【C#】
- oracle中where中使用函数,Oracle 尽量避免在 SQL语句的WHERE子句中使用函数
- LeetCode:二叉树的非递归中序遍历
- (计算机组成原理)第四章指令系统-第一节2:扩展操作码
- 为什么我不推荐你使用vue-cli创建脚手架?
- 更新管理器_Win10设备管理器失去了通过互联网更新驱动程序的能力
- Python-Flask构建微信小程序订餐系统-Flask打造高可用flask mvc框架-08
- VM 虚拟机 centos7 安装redis
- WINCE下ActiveSync连接故障修复办法
- 手机163邮箱发送服务器端口,163邮箱发送端口
- TOM邮箱怎么样 TOM邮箱品牌测评分析
- win10禁用计算机属性,Win10可以禁用哪些服务优化技巧?
- 即将前往下一个饭局,你的牙还好吗?丨钛空舱爆款春节特献
- 解决Field ‘id‘ doesn‘t have a default value 问题
- Tomcat And Servlet (1)
- 3Com发展史(摘录)