У меня есть кластер Had oop HDFS и Yarn, в котором я запускаю задания Spark, и по умолчанию я не включил «yarn-log-aggregation».
Затем, после включения Kerberos, я настроить HDFS & Yarn для работы с Linux учетной записью «app01» и с принципом Kerberos & keytab с тем же именем «app01» и сгенерировал некоторые определяемые пользователем принципы и таблицы ключей c, взяв в качестве примера конечного пользователя «user01» ( такой учетной записи Linux нет).
Затем, когда я запускаю «kinit» для аутентификации как «user01» и отправляю задание, я не могу просмотреть его журнал заданий из Yarn web GUI ( "журналы"): Я получил это: введите здесь описание изображения Затем, когда я нажимаю на любой из них, я получаю исключение:
Exception reading log file. Application submitted by 'user01' doesn't own requested log file : stderr
введите описание изображения здесь
Когда я проверил с Linux, я увидел, что на рабочем узле файлы журнала Linux были созданы с учетной записью Linux "app01", но похоже, что Yarn ожидает файлы журнала принадлежать пользователю "user01", что невозможно.
* 10 16 * Затем я попробую второе решение: включение «пряжи-лог-агрегация». Я добавил приведенную ниже конфигурацию в yarn-site. xml и перезапустил HDFS & Yarn.
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<property>
<name>yarn.nodemanager.delete.debug-delay-sec</name>
<value>600</value>
</property>
Когда все наладилось, я становлюсь «user01» и отправляю другое искровое задание. После выполнения работы я попытался просмотреть журнал по ссылке «Журналы» пряжи GUI, а затем получил следующее исключение:
Failed while trying to construct the redirect url to the log server. Log Server url may not be configured
java.lang.Exception: Unknown container. Container either has not started or has already completed or doesn't belong to this node at all.
Затем я попытался проверить журнал из пользовательского интерфейса Spark при переходе от Ссылки «stdout» или «stderr» в пользовательском интерфейсе Spark, я достиг того же места с тем же исключением, что и выше.
Затем я сделал еще одну попытку, чтобы использовать «yarn logs -applicationId xxxx» для получения журнала задания , а затем получил исключение:
Can not find any log file matching the pattern: [ALL] for the application: application_1588684192939_0001
Can not find the logs for the application: application_1588684192939_0001 with the appOwner: user01
Затем я проверил журнал пряжи из рабочего узла и увидел несколько исключений, повторяющихся из следующего:
2020-05-05 14:10:31,450 ERROR org.apache.hadoop.yarn.logaggregation.AggregatedLogFormat: Error aggregating log file. Log file : /opt/disk1/data/yarn/userlogs/application_1588684192939_0001/
container_e57_1588684192939_0001_01_000001/stdout. Owner 'app01' for path /opt/disk1/data/yarn/userlogs/application_1588684192939_0001/container_e57_1588684192939_0001_01_000001/stdout did not match expected owner 'user01'
java.io.IOException: Owner 'app01' for path /opt/disk1/data/yarn/userlogs/application_1588684192939_0001/container_e57_1588684192939_0001_01_000001/stdout did not match expected owner 'user01'
at org.apache.hadoop.io.SecureIOUtils.checkStat(SecureIOUtils.java:284)
at org.apache.hadoop.io.SecureIOUtils.forceSecureOpenForRead(SecureIOUtils.java:218)
at org.apache.hadoop.io.SecureIOUtils.openForRead(SecureIOUtils.java:203)
at org.apache.hadoop.yarn.logaggregation.AggregatedLogFormat$LogValue.secureOpenFile(AggregatedLogFormat.java:293)
at org.apache.hadoop.yarn.logaggregation.AggregatedLogFormat$LogValue.write(AggregatedLogFormat.java:245)
at org.apache.hadoop.yarn.logaggregation.AggregatedLogFormat$LogWriter.append(AggregatedLogFormat.java:544)
at org.apache.hadoop.yarn.logaggregation.filecontroller.tfile.LogAggregationTFileController.write(LogAggregationTFileController.java:107)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AppLogAggregatorImpl$ContainerLogAggregator.doContainerLogAggregation(AppLogAggregatorImpl.java:581)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AppLogAggregatorImpl.uploadLogsForContainers(AppLogAggregatorImpl.java:323)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AppLogAggregatorImpl.doAppLogAggregation(AppLogAggregatorImpl.java:459)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AppLogAggregatorImpl.run(AppLogAggregatorImpl.java:415)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService$1.run(LogAggregationService.java:265)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Итак, для Теперь, проблема в том, что после включения Kerberos конечный пользователь больше не может просматривать журнал заданий Spark , независимо от yarn GUI, Spark UI или командной строки yarn. Что я могу получить, так это проверка журналов из файловой системы Linux или из папки агрегирования журналов HDFS (доступ к которой конечный пользователь не имеет).
Кто-нибудь может показать мне какую-нибудь идею, пожалуйста? Большое спасибо!