hbase的副本是对历史数据的备份,是新旧数据,而非相同数据的copy;hdfs的副本是同一数据的copy。
hbase的数据文件存放在hdfs上,但是在hdfs上具体如何存储对hbase是透明的。hbase的hfile
文件是存储在hdfs的普通文件,这个文件同hdfs上的其他文件一样,会自动备份成多份,并由namenode管理,而hbase只是通过namenode去访问hfile,具体访问的文件位置对hbase是透明的。
所以你的问题的答案是:只跟hdfs的副本数有关,跟hbase的副本数无关。即3
因为DataNode和RegionServer通常会部署在相同的机器上,所以会产生Locality这样的概念。
HBase的Locality是通过HDFS的Block复制实现的。在复制Block时,HBase是这样选择副本的位置的:
就是这样,在flush或compact后,HBase的Region实现了Locality。
当一个RegionServer处在failover的情况下(rebalance或重启)时,可能会分配到一些没有本地StoreFiles的Region(因为此时没有可用的本地副本)。然而,有新数据再写入这些Region的时候,或者是对表进行compact的时候,StoreFiles将会被重写,这些Region也会再次变成RegionServer的“local”Region。
有一个相关的指标“data locality”,即Region保存在本地的StoreFile的百分比。这个指标影响了major compact的执行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)