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

标签 java hadoop hdfs

我编写了以下代码,使用 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/

相关文章:

java - Android BLE为多个BLE设备设置多个通知

Java如何为按钮分配id并检索它们?

hadoop - 我应该展平 HL7 数据以在 Hadoop/Hive 中使用它吗?或者扩展 Hive?

sql - 搜索查询的水平缩放

hadoop - 如何检索失败的hadoop reduce任务,使用成功的 map 计算

java - Java中如何计算百分位数?

java - SQLite 连接和资源,良好实践

java - 如何通过 API 访问 Hadoop 计数器值?

hadoop - 使用mapreduce解析多个XML文件数据

scala - 使用Scala列出给定HDFS路径的所有子目录,直到一定深度。