有时候,出于特殊需要,我们希望对 HBase 表进行预分区后,禁止表再自动 Split。HBase 并不直接提供 Table Properties 来实现该功能,需要我们手动配置,主要操作是两项:
hbase.hregion.max.filesize
设为一个极大值,例如 Long 的 MAX_VALUE:9223372036854775807
,该配置项用于限制单个 Region 的容量上限,超过该值 Region 就会自动 split,默认值是 10 GBConstantSizeRegionSplitPolicy
,默认的切分策略是 IncreasingToUpperBoundRegionSplitPolicy
,该策略在 Region 小于 10 GB 时有一套自己的切分规则,超过 10 GB 后才会遵循 ConstantSizeRegionSplitPolicy
,所以在一开始建表时需要显式配置以下是一个示例,建表时进行了预分区,设置了 510 个 Region,并显式地配置切分策略为 ConstantSizeRegionSplitPolicy
TABLE_NAME="usertable"
REGIN_SPLITS=$((510-1))
cat << EOF | sudo -u hbase hbase shell
create '${TABLE_NAME}', 'cf', {METHOD => 'table_att', CONFIGURATION => {'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy'}}, {SPLITS => (1..${REGIN_SPLITS}).map {|i| "user#{1000+i*(9999-1000)/${REGIN_SPLITS}}"}}
describe '${TABLE_NAME}'
EOF