Почему я не могу запустить пример sparkPi на кластере Kubernetes (K8s)? - PullRequest
1 голос
/ 02 мая 2020

На данный момент у меня запущен и работает кластер K8s на виртуальных машинах внутри рабочей станции VMWare. Я пытаюсь развернуть приложение Spark, используя официальную документацию здесь . Тем не менее, я также обнаружил эту статью , которая прояснила ситуацию, я чувствовал.

Теперь, ранее моя установка работала во вложенных виртуальных машинах, в основном моя машина была на Win10, и у меня была Ubuntu ВМ, внутри которой у меня было еще 3 ВМ для кластера (не самая лучшая идея, я знаю).

Когда я попытался запустить свою настройку, следуя упомянутой статье, я сначала создал служебную учетную запись внутри кластера с именем spark, затем создал clusterrolebinding с именем spark-role, дал edit в качестве кластерной роли и назначил ее учетной записи службы spark, чтобы у модуля драйвера Spark были достаточные разрешения.

Затем я пытаюсь запустить пример задания SparkPi с помощью следующей командной строки:

bin/spark-submit \
  --master k8s://https://<k8-cluster-ip>:<k8-cluster-port> \
  --deploy-mode cluster \
  --name spark-pi \
  --class org.apache.spark.examples.SparkPi \
  --conf spark.executor.instances=2 \
  --conf spark.kubernetes.container.image=kmaster:5000/spark:latest \
  --conf spark.kubernetes.container.image.pullPolicy=IfNotPresent \
  --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
  local:///opt/spark/examples/jars/spark-examples_2.11-2.4.5.jar 100

И происходит сбой в течение нескольких секунд после создания driver-pod , он переходит в состояние Running и примерно через 3 секунды переходит в Error штат.

При подаче команды kubectl logs spark-pi-driver этот - это журнал, который я получаю.

Второй Caused by: всегда либо как указано выше, то есть:

  • Caused by: java.net.SocketException: Broken pipe (Write failed) или
  • Caused by: okhttp3.internal.http2.ConnectionShutdownException

Журнал № 2 для справки.

После запуска в мертвый В конце я попытался дать --deploy-mode client, чтобы увидеть, имеет ли это значение, и получить больше подробных журналов. Вы можете прочитать разницу между клиентом и режимом кластера из здесь .

При развертывании задания как в режиме клиента оно все равно не работает, однако теперь я вижу, что каждый раз, когда модуль драйвера (теперь работает не как модуль, а как процесс на локальной машине) пытается создать модуль-исполнитель, он переходит в oop бесконечно, пытаясь создать модуль-исполнитель с счетным числом, добавленным к имени модуля, поскольку последний переходит в завершенное состояние. Кроме того, теперь я вижу интерфейс Spark на порте 4040, но работа не продвигается вперед, поскольку он застрял при попытке создать хотя бы один модуль для исполнителя.

Я получаю этот журнал.

Для меня это делает довольно очевидным, что это может быть нехватка ресурсов?

Так что, чтобы быть уверенным, я удалите вложенные виртуальные машины и установите 2 новые виртуальные машины на моем главном компьютере и подключите их с помощью сети NAT и настройте тот же кластер K8s.

Но теперь, когда я пытаюсь сделать то же самое, происходит сбой с той же ошибкой (Broken Pipe / ShutdownException), за исключением того, что теперь он говорит мне, что он терпит неудачу даже при создании драйвера .

Этот является журналом для справки.

Теперь я даже не могу получить журналы о том, почему он выходит из строя, потому что он даже не создан.

Я сломал голову над этим и не могу понять, почему он терпит неудачу. Теперь я попробовал много вещей, чтобы исключить их, но пока ничего не получалось, кроме одного (что является совершенно другим решением).

Я попробовал оператор spark-on-k8 из GCP из здесь , и он работал для меня. Я не смог увидеть интерфейс Spark, поскольку он работает недолго, но он печатает значение Pi в окне оболочки, поэтому я знаю, что он работает. Я предполагаю, что даже этот искровой оператор k8s «изнутри» делает то же самое, но мне действительно нужно иметь возможность развернуть его изначально или хотя бы знать, почему он не работает.

Любая помощь здесь будут оценены (я знаю, что это длинный пост). Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 мая 2020

Убедитесь, что развернутая версия kubernetes совместима с используемой версией Spark.

Apache Spark использует клиентскую библиотеку Kubernetes для связи с кластером kubernetes.

На сегодняшний день последняя версия LTS Spark - 2.4.5, которая включает в себя версию клиента kubernetes 4.6.3.

Проверка матрицы совместимости клиента Kubernetes: здесь

Поддерживаемые версии kubernetes go вплоть до v1.17.0.

Исходя из моего личного опыта Apache Spark 2.4.5 хорошо работает с версией kubernetes v1. 15,3 . У меня были проблемы с более свежими версиями.

Когда используется неподдерживаемая версия kubernetes, журналы, которые нужно получить, - те, которые вы описываете:

Caused by: java.net.SocketException: Broken pipe (Write failed) or,
Caused by: okhttp3.internal.http2.ConnectionShutdownException
0 голосов
/ 09 мая 2020

Столкнулся с точно такой же проблемой с v1.18.0, понижение версии до v1.15.3 заставило его работать

запуск мини-куба --cpus = 4 --memory = 4048 --kubernetes-version v1.15.3

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