我正在尝试将值写入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时,该文件不会显示任何内容。
我假设迭代是一个整数/短/字节。无论哪种方式,这些值的字节表示都是零或更多0x00字节,后面跟着0x04字节。0x00和0x04都不是可打印字符,因此hadoop fs -cat
在输出中不显示任何内容也就不足为奇了。
如果你把输出管道到hexdump-C,我想你会看到你的输出:
hadoop fs -cat /path/to/file | hexdump -C
编辑
您还使用了BufferedWriter.write(int),它实际上将int作为chaarcter写入。您应该使用FSDataOutputStream.writeInt(迭代)(它实际上是DataOutputStream的一个方法),然后使用FSDataInputStream.readInt()再次读取它。