txt texto por modificar manejo linea leer ejemplos como clase binarios archivos archivo abrir java hadoop hdfs

texto - manejo de archivos en java netbeans



Escribir un archivo en hdfs con Java (3)

Quiero crear un archivo en HDFS y escribir datos en eso. Usé 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(); }

Crea el archivo, pero no escribe nada en él. Busqué mucho pero no encontré nada. ¿Cuál es mi problema? ¿Necesito algún permiso para escribir en HDFS?

Gracias.


Defina la variable de entorno HADOOP_CONF_DIR en su carpeta de configuración Hadoop o agregue las siguientes 2 líneas en su código:

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

Si no agrega esto, su cliente intentará escribir en el FS local y, por lo tanto, dará como resultado la excepción de permiso denegado.


Intente el siguiente enfoque.

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


una alternativa a la respuesta de @ Tariq podría pasar el URI al obtener el sistema de archivos

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