值未写入HDFS文件

时间:2012-07-19 10:14:28

标签: hadoop mapreduce hdfs

我正在尝试将值写入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时,该文件不显示任何内容。

1 个答案:

答案 0 :(得分:2)

我假设迭代是一个整数/短/字节。无论哪种方式,这些值的字节表示为零或更多0x00字节,然后是0x04字节。 0x00和0x04都不是可打印字符,因此hadoop fs -cat 在输出中显示并不奇怪。

如果你将输出管道传输到hexdump -C,我想你会看到你的输出:

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

修改

你也在使用BufferedWriter.write(int),它实际上将int写成了一个chaarcter。您应该使用FSDataOutputStream.writeInt(iterations)(它实际上是DataOutputStream的方法),然后FSDataInputStream.readInt()再次读回来。