Region 合并(4)

Region 的合并不是出于性能考虑的,而更多地的是出于维护的目的被创造出来的。

最典型的一个应用场景是,在某些业务中本来接收写入的 Region 在之后的很长时间都不再接收任何写入,而且 Region 上的数据因为 TTL 过期被删除。这种场景下的 Region 实际上没有任何存在的意义,称为空闲 Region。一旦集群中空闲 Region 很多,就会导致集群管理运维成本增加。此时,可以使用在线合并功能将这些 Region 与相邻的 Region 合并,减少集群中空闲 Region 的个数。


冷合并

合并通过使用 org.apache.hadoop.hbase.util.Merge 类来实现,具体做法在下面说明(不建议使用)。

举个例子,比如想把以下两个 Region 合并:
test_table1,b,1476406588669.39eecae03539ba0a63264c24130c2cb1. test_table1,c,1476406588669.96dd8c68396fda694ab9b0423a60a4d9.
直接在 Linux 下(不需要进入 hbase shell)执行以下命令:

hbase org.apache.hadoop.hbase.util.Merge test_table1,b,1476406588669.39eecae03539ba0a63264c24130c2cb1. test_table1,c,1476406588669.96dd8c68396fda694ab9b0423a60a4d9.

在执行合并之前需要将 Hbase 集群下线才行,所以需要先把 HMaster 和所有的 HRegionServer 全部都停掉,再执行就可以了。
否则执行命令的时候,会报 FAFAL 错误:util.Merge:Hbase cluster must be off-line, and id not. Aborting.

每次 merge 都要关闭整个 HBase 这也太麻烦了,通过 org.apache.hadoop.hbase.util.Merge 类来合并叫冷合并。

热合并

由于冷合并每次都需要关闭整个集群,因此 HBase 后来又增加了热合并。
hbase shell 提供了一个命令叫 merge_region,通过这个方法可以进行热合并(online_merge)。

举个例子,比如要合并以下两个 Region:
test_table1,b,1476406588669.39eecae03539ba0a63264c24130c2cb1. test_table1,c,1476406588669.96dd8c68396fda694ab9b0423a60a4d9.
需要在 hbase shell 中执行以下命令:

merge_region '9eecae03539ba0a63264c24130c2cb1' '96dd8c68396fda694ab9b0423a60a4d9'

merge_region 的传参是 Region 的 Encoded 名称,Region 的 Encoded 名称就是 Region 名最后那段在两个.号之间的字符串。 

从原理上看,Region合并的主要流程如下:

  • 1)客户端发送 merge 请求给 Master。
  • 2)Master 将待合并的所有 Region 都 move 到同一个 RegionServer 上。
  • 3)Master 发送 merge 请求给该 RegionServer。
  • 4)RegionServer 启动一个本地事务执行 merge 操作。
  • 5)merge 操作将待合并的两个 Region 下线,并将两个 Region 的文件进行合并。
  • 6)将这两个 Region 从hbase:meta 中删除,并将新生成的 Region 添加到 hbase:meta 中。
  • 7)将新生成的 Region 上线。

HBase 使用 merge_region 命令执行 Region 合并,merge_region 是一个异步操作,命令执行之后会立刻返回,用户需要一段时间之后手动检测合并是否成功。默认情况下 merge_region 命令只能合并相邻的两个 Region,非相邻的 Region 无法执行合并操作。同时 HBase 也提供了一个可选参数 true,使用此参数可以强制让不相邻的 Region 进行合并,因为该参数风险较大,一般并不建议生产线上使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值