2016-10-19 3 views
3

Например, если количество исполнителей равно 40, но количество заданий равно 80, это означает, что каждый исполнитель будет запускать две задачи параллельно. Также мои функции (выполнение которых выполняются) не являются обычными функциями, но я вызываю программы внутри них. Таким образом, каждая задача на самом деле занимает несколько минут. Итак, мой вопрос в том, как справляется Spark? Будут ли эти задачи разделять JVM исполнителя? Как насчет количества ядер, разделите ли это между этими двумя задачами? Что делать, если вы не хотите, чтобы эти две задачи выполнялись одновременно, но выполняйте их циклически, т. Е. Запускайте первую задачу со всеми ядрами исполнителя, и только когда ее закончить, запустите вторую задачу?Как исполнитель Spark выполняет несколько задач?

ответ

2

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

Это также зависит от того, как вы кодируете для достижения максимального параллелизма. если есть две задачи, и они независимы друг от друга, они будут работать параллельно. если одна задача зависит от результата предыдущей задачи, они будут выполняться последовательно.

Да, количество ядер можно разделить на две задачи, сделав два исполнителя и выделив доступные ему ядра.

Для выполнения задач в циклическом режиме вам необходимо определить схему разбиения и выделить ресурсы в соответствии с ним. это гарантирует, что каждая задача будет выполнена после другой задачи.

+0

Не могли бы вы немного подробнее рассказать о схеме разбиения на выполнение задач в циклическом режиме? – pythonic

+0

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

+0

На самом деле это зависит от того, сколько указателей вы указали. Spark будет запускать столько параллельных задач, сколько количество ядер, которые вы указали. Итак, если у вас есть 4 исполнителя и 4 ядра-исполнителя, в общей сложности 4 x 4 = 16 задач будут выполняться параллельно. Таким образом, один из способов решения проблемы - ограничить количество ядер-исполнителей. В этом случае все будет сделано более крутым способом. – pythonic

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