如果HDFS不允许修改文件,HBase怎么存储和修改数据?这个问题很难找到答案,因为结果大多是面向 HBase 物理数据格式的。但是我找不到 HBase 如何解决 HHDFS 文件的不可变性问题?
最佳答案
HBase 以索引的形式将数据存储在 HDFS 中。将事情过于简单化,HDFS 文件将键按排序顺序存储,因此可以快速查找特定键。 HBase 数据存储在 RegionServers (RS) 中进行处理。
在 RS 中, key 首先写入内存存储(称为 memstore)。 memstore 存储新键/更新和删除。在一定的阈值之后,这些键作为新的索引文件被推送到 HDFS。更新由时间戳处理——假设最新版本是唯一有效的版本。所以如果之前的索引文件有相同的key,就会被忽略。删除与更新相同,唯一的区别是删除有一个特殊的类型字段,它有一个标志,将键标记为已删除。
我做了一些简化:
- 索引文件格式随着时间的推移发生了很大变化。最初,它是
MapFile
.较新版本的 HBase 使用一种称为HFile
的格式,它具有特定于 HBase 的元数据和优化。 - 写入在进入内存库之前会记录在磁盘上的 WAL(预写日志)中。这是为了防止数据丢失。
我还找到了几篇优秀的相关文章,您应该阅读这些文章:
关于hadoop - HDFS如何修改数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19108880/