Предлагаю книгу Spark in Action. Короче говоря, исполнители - это контейнеры, которые запускают задачи, поставленные им драйвером. Один узел в кластере может запускать несколько исполнителей в зависимости от распределения ресурсов. Распределение CPU позволяет запускать задачи параллельно, поэтому лучше иметь больше ядер для исполнителей. Таким образом, больше ядер процессора означает больше слотов задач. Распределение памяти для исполнителей должно производиться разумным способом, который должен соответствовать памяти контейнера YARN. Ячейка контейнера YARN> = память исполнителя + служебная память.
Spark хранит части этой памяти для хранения данных в кэше и для временных данных перемешивания. Задайте кучу для них с параметрами spark.storage.memoryFraction
(по умолчанию 0,6) и spark.shuffle.memoryFraction
(по умолчанию 0,2). Поскольку эти части кучи могут расти до того, как Spark может измерить и ограничить их, необходимо установить два дополнительных параметра безопасности: spark.storage.safetyFraction
(по умолчанию 0,9) и spark.shuffle.safetyFraction
(по умолчанию 0,8). Параметры безопасности уменьшают долю памяти на указанную величину. Фактическая часть кучи, используемой для хранения по умолчанию, составляет 0,6 × 0,9 (доля безопасности умножается на долю памяти), что составляет 54%. Аналогично, часть кучи, используемой для данных тасования, составляет 0,2 × 0,8 (показатель безопасности, умноженный на долю памяти в случайном порядке), что составляет 16%. Затем у вас есть 30% кучи, зарезервированных для других объектов и ресурсов Java, необходимых для запуска задач. Вы должны, однако, рассчитывать только на 20%.
Водитель организует этапы и задачи среди исполнителей. Результаты от исполнителей возвращаются обратно в драйвер, так что память для драйвера также должна рассматриваться для обработки всех данных, которые могут быть собраны вместе со всеми исполнителями.
Какая разница, если бы я не установил свойство 'maximizeResourceAllocation = true' ?? –
Используется для расчета общего ресурса кластера и установки конфигураций по умолчанию на основе результата расчета. если эта опция не включена, некоторые параметры будут установлены на значение по умолчанию, например 'spark.default.parallelism = 100' – FaigB