2016-06-09 4 views
0

Я запускаю приложение Spark с 5 исполнителями с 5 ядрами на каждого исполнителя. Однако я заметил, что большая часть работы выполняет только один исполнитель (т. Е. Большинство задач выполняются там). Работы, которые я запускаю, очень параллельны (20 разделов или больше). Как вы объясните это поведение?Spark: Оптимальное использование исполнителей

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

+0

Это зависит от преобразований и набора данных, над которыми вы работаете. Пример, если ваши данные (1,2), (2,2), (1,3), (1,9) (1,10) и вы делаете сокращениеByKey, все ваши данные с ключом «1» будут в одном исполнитель. – Knight71

+0

Простые преобразования и действия, такие как df.map (lambda x: x) .count(), похоже, работают на одном и том же исполнителе. Таким образом, никакой ключ не задействован. –

+0

может помочь небольшой фрагмент кода и примеры данных. – Knight71

ответ

0

Просто добавьте два цента для людей, сталкивающихся с этой проблемой в будущем. Такая проблема обычно возникает из-за искаженного размера раздела RDD/Dataframe. Чтобы отладить проблему, вы можете проверить размеры разделов RDD, чтобы узнать, есть ли там какой-либо выброс. И если он есть, вы можете увидеть элементы в этом большом разделе, чтобы понять, что происходит.

Аналогичная проблема подробно рассматривается в this stackoverflow question.

Смежные вопросы