我正在尝试将值写入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时,该文件不显示任何内容。
答案 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()再次读回来。