Задание потоковой передачи Spark изменяет статус на ПРИНЯТО через несколько дней ПРИНЯТО - PullRequest
0 голосов
/ 26 июня 2018

У меня давно запущено искровое потоковое задание, которое читает с кафки. Это задание запускается один раз и ожидается, что оно будет выполняться вечно.

Кластер керберизован.

Что я заметил, так это то, что работа выполняется нормально в течение нескольких дней (более 7 дней). В начале работы мы видим, что он получает маркер делегирования HDFS, действительный в течение 7 дней.

18/06/17 12:32:11 ИНФОРМАЦИЯ hdfs.DFSClient: Создан токен для пользователя: HDFS_DELEGATION_TOKEN владелец = пользователь @ домен, возобновитель = пряжа, realUser =, отпускная дата = 1529213531903, maxDate = 1529818331903, sequenceNumber = 91533d, masterKey = 385 по ha-hdfs: кластер

Задание продолжается более 7 дней, но после этого периода (через несколько дней после maxDate) оно случайно и внезапно меняет статус на ПРИНЯТО. После этого он пытается получить новый билет Kerberos и не может выдать ошибку для Kerberos -

18/06/26 01:17:40 INFO yarn.Client: Отчет приложения для application_xxxx_80353 (состояние: RUNNING)
18/06/26 01:17:41 INFO yarn.Client: Отчет о применении для application_xxxx_80353 (состояние: РАБОТАЕТ)
18/06/26 01:17:42 INFO yarn.Client: Отчет о применении для application_xxxx_80353 (состояние: ПРИНЯТО)
18/06/26 01:17:42 ИНФО пряжа. Клиент:
клиентский токен: токен {вид: YARN_CLIENT_TOKEN, сервис:}

Окончательное исключение -

18/06/26 01:17:45 ПРЕДУПРЕЖДЕНИЕ security.UserGroupInformation: PriviledgedActionException as: user @ domain (auth: KERBEROS) причина: javax.security.sasl.SaslException: инициирование GSS сбой [вызвано GSSException: не предоставлены действительные учетные данные (Уровень механизма: не удалось найти ни одного Kerberos tgt)]

Примечание. Я уже пытался передать файл keytab, чтобы делегирование могло выполняться вечно. Но я не могу передать файл keytab в spark, поскольку он конфликтует с kafka jaas.conf.

Итак, есть 3 связанных вопроса -

  • Почему задание может изменить статус с ВЫПОЛНЯЯ на ПРИНЯТО?
  • Проблема возникает из-за того, что я не могу передать keytab? Если да, то как передать keytab при использовании kafka и spark-streaming через kerberos? -keytab не работает, так как мы передаем keytab с --files. keytab уже настроен в jaas.conf и распространяется с параметром --files в spark-submit. Любой другой способ работы может получить новый билет?
  • Когда задание снова пытается перейти в состояние RUNNING, YARN отклоняет его, поскольку у него нет действительного билета KRB. Поможет ли нам убедиться, что у узла драйвера всегда есть действительный билет KRB? Так что, когда это произойдет, это будет похоже на отправку новой искровой работы; поскольку у этого узла есть действительный билет KRB, и он не выдаст ошибку Kerberos.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Обновление здесь решения, которое решило мою проблему в интересах других. Решением было просто предоставить --principal и --keytab в качестве другого скопированного файла, чтобы не было конфликтов.

Почему задание может изменить статус с ВЫПОЛНЯЯ на ПРИНЯТО?

Приложение изменило статус из-за того, что билет Kerberos недействителен. Это может произойти в любое время после истечения срока аренды, но не может произойти в любое детерминированное время после истечения срока аренды.

Проблема возникает из-за того, что я не могу передать keytab?

Это действительно было из-за keytab. Для этого есть простое решение. Простой способ думать об этом - всякий раз, когда требуется доступ к HDFS, вам необходимо передать keytab и главное, если у вас есть потоковое задание. Просто скопируйте ваш файл keytab и передайте его с помощью: --keytab "my-copy-yarn.keytab" --principal "user @ domain". Все остальные соображения такие же, как у файла jaas и т. Д., Так что вам все равно нужно применить их , Так что это не мешает этому.

Когда задание снова пытается перейти в состояние RUNNING, YARN отклоняет его, поскольку у него нет действительного билета KRB. Поможет ли нам убедиться, что у узла драйвера всегда есть действующий билет KRB?

По сути, это происходит потому, что YARN пытается обновить билет внутри страны. В действительности не имеет значения, имеет ли узел, с которого было запущено приложение, действительный билет во время запуска новой попытки. У YARN должна быть достаточная информация, чтобы обновить тикет, и когда приложение было запущено, у него должен быть действительный тикет (вторая часть всегда будет верна, так как без этого задания даже не начнется, но вам нужно позаботиться о первой части)

0 голосов
/ 27 июня 2018
  • Почему задание может изменить статус с ВЫПОЛНЕНИЯ на ПРИНЯТО?

Задание перейдет из RUNNING в ACCEPTED, если приложение не удалось, и у вас все еще есть доступные попытки повторных попыток AM.

  • Проблема возникает из-за того, что я не могу передать keytab? Если да, то как передать keytab при использовании kafka и spark-streaming через kerberos? -keytab не работает, так как мы передаем keytab с --files. keytab уже настроен в jaas.conf и распространяется с параметром --files в spark-submit. Любой другой способ работы может приобрести новый билет?

Да. Spark позволяет долго работать с приложениями, но в защищенной системе вы должны передать keytab.

Цитирование Настройка Spark на YARN для долгосрочных приложений с добавлением акцента:

Долгосрочные приложения, такие как задания Spark Streaming, должны иметь возможность записи в HDFS, что означает, что пользователю hdfs может потребоваться делегировать токены, возможно, по истечении срока действия по умолчанию. Этот тип рабочей нагрузки ОБЯЗАТЕЛЬНО передает субъекту Kerberos и keytab скрипту spark-submit с использованием параметров --principal и --keytab . Таблица ключей копируется на хост, на котором работает ApplicationMaster, и имя входа Kerberos периодически обновляется с использованием принципала и таблицы ключей для создания необходимых маркеров делегирования, необходимых для HDFS.

Исходя из KAFKA-1696, эта проблема еще не решена, поэтому я не уверен, что вы можете сделать, если не используете CDH и не можете перейти на Spark 2.1.

Ссылка:

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