HDFS如何修改数据

时间:2013-10-01 05:48:49

标签: hadoop hbase hdfs

如果HDFS不允许修改文件,HBase如何存储和修改数据?很难找到这个问题的答案,因为结果主要是针对HBase物理数据格式。但我无法找到HBase如何解决HHDFS文件的不变性问题?

2 个答案:

答案 0 :(得分:5)

HBase以索引形式将数据存储在HDFS中。过度简化的事情,HDFS文件具有按排序顺序存储的密钥,因此查找特定密钥的速度很快。 HBase数据存储在RegionServers(RS)中处理。

在RS中,密钥首先写入内存存储(称为memstore)。 memstore存储新密钥/更新删除。在某个阈值之后,这些键将作为新的索引文件推送到HDFS。更新由时间戳处理 - 假设最新版本是唯一有效的版本。因此,如果先前的索引文件具有相同的密钥,则将忽略它。删除与更新相同,唯一的区别是删除具有特殊类型字段,该字段具有将该键标记为已删除的标记。

我做了一些简化:

  • 索引文件格式随着时间的推移发生了很大变化。最初,它是MapFile。最新版本的HBase使用名为HFile的格式,该格式具有特定于HBase的元数据和优化。
  • 在进入memstore之前,写入会在WAL(预写日志)上的磁盘上记录。这是为了防止数据丢失。

我还发现了几篇优秀的相关文章,您应该阅读:

答案 1 :(得分:0)

HBase做了一些事情(以下是简化,但它解释了一般的想法): 为了保持一致性,它会在数据到达时写入WAL文件 - 因此不会对数据进行任何更改。

“问题”在于HFiles,其中数据以有序的方式存储。 HBase解决这个问题的第一件事就是它将数据保存在内存中(每个区域的memstore),并且只有在填充时才将它们刷新到磁盘。这节省了一些重写。

在保存之前等待只解决了一些问题,但仍然存在需要重新排列数据的情况 - (例如,重复更新同一个键等)所以HBase做的第二件事就是压缩,它会读取多个HFile并创建新的具有合并数据的那些(并删除旧文件)