我正在做的基本上是使用 java 代码自动化一些 shell 命令(这些命令,包括 hadoop shell 命令),现在我在 bash 上执行以下命令:
hadoop fs -mkdir path//tp//folder
hadoop fs -chmod a+w path//to//folder
一切正常,现在何时尝试使用 Java 代码执行相同的操作:
org.apache.hadoop.fs.FileSystem.mkdir(new Path("path//to//folder"),new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.ALL))
不幸的是,这种方法:
public void setPermission(Path p, FsPermission permission) throws IOException
{
}
未使用 Hadoop v 2.6.0 ~ 2.8.0 实现(分别为:空)
我的问题如何使用java代码向Hadoop路径添加读/写权限?
首先,您可能需要交叉检查分析结果。例如,如果你看这里,你会发现文件系统实际上是一个抽象类。因此,如果在某个时候实际实例化的特定子类覆盖了该空方法setPermissions()
- 例如基于底层操作系统,我不会感到惊讶。
无论如何,有一个简单但丑陋的解决方法:使用ProcessBuilder并运行
hadoop fs -chmod a+w path//to//folder
从爪哇内部。并写下:
// TODO: check with next version of hadoop if fs.FileSystem.setPermission() is now implemented