0

我正在尝试将值写入 HDFS 上的文件。这是代码:

FileSystem fsys = FileSystem.get(new Configuration());
        String fileName = "/user/root/TestData/Parameter.txt";
        Path path = new Path(fileName);//(pathOfTestFile);    
//fstatus.getPath();
        FSDataOutputStream fos = null;
        try {
            fos = fsys.create(path);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        BufferedWriter writer = new BufferedWriter(new 
OutputStreamWriter(fos));
        writer.write(iterations);
        writer.close();
        fos.close();

但是,我看到命令 hadoop fs -ls 显示大小为 4 ,但是当我执行 hadoop fs -cat 时,文件不显示任何内容。

4

1 回答 1

2

我假设迭代是整数/短/字节。无论哪种方式,这些值的字节表示都是零个或多个 0x00 字节,后跟一个 0x04 字节。0x00 和 0x04 都不是可打印的字符,因此输出中没有hadoop fs -cat 显示任何内容也就不足为奇了。

但是,如果您将输出通过管道传输到 hexdump -C,我想您会看到您的输出:

hadoop fs -cat /path/to/file | hexdump -C

编辑

您还使用了BufferedWriter.write(int),它实际上将 int 作为字符写出。您应该使用FSDataOutputStream.writeInt(iterations)(它实际上是 DataOutputStream 的一种方法),然后使用 FSDataInputStream.readInt()再次读取它。

于 2012-07-19T10:29:55.350 回答