0

サブディレクトリを作成するときに親ディレクトリが存在しない場合、HDFS コマンドが失敗するようにします。いずれかを使用するとFileSystem#mkdirs、例外が発生せず、代わりに存在しない親ディレクトリが作成されることがわかりました。

import java.util.UUID
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, Path}

val conf = new Configuration()
conf.set("fs.defaultFS", s"hdfs://$host:$port")

val fileSystem = FileSystem.get(conf)
val cwd = fileSystem.getWorkingDirectory

// Guarantee non-existence by appending two UUIDs.
val dirToCreate = new Path(cwd, new Path(UUID.randomUUID.toString, UUID.randomUUID.toString))

fileSystem.mkdirs(dirToCreate)

親ディレクトリが存在しない場合に HDFS に強制的に例外をスローさせるにはどうすればよいでしょうか?

4

1 に答える 1

0

FileSystem API は、このタイプの動作をサポートしていません。代わりに、FileContext#mkdir使用する必要があります。例えば:

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileContext, FileSystem, Path}
import org.apache.hadoop.fs.permission.FsPermission

val files = FileContext.getFileContext()
val cwd = files.getWorkingDirectory
val permissions = new FsPermission("644")
val createParent = false

// Guarantee non-existence by appending two UUIDs.
val dirToCreate = new Path(cwd, new Path(UUID.randomUUID.toString, UUID.randomUUID.toString))

files.mkdir(dirToCreate, permissions, createParent)

上記の例では、次がスローされます。

java.io.FileNotFoundException: Parent directory doesn't exist: /user/erip/f425a2c9-1007-487b-8488-d73d447c6f79
于 2017-12-17T19:44:22.077 に答える