通常、渡すパスは、先頭のスラッシュが渡されない場合はユーザーの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");