Я выполняю длительные рабочие задания (+ 3 часа) на большом искровом кластере в режиме пряжи. Работники виртуальной машины, работающие на искры, размещаются в облаке Google Dataproc, и большинство из них могут быть уничтожены во время выполнения (превентивные виртуальные машины, которые стоят меньше).Конфигурация отказоустойчивости pySpark
Когда это происходит, работа терпит неудачу, потому что задачи не удается по разрушенному работника с этой ошибкой в контейнере журналов неисправного работника:
Executor is not registered
Я попытался установить spark.task.maxFailures
до 1000, но это Безразлично» t кажется очень эффективным: даже если работа заканчивается, задачи не кажутся автоматически перераспределенными, и вычисление задач, назначенных этому конкретному работнику, похоже, возвращается на начальную стадию.
Был ли способ иметь более отказоустойчивую конфигурацию, которая просто исключает невосприимчивых исполнителей и повторно назначает их задачи?
Я мог бы включить журналы ressourcemanager, nodemanager и контейнерные журналы, если не задал вопрос, но я не думаю, что это было бы актуально.
Мой оригинальный вопрос был более «общим» искровым вопросом, поэтому я не включил тег dataproc. Я должен был быть более конкретным, но я хотел бы знать, будет ли определенный способ проверить конечные задачи текущего этапа в HDFS с определенной репликацией, поэтому, когда узел будет потерян при длительном вычислении с большим количеством задач, сравниваемых к числу работников, поэтому нам не нужно повторно вычислять все выполненные задачи. Я попробую ваше обходное решение, но это может привести к тому, что только неиспользуемые узлы будут вычислять все в конце долгой работы, верно? –
@Paul Да, вы могли бы получить только неперехваченные возможности для выполнения всей работы.С превентивными узлами нет гарантий, что вы получите запрашиваемое количество узлов, в зависимости от доступности. Кроме того, они имеют максимальный срок службы 24 часа. Когда утерянные узлы теряются, Dataproc попытается их воссоздать. Кроме того, по этим причинам preemptibles используются только в качестве вычислительных узлов и сами не хранят данные. – tix
Чтобы уточнить, что, поскольку выбитые узлы автоматически воссоздаются, они делают это как свежие узлы и успешно присоединяются к кластеру, даже если они ранее покинули кластер явно при выключении. То же самое относится к ручному масштабированию основной рабочей группы вниз и резервное копирование; рабочие не отравлены от ранее списанного. Таким образом, добавление обходного пути не приводит к тому, что он скорее застрянет только на неперехваченных узлах в конце задания, если только вы просто не получили новые превентивные узлы из-за ограничений пропускной способности. –