Hbase中的hfile和data compact过程疑问,求解答,感激不尽
小弟最近初识Hbase,存在如下疑问:
1.首先每个storefile的实例化形式是Hfile,这个hfile会被写入到hdfs上。那么我认为这个hfile的物理存放形式对于hbase是透明的,即一个hfile可能被hdfs切分成很多split并且存储在不同的节点上。不知道我这么理解正确与否?
2.data compact的过程需要将多个hfile读出,合并成一个大的hfile,那么这个过程实际上需要将多个hfile从hdfs中读出到regionserver本地,合并之后再将其写会hdfs么?这样做不是会产生很大的网络IO么,另外,当一个hfile大小到达256M会触发分裂,变成2个128M的hfile,那么新产生的hfile不是一样还会面临重新被合并的可能么。实在很不理解HBase这种把数据管理和实际存储的分离的设计理念。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我也是刚在研究Hbase,对于您提的问题,我发表自已的看法。
1、一个hfile可能被hdfs切分成很多split并且存储在不同的节点上,对于这句话,我的理解是,在Hbase中,Hfile是存储的最小单元,而对于分布式的最小单元应该是Hregion,Hregion的分布则由Master进行调度与管理了。
2、在第2点中,我的理解是,在compact过程中,应该不是从HDFS中读取Hfile文件,因为在每一次flush时,都会生成一个StoreFile文件,而在store下面存放的应该是列簇的数据。所以我觉得它并不是从HDFS中获取,而只是将store下面的storeFile进行合并。
以下如有错误之处,请指正。谢谢
关于数据管理和实际存储的分离,其实不是完全的分离,RegionServer会优先在本地存储一份。我的理解是RegionServer认为是存在本地了,其实HDFS会另外做备份。