Я запускаю кластер EMR (версия emr-4.2.0) для Spark, используя флаг Amazon maximizeResourceAllocation
, как задокументировано here. Согласно этим документам, «эта опция вычисляет максимальные ресурсы вычислений и памяти, доступные для исполнителя на узле в группе основных узлов, и устанавливает соответствующие параметры искрового значения по умолчанию с помощью этой информации».Spark + EMR с использованием настройки «maximizeResourceAllocation» от Amazon не использует все ядра/vcores
Я запускаю кластер, используя экземпляры m3.2xlarge для рабочих узлов. Я использую один m3.xlarge для мастера YARN - самый маленький экземпляр m3, который я могу заставить запустить, поскольку он не делает многого.
Ситуация такова: когда я запускаю задание Spark, количество запрошенных ядер для каждого исполнителя составляет 8. (Я получил это после настройки "yarn.scheduler.capacity.resource-calculator": "org.apache.hadoop.yarn.util.resource.DominantResourceCalculator"
, который фактически не находится в документации, но я отвлекаюсь). Это, по-видимому, имеет смысл, потому что согласно these docs m3.2xlarge имеет 8 "vCPUs". Однако в самих фактических экземплярах в /etc/hadoop/conf/yarn-site.xml
каждый узел настроен так, что yarn.nodemanager.resource.cpu-vcores
установлен на 16
. Я бы предположил, что это должно быть связано с гиперпотоком или, возможно, с какой-то другой аппаратной привязанностью.
Таким образом, проблема заключается в следующем: когда я использую maximizeResourceAllocation
, я получаю количество «vCPU», которое имеет тип экземпляра Amazon, который, по-видимому, составляет лишь половину от числа настроенных «VCores», которые YARN работает на узел; в результате исполнитель использует только половину фактических вычислительных ресурсов экземпляра.
Это ошибка в Amazon EMR? Другие люди испытывают одну и ту же проблему? Есть ли какая-то другая магическая недокументированная конфигурация, которую мне не хватает?
Это действительно так; но проблема в том, что «8» ядра на самом деле всего 8 из 16 «VCores», выделенных YARN; половина фактических ресурсов ЦП на машине остается бездействующей. Поскольку я пытаюсь запустить интенсивные рабочие места, это пустая трата процессора (и денег, очевидно!) – retnuH
Ядра являются просто абстракцией самого экземпляра. Нет фактической привязки к ядрам, и поэтому исполнители будут использовать как бы много запросов на процессор. Единственное связывание происходит при использовании DominantResourceCalculator для планировщика. Один элемент, который следует отметить, - это вариант конфигурации по умолчанию для EMC по умолчанию, равный значению vcore, указанному пряжи, чтобы улучшить использование процессора с помощью MapReduce. Функция maximizeResourceAllocation рассматривала определение ядра типа экземпляра. – ChristopherB