Значение не записано в файл 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(), чтобы прочитать его снова.

Другие вопросы по тегам