hadoop - HDFS如何修改数据

标签 hadoop hbase hdfs

如果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/

相关文章:

hadoop - Pig 脚本按位置匹配元组条目

hadoop - Giraph无法设置稍大的超步值吗?

oracle - 如何验证从外部数据库(oracle)到hdfs的数据传输

linux - 动态重命名 HDFS 目录中的多个文件

hadoop - 谁在hadoop中拆分文件?是工作追踪器吗?

linux - 如何使用 shell 脚本迭代 HDFS 目录中的所有文件?

database - HBase如何保证行级原子性?

hadoop - 如何从 Hbase 的列族中删除列?

java - HBase 获得多个不同的 rowid?

hadoop - 将 Impala 查询结果写入文件中