2.6 HDFS文件同步与并发访问

HDFS 提供了多用户共同访问一个文件的功能。但是我们知道,对于多用户同时访问来说,文件的并发处理是一个非常难以解决的问题。

例如,当多名用户同时请求访问一个数据,而此时恰有一名管理员在对数据进行更新,则有可能造成堵塞,或者造成用户看到的不是及时准确的数据。

在修改文件时,文件从修改开始到修改完毕有一个时间延迟。在此延迟时间内,此文件对除创建者之外的所有用户来说是不透明的,用户并不能查看到文件被修改的内容。为了解决此问题,HDFS 专门设置了一个方法用来强制所有 HDFS 文件体系内的缓存与数据点进行同步,即调用sync()方法来处理。当sync调用完毕后,能够确保所有用户对文件的查看具有一致性。程序示例如程序2-6所示。

程序2-6

public class SyncSample {

public static void main(String[] args) throws Exception {

  Configuration conf = new Configuration(); //获取文件环境

  FileSystem fs = FileSystem.get(conf); //创建文件系统

  Path path = new Path("syncSample.txt"); //创建一个文件路径

  System.out.println("文件是否存在:" + fs.isFile(path)); //判断文件是否存在

  FSDataOutputStream fsout = fs.create(path); //准备写入文件

  fsout.writeUTF("hello World"); //开始写入

 fsout.flush(); //将缓存内容输出

 fsout.sync(); //更新所有节点

}

}

提示:FSDataOutputStream类中的close方法隐含sync方法,因此也可以通过执行close方法来对节点进行更新。