У меня есть искровая работа в EMR. Работа отлично работает, когда я не включаю sparkSession.close (). Всякий раз, когда я вызываю sparksession.close (), задание будет зависать и продолжать выводить журнал следующим образом, а затем повторно обрабатывать последний этап.
INFO YarnAllocator: Исполнитель для контейнера Контейнер_ _ завершен из-за события YARN (например, упреждение), а не из-за ошибки в запущенном задании.
INFO YarnAllocator: Завершено контейнер container_ _ на хосте: ip-172-31-26-30.ec2.internal (состояние: ЗАВЕРШЕНО, статус выхода: 0)
Я сравнил работу, которая не вызывает close (), с той, у которой есть вызов, журнал немного отличается. По сути, в задании нет функции close (), есть еще одна строка в журнале, которая выделена жирным шрифтом ниже.
20/02/22 02:46:19 Выполнено ** работа успешно. outputPath: **
20/02/22 02:46:20 INFO ApplicationMaster: окончательный статус приложения: SUCCEEDED, выходной код: 0
20/02/22 02 : 46: 20 ИНФОРМАЦИЯ SparkContext: вызов остановки () из отключающего крюка
20/02/22 02:46:20 ИНФОРМАЦИЯ SparkUI: остановлен веб-интерфейс Spark в http://ip-**
20/02/22 02:46:20 INFO YarnAllocator: драйвер запросил общее количество исполнителей: 0.
20/02/22 02:46:20 INFO YarnClusterSchedulerBackend: Закрытие завершение работы всех исполнителей 20/02/22 02:46:20 ИНФОРМАЦИЯ YarnSchedulerBackend $ YarnDriverEndpoint: запросить завершение работы каждого исполнителя
20/02/22 02:46:20 ИНФОРМАЦИЯ SchedulerExtensionServices: Остановка SchedulerExtensionServices
Я подозреваю, что функция close () была выполнена перед установкой статуса приложения. Поэтому я добавил несколько секунд времени сна, прежде чем закрыть. Тем не менее, это не работает вообще.
Кстати, это задание выведет более 20 000 небольших файлов на S3.
Может кто-нибудь помочь мне с этой проблемой?