web-dev-qa-db-ja.com

Java APIを使用してHadoopでファイルを移動しますか?

Java APIを使用してHDFS内でファイルを移動したい。これを行う方法がわかりません。FileSystemクラスは、ローカルファイルシステムとの間の移動のみを許可したいようです。 。しかし、HDFSに保持し、そこに移動したいと思います。

私は何か基本的なものが欠けていますか?私がそれを行うことができる唯一の方法は、入力ストリームからそれを読み取り、それを書き戻すことです...そして古いコピーを削除します(うん)。

ありがとう

17
Wanderer

FileSystem.rename() を使用します:

public abstract boolean rename(Path src, Path dst) throws IOException

パスsrcの名前をパスdstに変更します。ローカルのfsまたはリモートのDFSで実行できます。

パラメータ:
src-名前を変更するパス
dst-名前変更後の新しいパス
戻り値:
true名前の変更が成功した場合
スロー:
IOException -失敗時

22
bajafresh4life

Java.nio。*アプローチは、HDFSで常に機能するとは限りません。だから、うまくいく次の解決策を見つけました。

Org.Apache.hadoop.fs.FileUtil.copy APIを使用して、あるディレクトリから別のディレクトリにファイルを移動します

val fs = FileSystem.get(new Configuration())
        val conf = new org.Apache.hadoop.conf.Configuration()
        val srcFs = FileSystem.get(new org.Apache.hadoop.conf.Configuration())
        val dstFs = FileSystem.get(new org.Apache.hadoop.conf.Configuration())
        val dstPath = new org.Apache.hadoop.fs.Path(DEST_FILE_DIR)

        for (file <- fileList) {
          // The 5th parameter indicates whether source should be deleted or not
          FileUtil.copy(srcFs, file, dstFs, dstPath, true, conf)
4
Raj R

FileUtiltsreplaceFileも目的を解決すると思います。 http://hadoop.Apache.org/common/docs/current/api/org/Apache/hadoop/fs/FileUtil.html#replaceFile(Java.io.File 、Java.io.File )

1
Kapil D
hdfsDirectory="hdfs://srcPath"   
 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://srcPath")
        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 !!")
        }
0
akshay jain