2015-03-03 3 views
0

Я использовал следующий код для удаления файла в HDFS файловойПроблема с HDFS с Java API

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); 

Я создал пользователь с именем «хугом» в моей локальной машине, и к моему удивлению, я был в состоянии удалите файл (file.copy) в файловой системе hdfs с данным номером, владельцем которого был xyz. Это означает, что кто-то с доступом к URL-адресу namenode может удалить любой файл, создав hdfs или пользователя root?

Я понимаю, что Java API имеет возможность аутентифицировать пользователя с помощью Kerberos, я считаю, что все не так с нашей конфигурацией системы hadoop. Может ли кто-нибудь помочь мне правильно настроить безопасность? Я считаю, что удаленный пользователь должен предоставить ключ или ключ для аутентификации. Точно так же имя пользователя не будет!

PS: Я использую Cloudera 5.3.1

ответ

1

Да, если у вас нет аутентификации Kerberos включен в кластере, то вы действительно не аутентификации вообще. Если вы заботитесь о своих данных, вы должны включить аутентификацию Kerberos.