分享

讨论:改进HDFS支持update和delete操作方法

kaif22 发表于 2013-10-25 10:46:18 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 7300
本帖最后由 hadoopor 于 2009-11-27 14:53 编辑
如果允许数据冗余,通过改进HDFS,支持update和delete两个操作并不困难,如果update和delete的操作频率不高且涉及变动的记录数不多,下面介绍的方法也许是值得尝试的。
在现有的实现上,HDFS中的所有block大小是相等的,默认除最后一个block外,都为64M,如果要支持update和delete操作,这个规则得改写,要允许block大小不相等,因此在block的元数据表结构中需要增加block_size一列,用来表示该block的大小,如下图所示:
通过block_size就可以方便地便利和操作文件了,不会影响到原来对文件各类操作的语义。
另外,还必须将存储在HDFS中的数据结构化,每条记录之前增加一个记录头,记录头中包括该条记录的状态,如下图所示:
记录头中的0表示记录未做任何修改,1表示该条记录已经被修改过,2表示该条记录被删除了,3表示新增的记录。其中,1和2在这里都表示记录被删除了。当需要修改或删除该条记录时,只需要修改这个状态位即可。
未修改和删除之前:
发生删除之后:
当读取到八戒这条记录时,直接跳过。
发生修改之后:
当读取到八戒和悟空这两条记录时,均直接跳过。
这里做法关键之处是:在block的元数据表中增加block_size字段,如果没有这个字段,对文件的读、写和seek等操作将无法执行。
限制:
记录不能是有序的,因为修改数据总是往block尾增加。另外,如果状态为1或2的记录数超过指定的数目时,可以考虑重建这个块,将这些冗余的数据从block去掉。

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条