最近在线上往hbase导数据,因为hbase写入能力比较强,没有太在意写的问题。让业务方进行历史数据的导入操作,中间发现一个问题,写入速度太快,并且业务数据集中到其中一个region,这个region无法split掉,处于不可用状态。这里描述一整个过程——
事情的起因:业务方按照userid和商品id作为rowkey前缀,并没有进行hash散列。我当时咨询过业务方,认为:1.业务方式按照oracle的rowid顺序来进行迁移的,相对来说对应到rowkey里面就不会集中化;2.即使出现部分集中的情况,hbase也能够通过自动split来hold住写入。
结果线上写入的时候,12台机器的情况下业务方写入达到50~60w tps,基本上5w tps每台的写入速度。开始的时候region还能够自动split,比较好,写入速度也能够保持,但是到了第二天,发现写入在region维度的分布很不均衡,于是查看表的region size 情况,有一个region数据量特别大——800GB,700+个文件。

博客讲述了在Hbase中由于快速写入导致Region过大,无法进行split的问题。业务方未进行rowkey散列,使得数据集中在某个Region,引发无法split的恶性循环。文中讨论了Hbase的compact和split机制,提出一种改进的compact算法和重导数据的解决方案,强调了预分片和监控Region大小的重要性。
最低0.47元/天 解锁文章
2393

被折叠的 条评论
为什么被折叠?



