Spark имеет множество настраиваемых параметров.Здесь я хотел бы знать, какова оптимальная конфигурация при определенных ограничениях.
Я видел многие из этих постов и не думаю, что подход пренебрежения структурой данных может дать удовлетворительное решение.
Конфигурация кластера
Мы установим уже установленный --executor-cores 5
из-за проведенного предыдущего исследования.Давайте установим другое ограничение, так что --executor-memory 60 Gb
будет пороговым максимумом.Это может быть выражено как --executor-memory
= min (60 Гб, EM
).
Мы фиксируем количество узлов в нашем кластере на N_0
, что неявно регулирует --num-executors
(равно N_0 * average num-cores on node / 5
).
Конфигурация данных
Мы представлены с данными в виде FN_0
-много текстовых файлов одинакового размера FS
(прибл. 1Gb) загружен в RDD
.Этот RDD
изначально имеет номер партитуры PN
, равный FN_0
.Загрузка всех файлов в RDD приводит к записи RN = RDD.count()
.
Вопрос
Я хотел бы найти качественное выражение или оптимальное решение для --executor-memory
,--num-executors
и номер раздела PN
для Входных данных -> Карта -> Фильтр -> Задание действия в терминах N_0,FN_0,FS,RN
.Какова их взаимозависимость?
Я предполагаю, что номер раздела был бы идеальным при RN
(приблизительно 100 000), так что у каждой записи есть своя задача, но это перемешивание будет масштабироваться астрономически.Я также был бы признателен за любые мысли относительно отношений между продуктом FN_0 * FS
и --executor-memory
.