Как получить искровое задание на использование всех доступных ресурсов в кластере Google Cloud DataProc? - PullRequest
4 голосов
/ 20 марта 2019

Например, в настоящее время у меня есть кластер DataProc, состоящий из мастера и 4 рабочих, каждая машина имеет 8 виртуальных ЦП и 30 ГБ памяти.

Всякий раз, когда я отправляю задание в кластер, кластер фиксирует максимум 11 ГБ и задействует только 2 рабочих узла для выполнения работы, и на этих узлах используется только 2 ресурса vCPU. Это делает работу, которая должна занимать всего несколько минут или почти час.

Я попытался отредактировать файл spark-defaults.conf на главном узле и попытался запустить мою команду spark-submit с аргументами --executor-cores 4 --executor-memory 20g --num-executors 4, но ни один из них не дал никакого эффекта.

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

Ответы [ 2 ]

5 голосов
/ 20 марта 2019

Мне удалось решить мою проблему, изменив планировщик на FIFO вместо FAIR, используя приведенное ниже в конце моей команды create:

--properties spark:spark.scheduler.mode=FIFO

4 голосов
/ 20 марта 2019

Возможно, вы захотите узнать, связано ли то, что вы просматриваете, с Dataproc устанавливает число vcores на контейнер исполнителя - число используемых vcores, сообщаемое YARN, известно как неправильное, ноэто только косметический дефект.В кластере Dataproc с 8-ядерными машинами конфигурация по умолчанию уже устанавливает 4 ядра на исполнителя;если вы щелкнете по YARN для мастера приложений Spark, вы увидите, что Spark действительно может упаковать 4 одновременных задачи для каждого исполнителя.

Эта часть объясняет то, что может выглядеть как "только использование 2 vCPU" на узел.

Тот факт, что в задании задействованы только два рабочих узла, указывает на то, что это еще не все;количество параллелизма, которое вы получаете, связано с тем, насколько хорошо данные разделены .Если у вас есть входные файлы, такие как gzip-файлы, которые не могут быть разделены, то, к сожалению, нет простого способа увеличить входной параллелизм.Однако, по крайней мере, на более поздних стадиях конвейера или если у вас есть разделяемые файлы, вы можете увеличить параллелизм, указав количество разделов Spark во время чтения или вызвав repartition в своем коде.В зависимости от размера ввода вы также можете поэкспериментировать с уменьшением fs.gs.block.size;по умолчанию 134217728 (128 МБ), но вы можете установить половину этого или четверть того или чего-либо, установив его во время создания кластера:

--properties core:fs.gs.block.size=67108864

или во время отправки задания:

--properties spark.hadoop.fs.gs.block.size=67108864
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...