с kerberos на кластере.
Код:
val appId = ApplicationId.fromString(spark.sparkContext.applicationId)
val yarnClient = YarnClient.createYarnClient
val conf = SparkHadoopUtil.get.newConfiguration(spark.sparkContext.getConf)
yarnClient.init(conf)
yarnClient.start()
val appReport = yarnClient.getApplicationReport(appId)
Результат:
Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
Керберос через kinit:
kinit -kt ${user_name}.keytab ${user_name}@$domain
spark-submit --master yarn --deploy-mode cluster ….
Смотрю в сторону использования UserGroupInformation, но пока не понимаю, что именно брать и совсем не понимаю, куда взятое пристроить(
Ну, или делать не kinit, а --keytab ${user_name}.keytab --principal ${user_name}@$domain ?
У меня в скрипте запуска на керберизованном серваке все так же, сначала kinit, чтоб точно тикет был, а потом keytabfile.keytab и принципала указываешь. Я думаю не в этом проблема, но все же, проверь что ты верно путь до кейтаба указываешь
Приложение работает, обращения к hdfs производятся, так что в целом всё хорошо. И приложение не знает пути к кейтабу, сейчас всё через kinit и этого достаточно для spark-submit, контекст создаётся правильный. Но ярн клиент о нём не знает
Обсуждают сегодня