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方法来对节点进行更新。