Какое количество разделов в искре зависит от количества исполнителей и потоков?

Я использую Spark на EMR. Я запускаю кластер и иногда кластер небольшой (при написании / тестировании кода), скажем, 5-10 экземпляров. В других случаях выполнение того же кода с использованием большего количества экземпляров, скажем, 30-50.

Я знаю, что могу получить доступ к конфигурациям, чтобы помочь в установке количества разделов, и выбор хорошего количества разделов помогает среде выполнения.

Я хотел бы параметризовать количество разделов в зависимости от количества исполнителей и количества потоков:

val instanceCount = sc.getConf.get("spark.executor.instances").toDouble
val coreCount = sc.getConf.get("spark.executor.cores").toDouble

Кто-нибудь изучал это и может дать какие-либо советы о хорошем способе параметризации количества разделов?

Я понимаю, что не будет одного хорошего ответа, но какая-то функциональная форма с константами поможет. Например:

val partitionCount = instanceCount*coreCount*0.7 

похоже, хорошо работает в моих случаях использования и опишите ваши варианты использования (количество / диапазон исполнителей), которые были бы полезны.

Если бы вы могли указать в ответе, над какими примерами вы работаете, это тоже будет полезно. Если где-то есть каноническое расследование этого вопроса, было бы полезно указать на это.

количество разделов должно быть кратным (скажем, 2-4) instanceCount*coreCount. Если у вас меньше разделов, чем общее количество ядер, некоторые ядра будут простаивать. Если у вас много ядер (скажем, более 100), вам также следует увеличить spark.sql.shuffle.partitions (по умолчанию 200).

Raphael Roth 19.09.2018 21:23

@RaphaelRoth, когда вы говорите «Если у вас много ядер (скажем, более 100)», вы имеете в виду общее количество ядер во всех исполнителях или количество ядер в каждом исполнителе? Я понимаю, что могу изменить файл конфигурации, но для моих экспериментов я бы предпочел динамически распределять конфигурацию с настройкой кластера.

Lucas Roberts 19.09.2018 21:27

важно общее количество ядер. Процитируем blog.cloudera.com/blog/2015/03/…: «Основная проблема заключается в том, что количество задач будет слишком маленьким. Если задач меньше, чем доступных слотов для их выполнения, этап не будет использовать весь доступный процессор».

Raphael Roth 19.09.2018 21:30

@ Рафаэль Рот, хотя я согласен, что вы не хотите, чтобы количество ядер было слишком маленьким, по моему опыту, если вы сделаете его слишком большим, машины будут использовать слишком много ресурсов и не излучают сердцебиение и в конечном итоге считаются мертвыми. монитор сердцебиения. По крайней мере, это моя гипотеза о том, почему мои узлы помечены как мертвые, но все еще здоровы. Это мотивирует меня беспокоиться о создании слишком большого количества разделов.

Lucas Roberts 19.09.2018 22:51

@LucasRoberts, мой ответ немного отличается от того, как вы задали вопрос, но, по сути, я думаю, что он говорит о том, что количество разделов не является функцией количества экземпляров и ядер на экземпляр, и наоборот. В игру вступает множество вещей, и хотя эти параметры имеют некоторые взаимные зависимости, вы не можете просто выразить одно через другое во всех случаях. Надеюсь, что длинный ответ, который я оставил, вам поможет, дайте мне знать, могу ли я его улучшить

Dici 19.09.2018 23:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
5
3 265
0

Другие вопросы по теме