java - 使用 Java API 的 hdfs 问题

标签 java hadoop

我使用以下代码删除了 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/

相关文章:

java - 我如何通知用户他输入的值已被限制为 JSpinner 下限?

java - ArrayList 插入和检索顺序

java - 运行 SoapUI 后,无法启动 selenium

hadoop - Hive:合并配置设置不起作用

hadoop - HBase:我需要jobtracker/tasktracker吗

hadoop - 识别 map/reduce 作业瓶颈的正确方法是什么?

java - JPA - 何时使用关系?

java - Apache Ignite SQL 查询结果差异

hadoop - HBASE-org.apache.hadoop.hbase.MasterNotRunningException

java - 有没有办法在另一个EMR作业中调用EMR群集的JobFlowId?