hdfs如何修改数据

kqqjbcuj  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(617)

如果hdfs不允许修改文件,那么hbase如何存储和修改数据?很难找到这个问题的答案,因为结果大多面向hbase物理数据格式。***

flseospp

flseospp1#

hbase以索引形式将数据存储在hdfs中。过于简单化的是,hdfs文件将密钥按排序顺序存储,以便快速查找特定密钥。hbase数据存储由区域服务器(rs)负责。
在rs中,密钥首先被写入内存存储(称为memstore)。memstore存储新的密钥/更新和删除。在某个阈值之后,这些键将作为新的索引文件推送到hdfs。更新是由时间戳来处理的——假设最新版本是唯一有效的版本。因此,如果上一个索引文件具有相同的键,它将被忽略。删除与更新相同,唯一的区别是删除有一个特殊的类型字段,该字段有一个标记键为已删除的标志。
我做了一些简化:
索引文件格式随着时间的推移已经发生了很大的变化。最初,这是 MapFile . 较新版本的hbase使用一种称为 HFile 它具有特定于hbase的元数据和优化。
写入操作在进入memstore之前会记录在磁盘上的wal(写前日志)上。这是为了防止数据丢失。
我还发现了一些优秀的相关文章,您应该阅读:
http://blog.cloudera.com/blog/2012/06/hbase-io-hfile-input-output/
http://blog.cloudera.com/blog/2012/06/hbase-write-path/

kadbb459

kadbb4592#

hbase做了几件事(以下是一个简化,但它解释了一般的想法):为了保持一致性,它在数据到达时将数据写入wal文件,这样就不会更改那里的数据。
“问题”在于hfiles,其中数据以有序的方式存储。hbase要解决这个问题的第一件事是,它将数据保存在内存中(每个区域的memstore),并且只在数据被填满时才将其刷新到磁盘。这节省了一些重写。
在保存之前等待只解决了部分问题仍然存在需要重新排列数据的情况(例如,重复更新同一个密钥等),因此hbase所做的第二件事是压缩,它读取多个hfiles并用合并的数据创建新的hfiles(并删除旧文件)

相关问题