"创建文件或目录时,其所有者是用户标识 客户端进程,其组是父组的组 目录(BSD规则)。"
这条规则有例外吗?以用户' clientA'运行流程有没有办法用不同的所有者创建文件?
我正在使用hadoop.security.authentication=simple
。看起来我可以在事后调用setOwner
,这是一个非常有效的后备解决方案。
答案 0 :(得分:1)
不确定这是否是您想要的,但您可以从当前用户帐户的脚本/进程执行以下操作,以在HDFS中创建包含其他用户帐户的文件。但是,如果您的其他用户有密码,您需要手动输入密码或找到自己的方式来执行相同的操作。
e.g。
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
希望这有帮助。
由于
答案 1 :(得分: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..!!!!");
}