2

HDFS 管理员指南指出

“当一个文件或目录被创建时,它的所有者是客户端进程的用户身份,它的组是父目录的组(BSD规则)。”

这条规则有任何例外吗?以用户“clientA”身份运行进程有什么方法可以创建具有不同所有者的文件?

我正在运行hadoop.security.authentication=simple。看起来我可以setOwner事后打电话,这是一个完全有效的后备解决方案。

4

2 回答 2

1

不确定这是否是您想要的,但您可以从当前用户帐户的脚本/进程中执行以下操作,以在 HDFS 中使用其他用户帐户创建文件。但是,如果您的其他用户有密码,您需要手动输入密码或找到自己的方法来输入密码。

例如

 su - otherUser -c 'hadoop fs -touchz myfile'

如果这不是您要查找的内容,是的,设置所有者是您使用其他用户创建文件后的唯一方法。

附录:如果您想要像用户隔离这样的 HDFS 访问的严格安全性,以便只有目录/文件的真正所有者可以访问它,您可能可以将 Hadoop 配置为使用 Kerberos 安全性。

看看这些链接(请先看看子任务):

https://issues.apache.org/jira/browse/HADOOP-4487

和,

http://hadoop.apache.org/docs/current/hadoop-auth/Configuration.html

希望这可以帮助。

谢谢

于 2013-06-13T19:55:54.153 回答
1

看起来很正常吗??

public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException {
        // TODO Auto-generated method stub

        Configuration conf = new Configuration();
        conf.addResource(new Path("/hadoop/projects/hadoop-1.0.4/conf/core-site.xml"));
        conf.addResource(new Path("/hadoop/projects/hadoop-1.0.4/conf/hdfs-site.xml"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the directory URI...");
        String dirPath = br.readLine();
        URI uri = new URI(dirPath);
        System.out.println("Enter the user...");
        String user = br.readLine();
        FileSystem fs = FileSystem.get(uri, conf, user);
        fs.mkdirs(new Path(uri.toString()), FsPermission.getDefault());
        FSDataOutputStream fsDataOutputStream = fs.create(new Path(uri.toString()+"/file.txt"));
        fsDataOutputStream.writeBytes("This is a demo file..!!!!");
    }
于 2013-06-13T21:11:24.627 回答