首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止Hadoop的HDFS API创建父目录?

如何防止Hadoop的HDFS API创建父目录?
EN

Stack Overflow用户
提问于 2017-12-18 01:04:33
回答 1查看 499关注 0票数 0

如果在生成子目录时父目录不存在,我希望HDFS命令失败。当我使用任何FileSystem#mkdirs时,我发现没有引发异常,而是创建了不存在的父目录:

代码语言:javascript
运行
复制
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抛出异常?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-18 03:44:22

FileSystem应用编程接口不支持这种类型的行为。相反,应该使用FileContext#mkdir;例如:

代码语言:javascript
运行
复制
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)

上面的例子将抛出:

代码语言:javascript
运行
复制
java.io.FileNotFoundException: Parent directory doesn't exist: /user/erip/f425a2c9-1007-487b-8488-d73d447c6f79
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47857456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档