背景:
随着HBase在性能和稳定性持续改善和成功案例的积累,HBase逐渐成为了在大数据NoSQL领域的事实标准。越来越多有着大数据应用和处理需求的互联网公司、IT公司,将离线或者半在线的数据平台搭建在HBase之上。
在深入使用和运维过程中,我们发现当新的应用需求而来时,处于性能和效率的考虑,我们就要根据数据规模单独搭建系统,而应用需求和规模的变化,会给HBase的运维和资源使用带来了一定的困扰:
1)HBase集群越多,运维成本就越大。因为稳健的Hbase监控是要从底层存储设备、网络资源、内存、CPU、hdfs、RegionServer到应用服务器读写性能的自下向上的体系,搭建HBase集群的运维开销较大。
2)应用需求的改变,短时间内资源扩容与平衡资源利用率之间存在矛盾。因为需求对于资源需求的变化,可以通过短时间内牺牲非优先的存储性能来平衡。
于是,我们就在考虑构建一种HBase隔离技术,只需维护一个HBase集群,满足各个table在性能上的互不干扰,又支持访问安全隔离。
技术介绍:
HBase按照Table内RowKey进行横向切分成不同的Region,AssignmentManager会把Table的Region按照尽可能的公平性分配到不同的RegionServer上。
AM中LoadBalancer负责Region–>RS的分配和移动,因此,在HBASE_HOME_DIR/bin/graceful_stop.sh的脚本中,如果支持Region reload的选项,会首先关闭balance_switch开关,避免下线的Region被LoadBalancer移动到其它RS。目前LoadBalancer采用的DefaultLoadBalancer采用每个RS上Region个数尽可能平衡的调度策略。
如果实现HBase隔离技术,在AM层面就需要解决如下的问题:
1、实现Table与RS的映射关系。建立类似于RegionServer Group实体(RSG),RS与RSG之间产生对应关系,Table与RSG之间产生映射关系。
- 借助实现LoadBalancer接口,实现从Table到不同RegionServerGroup的映射。
- HBase的Coprocessor机制,实现对于RegionServer Group相关信息的管理。具体可以参见下图:
2、table配置NameSpace。借助HDFS Federation的概念与方法,实现对于Table的区分、配置、以及访问的ACL。
1)每一个Table都隶属于一个NameSpace之下,每个NameSpace都有自己的Quota信息。例如Region的个数、hfile存储空间、甚至HBase之上的RPC的流量控制等。
2)每一个Table对应一个ACL,可以建立在ColumnFamily或者更细粒度的Column上。
例如 /hbase/data/binospace/binospace.webdata ,其中/hbase是root,data代表了这是普通的数据表,而非系统表,binospace是用户的NameSpace,而webdata是具体的表名。
使用类似目录层次的方式来管理hbase的Table的好处有:
1)hdfs或者文件系统在目录层次的管理上有成熟的方案。
2)以目录结构为特征的ACL、Quota等配置更有效。
总结:
在当前HBase应用不断发展,Snapshot、Replication、Block Encoding、Random Read Performance、Secondary Indexing 以及本文提到的Isolation都是摆在HBase高级用户或者二次开发面前的难题。隔离技术决定了HBase能否实现资源统一化管理的关键。本文介绍的RegionServerGroup和NameSpace技术,目前看来是实现隔离的一种比较有效的方案。
参考文档:
[1]RegionServer Group https://issues.apache.org/jira/browse/HBASE-6721
[2]NameSpace https://issues.apache.org/jira/browse/HBASE-8015
[3]Hug2013April HBase-As-a-Service-At-Yahoo! http://www.slideshare.net/ydn/april-2013-hug-hbase-as-a-service-at-yahoo
原创文章,转载请注明: 转载自 Binospace
本文链接地址: http://www.binospace.com/index.php/the-hbase-isolation-technology/
From Binospace, post HBase隔离技术
文章的脚注信息由WordPress的wp-posturl插件自动生成