Я запускаю следующий код для взаимодействия с кластером hasoop, включенным в kerberos.Kerberos Java Credentials Cache
val t1 = new Thread() {
override def run() {
println("output of first thread")
val conf = new Configuration
conf.set("hadoop.security.authentication", "Kerberos")
conf.set("fs.defaultFS", "hdfs://192.168.23.206:8020")
UserGroupInformation.setConfiguration(conf)
UserGroupInformation.loginUserFromKeytab("[email protected]", "E:\\\\dummy.keytab");
val fs = FileSystem.get(conf);
val status = fs.listStatus(new Path("/"))
println(UserGroupInformation.getLoginUser().getShortUserName())
}
}
val t2 = new Thread() {
override def run() {
println("Running Thread 2")
val conf = new Configuration
conf.set("hadoop.security.authentication", "Kerberos")
conf.set("fs.defaultFS", "hdfs://192.168.23.206:8020")
UserGroupInformation.setConfiguration(conf)
UserGroupInformation.loginUserFromKeytab("[email protected]", "E:\\\\test.keytab");
val fs = FileSystem.get(conf);
val status = fs.listStatus(new Path("/"))
println(UserGroupInformation.getLoginUser().getShortUserName())
}
}
t1.start
Thread.sleep(5000)
t2.start
Этот код выдает следующий результат.
тест
тест
Это означает, что второй поток чрезмерно написать учетные данные, полученные с помощью первого потока. У меня есть следующие вопросы: 1. Если учетные данные хранятся в моей среде Windows. Я искал в C: \ Users \ имя пользователя, но я не нашел. 2. Как я могу решить эту проблему кеширования избыточных писем, когда несколько пользователей пытаются получить доступ к хаоу за раз.
Благодаря
Если вы были ** не **, используя API Hadoop, я бы предложил вам ** RTFM **> для глобальных настроек Kerberos, ср. http://web.mit.edu/kerberos/krb5-1.12/doc/basic/ccache_def.html и 'KRB5CCNAME' env variable> для настроек Java, ср. https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/tutorials/AcnOnly.html –