Если я хочу запустить приложение со 100 ядрами, как мне настроить number-of-executors
и executor-cores
для достижения максимальной производительности? 100 исполнителей с 1 ядром лучше или 20 исполнителей с 5 ядрами?
Из этой статьи я знаю, что если в одном исполнителе работает слишком много ядер, это может оказать давление на HDFS IO. Однако, если я использую только одно ядро для каждого исполнителя, где будет много исполнителей, и вызываю много сетевого ввода-вывода из-за операций перемешивания / широковещания.
Мне интересно, как заблокировать между number-of-executors
и executor-cores
. Мои вопросы:
Возможно ли, чтобы я установил постоянный номер ядра исполнителя? Например, я всегда беру 4 ядра с 8-ядерной машины. Если я не могу, какие еще условия мне следует принять во внимание?
Однако при запуске Spark на YARN приложения Spark не всегда могут получить запрошенное количество ресурсов. Учитывая предыдущий пример, если я выберу 100 исполнителей с 1 ядром, я могу не получить 100 исполнителей, поэтому, возможно, мое приложение будет в 5 раз медленнее. Однако, если я выберу 20 исполнителей с 5 ядрами, я могу получить ровно 20 исполнителей, так что мое приложение может работать быстрее. Как тогда выбрать правильные number-of-executors
и executor-cores
?