2015-11-18 1 views
2

Я выполняю длительные рабочие задания (+ 3 часа) на большом искровом кластере в режиме пряжи. Работники виртуальной машины, работающие на искры, размещаются в облаке Google Dataproc, и большинство из них могут быть уничтожены во время выполнения (превентивные виртуальные машины, которые стоят меньше).Конфигурация отказоустойчивости pySpark

Когда это происходит, работа терпит неудачу, потому что задачи не удается по разрушенному работника с этой ошибкой в ​​контейнере журналов неисправного работника:

Executor is not registered 

Я попытался установить spark.task.maxFailures до 1000, но это Безразлично» t кажется очень эффективным: даже если работа заканчивается, задачи не кажутся автоматически перераспределенными, и вычисление задач, назначенных этому конкретному работнику, похоже, возвращается на начальную стадию.

Был ли способ иметь более отказоустойчивую конфигурацию, которая просто исключает невосприимчивых исполнителей и повторно назначает их задачи?

Я мог бы включить журналы ressourcemanager, nodemanager и контейнерные журналы, если не задал вопрос, но я не думаю, что это было бы актуально.

ответ

5

Это, как представляется, является регрессией в отношении того, как люди, покидающие кластер, покидают кластер.

Проблема заключается не только в неспособности потерпеть неудачу. Преступные работники создаются и уничтожаются непрерывно на протяжении всего жизненного цикла кластера. Каждый раз, когда работник уходит, YARN будет ждать 15 м за сердцебиение, прежде чем обнаруживать отказ и воссоздать контейнер. Это может сделать вашу работу намного дольше.

Мы исправим это в следующем выпуске.

Обход:

Следующая заставит работника покинуть кластер на остановке.

Создайте следующий скрипт и загрузить его на ГКС ведро:

#!/bin/sh 
sudo sed -i "s/.*Stopping google-dataproc-agent.*/start-stop-daemon --stop --signal USR2 --quiet --oknodo --pidfile \${AGENT_PID_FILE}; sleep 5s/" \ 
    /etc/init.d/google-dataproc-agent 

Допустим, вы загрузили его на GameSpot: //my-bucket/fix.sh

Теперь воссоздать кластер с этим инициализации действия:

gcloud beta dataproc clusters create my-cluster ... \ 
    --initialization-actions gs://my-bucket/fix.sh 

Вы можете проверить это с помощью SSH-ки в главном узле и настройки часы на список узлов пряжи:

gcloud compute ssh my-cluster-m 
watch yarn node -list 

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

+0

Мой оригинальный вопрос был более «общим» искровым вопросом, поэтому я не включил тег dataproc. Я должен был быть более конкретным, но я хотел бы знать, будет ли определенный способ проверить конечные задачи текущего этапа в HDFS с определенной репликацией, поэтому, когда узел будет потерян при длительном вычислении с большим количеством задач, сравниваемых к числу работников, поэтому нам не нужно повторно вычислять все выполненные задачи. Я попробую ваше обходное решение, но это может привести к тому, что только неиспользуемые узлы будут вычислять все в конце долгой работы, верно? –

+1

@Paul Да, вы могли бы получить только неперехваченные возможности для выполнения всей работы.С превентивными узлами нет гарантий, что вы получите запрашиваемое количество узлов, в зависимости от доступности. Кроме того, они имеют максимальный срок службы 24 часа. Когда утерянные узлы теряются, Dataproc попытается их воссоздать. Кроме того, по этим причинам preemptibles используются только в качестве вычислительных узлов и сами не хранят данные. – tix

+1

Чтобы уточнить, что, поскольку выбитые узлы автоматически воссоздаются, они делают это как свежие узлы и успешно присоединяются к кластеру, даже если они ранее покинули кластер явно при выключении. То же самое относится к ручному масштабированию основной рабочей группы вниз и резервное копирование; рабочие не отравлены от ранее списанного. Таким образом, добавление обходного пути не приводит к тому, что он скорее застрянет только на неперехваченных узлах в конце задания, если только вы просто не получили новые превентивные узлы из-за ограничений пропускной способности. –