В моем серверном приложении я подключаюсь к Kerberos, защищенному кластером Hadoop, из моего java-приложения. Я использую различные компоненты, такие как файловая система HDFS, Oozie, Hive и т.д. При запуске приложения я вызываю
UserGroupInformation.loginUserFromKeytabAndReturnUGI( ... );
Это возвращает экземпляр UserGroupInformation
, и я сохраняю его для жизни приложения. При выполнении привилегированных действий я запускаю их с помощью ugi.doAs(action)
.
Это отлично работает, но мне интересно, если и когда я должен продлить билет на кеберо в UserGroupInformation
? Я нашел метод UserGroupInformation.checkTGTAndReloginFromKeytab()
, который, похоже, обновляет билет, когда он близок к истечению срока действия. Я также обнаружил, что этот метод вызывается различными инструментами Hadoop, например WebHdfsFileSystem
.
Теперь, если я хочу, чтобы мое серверное приложение (возможно, работало в течение нескольких месяцев или даже лет), чтобы никогда не испытывать истечение срока действия билета, является наилучшим подходом? Чтобы задать конкретные вопросы:
- Могу ли я полагаться на разных клиентов Hadoop, которые они называют
checkTGTAndReloginFromKeytab
, когда это необходимо? - Должен ли я когда-либо позвонить
checkTGTAndReloginFromKeytab
в свой код? - Если это так, я должен сделать это перед каждым вызовом
ugi.doAs(...)
или, скорее, настроить таймер и называть его периодически (как часто)?