Ответ 1
После некоторого изучения я пришел к следующему решению:
- Мне действительно не нужно полное решение Kerberos, в настоящее время достаточно, чтобы клиенты могли запускать запросы HDFS от любого пользователя. Сама среда считается безопасной.
- Это дает мне решение, основанное на классе UserGroupInformation hasoop. В будущем я могу расширить его для поддержки Kerberos.
Пример кода, вероятно, полезен для людей как для "поддельной аутентификации", так и для удаленного доступа к HDFS:
package org.myorg;
import java.security.PrivilegedExceptionAction;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileStatus;
public class HdfsTest {
public static void main(String args[]) {
try {
UserGroupInformation ugi
= UserGroupInformation.createRemoteUser("hbase");
ugi.doAs(new PrivilegedExceptionAction<Void>() {
public Void run() throws Exception {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://1.2.3.4:8020/user/hbase");
conf.set("hadoop.job.ugi", "hbase");
FileSystem fs = FileSystem.get(conf);
fs.createNewFile(new Path("/user/hbase/test"));
FileStatus[] status = fs.listStatus(new Path("/user/hbase"));
for(int i=0;i<status.length;i++){
System.out.println(status[i].getPath());
}
return null;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
Полезная ссылка для тех, у кого есть аналогичная проблема:
- Сообщение блога Cloudera Авторизация и аутентификация в Hadoop". Короткие, сфокусированные на простом объяснении подходов безопасности в области безопасности. Нет информации, специфичной для решения Java API, но полезной для понимания проблемы.
UPDATE:
Альтернатива для тех, кто использует утилиту командной строки hdfs
или hadoop
без локального пользователя:
HADOOP_USER_NAME=hdfs hdfs fs -put /root/MyHadoop/file1.txt /
Что вы на самом деле делаете, так это чтение локального файла в соответствии с вашими локальными разрешениями, но при размещении файла на HDFS вы аутентифицированы как пользователь hdfs
.
Это похоже на аналогичные свойства кода API:
- Вам не нужно
sudo
. - Вам не нужны фактические hdf файлы локального пользователя.
- Вам не нужно ничего копировать или изменять разрешения из-за предыдущих пунктов.