HBase如何跨区域服务器分区表?

wlk*_*wlk 7 parallel-processing hadoop hbase

请告诉我HBase如何跨区域服务器分区表.

例如,假设我的行键是从0到10M的整数,我有10个regionservers.
这是否意味着第一个区域服务器将存储所有行的键值为0 - 10M,第二个1M - 2M,第三个2M-3M,......第十个9M - 10M?

我希望我的行密钥是时间戳,但我认为大多数查询都适用于最新日期,所有查询只会由一个区域服务器处理,这是真的吗?

或者这些数据可能会以不同的方式传播?
或者也许我可以以某种方式创建比我有区域服务器更多的区域,因此(根据给定的示例)服务器1将具有0 - 0,5M和3M - 3,5M的密钥,这样我的数据将更均匀地传播,这是可能?


更新

我刚发现有选择hbase.hregion.max.filesize,你认为这会解决我的问题吗?

jdc*_*ans 8

WRT分区,您可以阅读Lars 在HBase架构上的博客文章或者HBase"克隆"的Google Bigtable论文.

如果您的行键只是一个时间戳,那么具有最大键的区域将始终被新请求命中(因为区域仅由单个区域服务器提供).

您想使用时间戳来进行短扫描吗?如果是这样,请考虑腌制您的密钥(搜索谷歌Mozilla如何使用Sorocco).

您的时间戳可以加上任何ID吗?例如,如果您只为特定用户请求数据,那么在ts前面加上该用户ID,它将为您提供更好的负载分配.

如果没有,那么使用UUID或任何其他随机分发您的密钥.

关于 hbase.hregion.maxfilesize

在该表上设置maxfilesize(可以使用shell执行),并不会使每个区域正好是X MB(其中X是您设置的值)大.因此,假设您的行键都是时间戳,这意味着每个新行键都比前一个更大.这意味着它将始终插入具有空结束键(最后一个)的区域中.在某些时候,其中一个文件将比maxfilesize(通过压缩)大,并且该区域将在中间分开.较低的键将位于其自己的区域中,较高的键位于另一个区域中.但由于您的新行键总是比前一行大,这意味着您只会写入该新区域(依此类推).

tl; dr即使你有超过1,000个区域,使用这个模式,具有最大行键的区域将始终获得写入,这意味着托管区域服务器将成为瓶颈.