2016-07-01 6 views

Antwort

7

FileUtil bietet eine Methode zum Kopieren von Dateien.

Configuration configuration = new Configuration(); 
configuration.set("fs.defaultFS", "hdfs://abc:9000"); 
FileSystem filesystem = FileSystem.get(configuration); 
FileUtil.copy(filesystem, new Path("src/path"), filesystem, new Path("dst/path"), false, configuration); 

Wenn müssen Sie es auf einen anderen Cluster kopieren, machen gerade einen neuen Configuration und Setup und neue FileSystem.

+0

Dateien zu "verschieben", anstatt sie zu kopieren, setzen Sie einfach den booleschen Parameter 'deleteSource' auf' true' – Sean

0
If you want to move files from directory it is little bit tricky below code done same task for me !! 
val conf = new org.apache.hadoop.conf.Configuration() 
    val src:Path = new org.apache.hadoop.fs.Path(hdfsDirectory) 
    val fs = FileSystem.get(src.toUri,conf) 
    val srcPath: Path = new Path("hdfs://sourcePath/") 
    val srcFs =FileSystem.get(srcPath.toUri,conf) 
    val dstPath:Path =new Path("hdfs://targetPath/") 
    val dstFs =FileSystem.get(dstPath.toUri,conf) 
    val exists = fs.exists(new org.apache.hadoop.fs.Path(hdfsDirectory)) 
    val status:Array[FileStatus] = fs.listStatus(new Path(hdfsDirectory)) 
    if (status.length>0) { 
     status.foreach(x => { 
     println("My files: " + x.getPath) 
     FileUtil.copy(srcFs, x.getPath, dstFs, dstPath, true, conf) 
     println("Files moved !!" +x.getPath) 
     } 
    )} 
    else{ 
     println("No Files Found !!") 
    }