Значение не записано в файл 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 ответ
Я предполагаю, что итерации является целым / коротким / байтом. В любом случае представление байтов этих значений равно нулю или более 0x00 байтов, за которыми следует байт 0x04. Ни 0x00, ни 0x04 не являются печатными символами, поэтому неудивительно, что hadoop fs -cat
ничего непоказывает в выводе.
Если вы перенаправите вывод в hexdump -C, я думаю, вы увидите ваш вывод:
hadoop fs -cat /path/to/file | hexdump -C
РЕДАКТИРОВАТЬ
Вы также используете BufferedWriter.write(int), который на самом деле записывает int как символ. Вы должны использовать FSDataOutputStream.writeInt(итерации) (на самом деле это метод DataOutputStream), а затем FSDataInputStream.readInt(), чтобы прочитать его снова.