Запись файла в hdfs с помощью Java
Я хочу создать файл в HDFS и записать в него данные. Я использовал этот код:
Configuration config = new Configuration(); FileSystem fs = FileSystem.get(config); Path filenamePath = new Path("input.txt"); try { if (fs.exists(filenamePath)) { fs.delete(filenamePath, true); } FSDataOutputStream fin = fs.create(filenamePath); fin.writeUTF("hello"); fin.close(); }
Он создает файл, но он ничего не пишет в нем. Я много искал, но ничего не нашел. В чем моя проблема? Нужно ли мне разрешение на запись в HDFS?
Благодарю.
- Почему этот общий код компилируется в java 8?
- Java -Какая переменная экземпляра?
- Вызов статических общих методов
- Java - почему нет перегрузки метода на основе возвращаемого типа?
- Формат Java 8 LocalDate Jackson
- Как работает аннотация «Spring @ResponseBody» в этом примере приложения RESTful?
- Как Autowire Bean из родового типа весной?
- Заставить часовой пояс Java как GMT / UTC
- Игнорирование новых полей объектов JSON с использованием Jackson
- Как форматировать строку в письме, чтобы Outlook распечатывал разрывы строк?
- JPA: однонаправленное многоканальное и каскадное удаление
- Как подключить источник или JavaDoc в eclipse для любого файла jar, например JavaFX?
- Доступ к весенним бобам из сервлета в JBoss
альтернатива @ Tariq’s asnwer, вы можете передать URI при получении файловой системы
Configuration configuration = new Configuration(); FileSystem hdfs = FileSystem.get( new URI( "hdfs://localhost:54310" ), configuration ); Path file = new Path("hdfs://localhost:54310/s2013/batch/table.html"); if ( hdfs.exists( file )) { hdfs.delete( file, true ); } OutputStream os = hdfs.create( file, new Progressable() { public void progress() { out.println("...bytes written: [ "+bytesWritten+" ]"); } }); BufferedWriter br = new BufferedWriter( new OutputStreamWriter( os, "UTF-8" ) ); br.write("Hello World"); br.close(); hdfs.close();
Либо укажите HADOOP_CONF_DIR
среды HADOOP_CONF_DIR
в папку конфигурации Hadoop или добавьте следующие 2 строки в код:
config.addResource(new Path("/HADOOP_HOME/conf/core-site.xml")); config.addResource(new Path("/HADOOP_HOME/conf/hdfs-site.xml"));
Если вы не добавите этого, ваш клиент попытается записать локальную FS, что приведет к исключению, исключенному из разрешения.
Пожалуйста, попробуйте подход ниже.
FileSystem fs = path.getFileSystem(conf); SequenceFile.Writer inputWriter = new SequenceFile.Writer(fs, conf, path, LongWritable.class, MyWritable.class); inputWriter.append(new LongWritable(uniqueId++), new MyWritable(data)); inputWriter.close();