gpt4 book ai didi

java - 数据未出现在使用 HADOOP LocalFileSystem 写入的文件中

转载 作者:可可西里 更新时间:2023-11-01 14:22:33 26 4
gpt4 key购买 nike

我编写了以下代码,使用 HADOOP 的 LocalFileSytem 将几个字节写入本地文件。我使用了 flush() ,据我所知,它会刷新 JVM 缓冲区,而 hsynch() 会刷新操作系统缓冲区,从而导致写入数据到磁盘。但在我的例子中,它的数据没有出现在文件“1.txt”中。但是当我使用 close() 关闭输出流时[暂时我已经在我的代码中注释掉] 数据完美地出现了。如果我对 flush() 和 hsynch() 的理解正确与否,请纠正我?如果正确,为什么数据没有出现?

package hdfsTrying.hdfstrying;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import com.google.protobuf.ByteString.Output;

public class LocalFileAccess {
public static void main(String arg[])
{
Path p = new Path("/home/priya/1.txt");
FileSystem fs;
Configuration cfg = new Configuration();
try
{
fs= FileSystem.getLocal(cfg);

FSDataOutputStream out = fs.create(p);
out.write("Hi This should be written to file 1.txt".getBytes());
out.flush();
out.hsync();
//out.close();
FileStatus fst[] = fs.listStatus(p);
for(FileStatus g:fst)
System.out.println(g.getPath());

}
catch(IOException io)
{
System.out.println("I am having exception");
System.out.println(io.getMessage());
}


}

}

最佳答案

当您使用flush 方法将文件写入磁盘时,它只会在达到一个 block 的数据量时才写入磁盘。因此,如果您的数据较小(这是您的情况),您需要调用 hsync 函数来强制同步所有缓冲区。但是,此方法仅适用于 1.x 以上的 Hadoop 版本,因为在此之前此方法仅调用了 hflush。如果您的 Hadoop 版本较低,请尝试调用 sync 而不是 hsync

关于java - 数据未出现在使用 HADOOP LocalFileSystem 写入的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20699118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com