почему существует остаточный Java-процесс даже после закрытия контекста искры - PullRequest
0 голосов
/ 17 ноября 2018

Я написал небольшое приложение на 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 вопроса

  1. Почему sparkcontext.stop не убивает процесс Java на главном узле
  2. Мой кластер является интегрированным кластером Kerberos. Работник отправляет задание с keytab и принципалом, заполненным в контексте искры. Если работник не обрабатывает какие-либо задания в течение приемлемого периода времени, следующее задание будет с ошибкой за исключением:

org.apache.hadoop.ipc.RemoteException (java.io.IOException): делегирование Токен может быть выдан только с Kerberos или веб-аутентификацией.

Когда я перезапускаю приложение, все снова в порядке. Я подозреваю, что из-за просроченного токена, оставшегося в Java-процессе, я столкнулся с этой проблемой. Есть ли лучший способ справиться с этим сценарием.

Я твердо верю, что если бы Java-процесс не остался, я бы не столкнулся со второй проблемой.

Любые предложения / указатели будут отличной помощью.

Дополнительная информация: задания представлены как «пряжа», а режим развертывания - «клиент».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...