На данный момент у меня запущен и работает кластер 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 «изнутри» делает то же самое, но мне действительно нужно иметь возможность развернуть его изначально или хотя бы знать, почему он не работает.
Любая помощь здесь будут оценены (я знаю, что это длинный пост). Спасибо.