может ли количество задач Spark быть больше ядра исполнителя? - PullRequest
0 голосов
/ 16 июня 2020

Что происходит, когда количество искровых задач превышает количество ядра исполнителя? Как этот сценарий обрабатывается Spark

Ответы [ 3 ]

2 голосов
/ 16 июня 2020

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

  • Вы вызываете coalesce или repartition с количеством разделов <количество ядер </li>
  • вы используете номер по умолчанию spark.sql.shuffle.partitions (= 200) и у вас доступно более 200 ядер. Это будет проблемой для объединений, сортировки и агрегирования. В этом случае вы можете увеличить spark.sql.shuffle.partitions

Обратите внимание, что даже если у вас достаточно задач, некоторые (или большинство) из них могут быть пустыми. Это может произойти, если у вас большой перекос данных или вы делаете что-то вроде groupBy() или Window без partitionBy. В этом случае пустые разделы будут немедленно завершены, и большинство ваших ядер будут бездействовать

2 голосов
/ 17 июня 2020

Это связано с этим вопросом?

В любом случае, вы можете проверить это Cloudera How-to . В разделе «Настройка распределения ресурсов» объясняется, что приложение Spark может запрашивать исполнителей, включив свойство динамического c выделения. Также важно установить свойства кластера, такие как число исполнителей, ядра исполнителя, память исполнителя ... так, чтобы искровые запросы соответствовали тому, что доступно вашему менеджеру ресурсов.

2 голосов
/ 16 июня 2020

Думаю вопрос немного не в тему. Вряд ли вы спросите. Почему?

  • При большом количестве данных у вас будет много разделов, и вы можете их переразбивать.
  • Допустим, у вас 10 000 разделов, что соответствует 10 000 задач.
  • исполнитель (ядро) будет эффективно обслуживать раздел как задачу (сопоставление 1: 1) и по завершении перейдет к следующей задаче, пока все задачи не будут завершены на этапе, а затем начнется следующая (если она находится в плане / DAG).
  • Более вероятно, что в большинстве мест (для вашего приложения) у вас не будет кластера из 10 000 ядер-исполнителей, но есть сайты, на которых это есть, это правда.

  • Если у вас выделено больше ядер, чем необходимо, они остаются простаивающими и непригодными для использования другими. Но с выделением ресурсов Dynami c от исполнителей можно отказаться. Я работал с YARN и Spark Standalone, как это с K8, я не уверен.

  • Трансформации меняют то, что вам нужно с точки зрения ресурсов. Например, заказ от может привести к уменьшению количества разделов и, таким образом, может способствовать бездействию.

...