Неправильное выделение памяти для Yarn / Spark после автоматической настройки Dataproc Cluster

Я пытаюсь запустить задания Spark в кластере Dataproc, но Spark не запускается из-за неправильной настройки Yarn.

Я получаю следующую ошибку при запуске "spark-shell" из оболочки (локально на главном сервере), а также при загрузке задания через веб-интерфейс и утилиту командной строки gcloud с моего локального компьютера:

15/11/08 21:27:16 ERROR org.apache.spark.SparkContext: Error initializing     SparkContext.
java.lang.IllegalArgumentException: Required executor memory (38281+2679 MB) is above the max threshold (20480 MB) of this cluster! Please increase the value of 'yarn.s
cheduler.maximum-allocation-mb'.

Я попытался изменить значение в /etc/hadoop/conf/yarn-site.xml, но ничего не изменилось. Я не думаю, что он извлекает конфигурацию из этого файла.

Я пробовал использовать несколько комбинаций кластеров на нескольких сайтах (в основном в Европе), и у меня это работает только с версией с низким объемом памяти (4 ядра, 15 ГБ памяти).

Т.е. это проблема только на узлах, настроенных на объем памяти выше, чем позволяет пряжа по умолчанию.


person habitats    schedule 08.11.2015    source источник


Ответы (1)


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

Есть два текущих обходных пути:

  1. Используйте тип основной машины с объемом памяти, равным или меньшим, чем у рабочих машин.
  2. Явно установите spark.executor.memory и spark.executor.cores либо с помощью флага --conf, если работаете через SSH-соединение, например:

    spark-shell --conf spark.executor.memory=4g --conf spark.executor.cores=2
    

    или, если запущен gcloud beta dataproc, используйте --properties:

    gcloud beta dataproc jobs submit spark --properties spark.executor.memory=4g,spark.executor.cores=2
    

При необходимости вы можете настроить количество ядер / памяти для каждого исполнителя; допустимо ошибиться на стороне более мелких исполнителей и позволить YARN упаковать множество исполнителей на каждого рабочего, хотя вы можете сэкономить некоторые накладные расходы на каждого исполнителя, установив для spark.executor.memory полный размер, доступный в каждом контейнере YARN и spark.executor. .cores ко всем ядрам в каждом воркере.

РЕДАКТИРОВАТЬ: с 27 января новые кластеры Dataproc теперь будут правильно настроены для любой комбинации типов главных / рабочих машин, как указано в примечания к выпуску.

person Dennis Huo    schedule 08.11.2015
comment
Святая моли! Размер мастер-памяти меньше, чем рабочая, вероятно, единственная комбинация, которую я еще не пробовал. Большое спасибо! Оно работало завораживающе:) - person habitats; 09.11.2015
comment
Похоже, это изменение вызвало новую проблему. Я получаю следующую ошибку при запуске в этой новой конфигурации:. Кластер с низким объемом памяти не имеет проблем с идентичным заданием .jar-файла. - person habitats; 09.11.2015
comment
Должен ли я выложить это как новую проблему? - person habitats; 09.11.2015
comment
Да, наверное, лучше всего задать новый вопрос, чтобы больше людей посмотрели на него так. - person Dennis Huo; 09.11.2015
comment
Поскольку вы указали идентификатор задания на скриншоте, я пошел дальше и проверил ваши настройки; похоже, что это еще одно проявление той же проблемы в том, что если вы используете мастер n1-highcpu-16 с рабочими процессами n1-highmem-4, прямо сейчас есть ошибка, которая устанавливает spark.executor.cores = 8. Если вы настроили socksproxy и посетите ‹master›: 8088 и затем перейдите к неудачному приложению Spark, вы увидите сообщение об ошибке: - person Dennis Huo; 09.11.2015
comment
Неперехваченное исключение: org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException: недопустимый запрос ресурса, запрошенные виртуальные ядра ‹0 или запрошенные виртуальные ядра› сконфигурировано макс., RequiredVirtualCores = 8, maxVirtualCores = 4 - person Dennis Huo; 09.11.2015
comment
В будущем все эти настройки должны работать «из коробки»; тем временем, если вам по-прежнему нужно больше процессоров на мастере, чем на рабочих, и вы выбрали типы машин так, чтобы мастер highcpu имел меньше / равную память по сравнению с рабочими процессорами highmem, вы также должны предоставить параметр --conf spark.executor.cores=2, чтобы дать каждому исполнителю половину количество ядер, доступных для каждого воркера (или --properties spark.executor.cores=2, если используется gcloud beta dataproc jobs; в этом случае флаг должен стоять перед файлом jarfile в аргументах) - person Dennis Huo; 09.11.2015
comment
Это сработало! Еще раз большое спасибо за помощь. Вы сделали мой день:) - person habitats; 09.11.2015
comment
Приносим извинения за ответ на старый вопрос, но в новейшей версии Google Cloud Dataproc есть исправление этой проблемы, а также вызывает этот вопрос. Ваше здоровье! - person James; 02.02.2016