我使用以下代码删除了 hdfs 文件系统上的文件
conf = new org.apache.hadoop.conf.Configuration();
// TODO: Change IP
conf.set("fs.defaultFS", "hdfs://aaa.bbb.com:1234/user/hdfs");
conf.set("hadoop.job.ugi", "hdfs");
conf.set("fs.hdfs.impl",
org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()
);
conf.set("fs.file.impl",
org.apache.hadoop.fs.LocalFileSystem.class.getName()
);
fs = FileSystem.get(conf);
fs.delete(new Path("/user/hdfs/file.copy"), true);
我在我的本地机器上创建了一个名为“xyz”的用户,令我惊讶的是我能够删除 hdfs 文件系统中的文件 (file.copy)所有者为 xyz 的给定名称节点。这意味着有权访问 namenode url 的人可以通过创建 hdfs 或 root 用户来删除任何文件?
我知道 Java API 有一种方法可以使用 Kerberos 对用户进行身份验证,我相信我们的 hadoop 系统配置确实有问题。有人可以帮我正确设置安全性吗?我相信远程用户应该提供一些 key 或 key 文件来验证自己。只是相同的用户名不行!
PS:我使用的是Cloudera 5.3.1
最佳答案
是的,如果您没有在集群上启用 Kerberos 身份验证,那么您实际上根本就没有身份验证。如果您关心您的数据,您绝对应该启用 Kerberos 身份验证。
关于java - 使用 Java API 的 hdfs 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28831602/