如何保证HDFS中的数据一致性?

来源:互联网 发布:vb select语句 编辑:程序博客网 时间:2024/05/21 09:15

Hadoop中有个重要的工具就是HDFS分布式文件系统,那么在这种分布式环境下的数据一致性是如何保证呢?

HDFS中,存储的文件将会被分成若干的大小一致的block(最后一个block的大小可能较小)分布式地存储在不同的机器上,那么就必须有一个角色来对这些数据进行管理,也就是NameNode节点,而存储这些block的结点我们称为DataNode,NameNode是用来管理这些元数据的。

下面讲一个例子,在客户端上传文件时,NameNode如何保证数据的一直性。



客户端上传文件时,NameNode首先往edits log文件中记录元数据的操作日志。与此同时,NameNode将会在磁盘做一份持久化处理(fsimage文件):他跟内存中的数据是对应的,如何保证和内存中的数据的一致性呢?在edits logs满之前对内存和fsimage的数据做同步(实际上只需要合并edits logs和fsimage上的数据即可,然后edits logs上的数据即可清除)

而当edits logs满之后,文件的上传不能中断,所以将会往一个新的文件edits.new上写数据,而老的edits logs的合并操作将由secondNameNode来完成,即所谓的checkpoint操作。

那么什么时候checkpoint呢?

一般由两种限制,一个是edits logs的大小限制,即fs.checkpoint.size配置,一个是指定时间,即fs.checkpoint.period配置

当然根据规定,大小的限制是优先的,规定edits文件一旦超过阈值,则不管是否达到最大时间间隔,都会强制checkpoint。

原创粉丝点击