HBase通常根据hbase-default.xml和hbase-site.xml配置文件中的设置来处理区域划分。重要设置包括hbase.regionserver.region.split.policy
,hbase.hregion.max.filesize
,hbase.regionserver.regionSplitLimit
。
拆分的一种简化视图是,当区域增长到hbase.hregion.max.filesize时,将对其进行拆分。对于大多数使用模式,应使用自动拆分。有关手动区域分割的更多信息,请参见手动区域分割决策。
您可以选择自己管理拆分,而不是让HBase自动拆分您的区域。如果您非常了解rowkey空间,则可以手动管理拆分,否则让HBase为您确定拆分的位置。手动拆分可以减轻region创建和负载下的移动。它还使区域边界是已知且不变的(如果禁用区域划分)。如果使用手动拆分,则更容易进行基于时间的交错压缩,以分散网络IO负载。
禁用自动拆分
要禁用自动拆分,可以在集群配置或表配置中将区域拆分策略设置为org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy
推荐自动分割
如果禁用自动拆分以诊断问题或在数据快速增长期间,建议在情况变得更稳定时重新启用它们。管理区域分裂自己的潜在好处并非没有争议。
确定预分割区域的最佳数量
**Pre-Splits的最佳数量取决于您的应用程序和环境。**一个好的经验法则是从每个服务器10个预分区域开始,并观察数据随时间增长的情况。最好在区域太少的一侧犯错误,然后再进行滚动拆分。最佳区域数取决于您所在区域中最大的StoreFile。如果数据量增加,则最大的StoreFile的大小将随时间增加。目的是使最大区域足够大,以使压缩选择算法仅在定时大压缩期间对其进行压缩。否则,群集可能会同时受到大量region的压缩风暴。重要的是要了解数据增长会导致压缩风暴,而不是手动拆分决定。
如果将区域分成太多大区域,则可以通过配置HConstants.MAJOR_COMPACTION_PERIOD
来增加主要压缩间隔。 org.apache.hadoop.hbase.util.RegionSplitter
实用程序还提供所有区域的网络IO安全滚动拆分。
几个参数详解
hbase.hregion.max.filesize
可以通过如下参数设置
描述
最大文件大小。 如果某个区域的HFiles大小的总和超过了该值,则该区域将一分为二。 关于此选项的工作方式,有两种选择,一种是当任何Store的大小超过阈值然后拆分时,另一种是整个区域的大小超过阈值然后拆分时,可以通过hbase.hregion.split.overallfiles进行配置。
默认
10737418240 就是10G的意思,这个数是比较大的.
hbase.regionserver.region.split.policy
描述
拆分策略确定何时应拆分区域。 当前可用的其他各种拆分策略为BusyRegionSplitPolicy,ConstantSizeRegionSplitPolicy,DisabledRegionSplitPolicy,DelimitedKeyPrefixRegionSplitPolicy,KeyPrefixRegionSplitPolicy和SteppingSplitPolicy。 DisabledRegionSplitPolicy
阻止手动区域分割。
默认
org.apache.hadoop.hbase.regionserver.SteppingSplitPolicy
hbase.regionserver.regionSplitLimit
就是管理region数目的上限,默认值为1000.
描述
region数量的限制,之后不应再进行区域划分。 这不是对区域数量的硬限制,但可作为区域服务器在特定限制后停止拆分的准则。 默认设置为1000。
默认
1000