Я написал небольшое приложение на python, которое принимает запросы и выполняет задания pyspark в рабочих процессах. Все работает нормально, но даже после закрытия контекста искры процесс Java, который охватывал при запуске контекста искры, все еще завершается. Я проверил кластер, и ресурсы также высвобождаются должным образом после закрытия контекста. Также работник обрабатывает последующие запросы без каких-либо проблем.
10542 pts/3 Sl+ 0:00 \_ Worker - 1
12960 pts/3 Sl+ 0:22 | \_ /usr/jdk64/jdk1.8.0_77//bin/java - hdp.version=3.0.0.0-1634 -cp /usr/hdp/3.0.0.0-1634/spark2//conf/:/usr/hdp/3.0.0.0-1634/spark2/jars/*:/usr
Есть 2 вопроса
- Почему sparkcontext.stop не убивает процесс Java на главном узле
- Мой кластер является интегрированным кластером Kerberos. Работник отправляет задание с keytab и принципалом, заполненным в контексте искры. Если работник не обрабатывает какие-либо задания в течение приемлемого периода времени, следующее задание будет с ошибкой за исключением:
org.apache.hadoop.ipc.RemoteException (java.io.IOException): делегирование
Токен может быть выдан только с Kerberos или веб-аутентификацией.
Когда я перезапускаю приложение, все снова в порядке. Я подозреваю, что из-за просроченного токена, оставшегося в Java-процессе, я столкнулся с этой проблемой. Есть ли лучший способ справиться с этим сценарием.
Я твердо верю, что если бы Java-процесс не остался, я бы не столкнулся со второй проблемой.
Любые предложения / указатели будут отличной помощью.
Дополнительная информация: задания представлены как «пряжа», а режим развертывания - «клиент».