Escreva um arquivo em hdfs com Java

Eu quero criar um arquivo no HDFS e gravar dados nele. Eu usei este código:

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(); } 

Cria o arquivo, mas não escreve nada nele. Eu procurei muito mas não encontrei nada. Qual é o meu problema? Preciso de alguma permissão para escrever no HDFS?

Obrigado.

uma alternativa para o asnwer do @Tadiq você poderia passar o URI ao obter o sistema de arquivos

 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(); 

Defina a variável de ambiente HADOOP_CONF_DIR para sua pasta de configuração do Hadoop ou adicione as duas linhas a seguir em seu código:

 config.addResource(new Path("/HADOOP_HOME/conf/core-site.xml")); config.addResource(new Path("/HADOOP_HOME/conf/hdfs-site.xml")); 

Se você não adicionar isso, seu cliente tentará gravar no FS local, resultando na exceção de permissão negada.

Por favor, tente a abordagem abaixo.

 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();