1

私はdir構造を持っています:

/  
   DIR files
   DIR usr

私のHDFSはで利用できるhdfs://db:123ので、構成を作成します。

configuration.set("fs.default.name", "hdfs://db:123");

次に、すべてのディレクトリ/パスはルート(/)を基準にしています。ディレクトリを作成しましたfiles。ここにすべてのファイルを保存します。

/files/コードの各パスの先頭に手動で追加する必要がありますか、それとも構成を作成できますか?

configuration.set("fs.default.name", "hdfs://db:123/files");

コードを変更する必要はありませんか?

4

1 に答える 1

2

通常、渡すパスは、先頭のスラッシュが渡されない場合はユーザーのHDFSホームディレクトリからの相対パスであり、接頭辞が/の場合は絶対パスです。

Path.makeQualifiedのソースを調べると、パスが絶対的でないかどうかのテストが表示されます(これは1.0.3からのものです)。

/** Returns a qualified path object. */
public Path makeQualified(FileSystem fs) {
  Path path = this;
  if (!isAbsolute()) {
    path = new Path(fs.getWorkingDirectory(), this);
  }

DistributedFileSystem.getWorkingDirectory()応答でworkingDirというインスタンス変数を使用します。これは、setWorkingDirectory(path)メソッドを使用して設定できます。自分で作業ディレクトリを設定しない場合、デフォルトはユーザーのホームディレクトリです(メソッドで確認できるようにDistributedFileSystem.initialize(..)

this.workingDir = getHomeDirectory();

そしてDistributedFileSystem.getHomeDirectory()

public Path getHomeDirectory() {
  return new Path("/user/" + dfs.ugi.getShortUserName()).makeQualified(this);
}

構成プロパティを介して作業ディレクトリを構成できるようには見えないため、ジョブを送信する前に次を呼び出す必要があります(その後、すべての相対パスは/ filesに相対されます)。

FileSystem.get(configuration).setWorkingDirectory("/files");
于 2012-12-13T02:30:54.663 に答える