Tengo un problema al intentar copiar un directorio de mi sistema local a HDFS usando el código de Java. Puedo mover archivos individuales pero no puedo encontrar una manera de mover todo un directorio con subcarpetas y archivos. Alguien me puede ayudar con eso? Gracias por adelantado.copiando el directorio del sistema local a hdfs código de Java
Respuesta
Simplemente use el método FileSystem
copyFromLocalFile. Si la ruta de origen es un directorio local que se copiará en el destino HDFS:
...
Configuration conf = new Configuration();
conf.addResource(new Path("/home/user/hadoop/conf/core-site.xml"));
conf.addResource(new Path("/home/user/hadoop/conf/hdfs-site.xml"));
FileSystem fs = FileSystem.get(conf);
fs.copyFromLocalFile(new Path("/home/user/directory/"),
new Path("/user/hadoop/dir"));
...
la ruta para hdfs que estoy proporcionando es de la forma "hdfs: //cluster.abc.com: 8080/user/something", pero dice "FS incorrecto, archivo esperado: ///". ¿Alguna ayuda para esto? – Chirag
¿Qué valor tiene en core-site.xml para fs.default.name? Debería apuntar a hdfs: // host [: port] –
gracias. estableciendo fs.default.name al hdfs requerido: // host: puerto trabajado. – Chirag
Aquí está el código completo de trabajo para leer y escribir a HDFS. Tiene dos argumentos
ruta de entrada (HDFS locales /)
ruta de salida (HDFS)
Solía Cloudera caja de arena.
package hdfsread;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class ReadingAFileFromHDFS {
public static void main(String[] args) throws IOException {
String uri = args[0];
InputStream in = null;
Path pt = new Path(uri);
Configuration myConf = new Configuration();
Path outputPath = new Path(args[1]);
myConf.set("fs.defaultFS","hdfs://quickstart.cloudera:8020");
FileSystem fSystem = FileSystem.get(URI.create(uri),myConf);
OutputStream os = fSystem.create(outputPath);
try{
InputStream is = new BufferedInputStream(new FileInputStream(uri));
IOUtils.copyBytes(is, os, 4096, false);
}
catch(IOException e){
e.printStackTrace();
}
finally{
IOUtils.closeStream(in);
}
}
}
Hola cuando pruebo este, obtengo un error de org/apache/hadoop/fs/FSDataOutputStream. He agregado bibliotecas hadoop-common, hadoop-hdfs a mi pom. y también agregué core-site.xml, hdfs-site.xml a mi configuración. – user4342532
- 1. Copiando archivo desde HDFS a la máquina local
- 2. Ruta del directorio local
- 3. ¿Es seguro "ramificar" un clon de un repositorio mercurial local simplemente copiando todo el directorio?
- 4. código de Java para buscar todos los archivos .doc y .docx del sistema local
- 5. Copiando un archivo de un directorio a otro con Ruby
- 6. symlink-copiando una jerarquía de directorio
- 7. ¿Cómo funciona Copy-local? log4net.dll no se está copiando al directorio de salida de MyProject
- 8. ¿Cómo copiar el archivo del sistema local a otro sistema en C# (aplicación de Windows)?
- 9. Transferir archivo desde HDFS
- 10. Convierte un QDateTime en UTC a hora local del sistema
- 11. ¿Mi código impide el cruce del directorio?
- 12. Copiando de BitmapSource a WritableBitmap
- 13. Detalles del directorio de Windows temp (Java)
- 14. Aplicación del navegador y acceso al sistema de archivos local
- 15. Anular propiedad del sistema en Java (sin código)
- 16. java 7 preguntas de supervisión del directorio
- 17. Microsoft.Jet.OLEDB.4.0 no está registrado en el sistema local
- 18. ¿Se puede crear el archivo temporal de flymake en el directorio temporal del sistema?
- 19. ¿Cómo copio archivos de S3 a Amazon EMR HDFS?
- 20. Gradle store en el sistema de archivos local
- 21. iPhone - Código de sonido del sistema
- 22. Empuje el Proyecto Git al Directorio Local
- 23. Sonidos del sistema en Java
- 24. ¿Cómo configuro el reloj del sistema de Windows a la hora local correcta usando C#?
- 25. Obtener salida de símbolo del sistema a cadena en Java
- 26. Ejecución de msiexec desde un servicio (cuenta del sistema local)
- 27. ¿Cómo obtengo la hora del sistema local en PHP?
- 28. formato de fecha del sistema no recoger Django local
- 29. cambiando el directorio desde dentro de un programa c en windows usando el comando del sistema
- 30. Instalación de OSQA en Windows (sistema local)
¿Qué versión de Hadoop estás utilizando? 'bin/hadoop dfs -copyFromLocal folder' copia' folder' y recursivamente todo en él está bien para mí. –
porque el directorio no es un 'archivo'. debe crear el directorio recursivamente y mover el archivo uno por uno (puede hacerlo en paralelo, si lo desea). Por supuesto, debe tener en cuenta que esta operación no es atómica, por lo que si falla, algunos archivos quedarán inacabados en hdfs. – octo