我正在编写一个将RDBMS转换为HBase的程序.我选择了一个顺序实体作为行密钥,如员工ID(1,2,3 ....),但我在某处读取了行键不应该是一个顺序实体.我的问题是为什么不建议选择顺序行键.做同样的设计前景是什么?
虽然顺序行键允许更快的扫描,但在某一点之后它会成为问题,因为它RegionServer hotspotting在读/写时间期间会导致不良.根据其默认行为,Hbase将具有相似键的行存储到同一区域.它允许更快的范围扫描.因此,如果rowkeys是顺序的,那么所有数据将开始进入同一台机器,导致该机器上的负载不均匀.这称为RegionServer Hotspotting,是不使用顺序键的主要动机.我会用"写"来解释这里的问题.
当将带有顺序键的记录写入HBase时,所有写入都会触发一个区域.如果Region由多个RegionServers提供服务,那么这不会成为问题,但事实并非如此 - 每个Region只存在于一个RegionServer上.每个Region都有一个预定义的最大大小,因此在Region达到该大小后,它将分成两个较小的Region.之后,其中一个新区域将获取所有新记录,然后此Region和为其提供服务的RegionServer成为新的热点受害者.显然,这种不均匀的写入负载分布是非常不合需要的,因为它将写入吞吐量限制为单个服务器的容量,而不是使用HBase集群中的多个/所有节点.
您可以在此处找到问题的非常好的解释及其解决方案.
您可能还会发现此页面很有用,它向我们展示了如何有效地设计rowkeys.
希望这能回答你的问题.
| 归档时间: |
|
| 查看次数: |
5303 次 |
| 最近记录: |