block locality

因为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的百分比。

其实我的理解是:一个region是一张表,在某一台机器上的的一部分数据。但是这应该是一个逻辑上的概念,一个region会有多个HStore(列族),一个HStore下面会有多个hfile。这些hfile才是真的存储的文件,这些hfile都是在hdfs上以block存储的,这些block可能在不同的机器上,这就有了 本地化率这个概念。

datanode和 regionserver 一般都部署在同一台机器上,所以region server 管理的 region 会优先存储在本地,以节省网络开销。如果 block locality 较低有可能是刚做过 balance或刚重启,经过compact 后region 的数据都会写到当前机器的 datanode,block locality 也会慢慢达到接近 100。

也就是说本地化率低,可以通过compaction来提升本地化率。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值