Несколько Spark Applications одновременно, один и тот же Jarfile ... Задания находятся в состоянии ожидания - PullRequest
2 голосов
/ 28 апреля 2020

Spark / Scala noob здесь.

Я запускаю искру в кластерной среде. У меня есть два очень похожих приложения (каждое с уникальным конфигом и контекстом). Когда я пытаюсь выкинуть их обоих, первый, кажется, захватывает все ресурсы, а второй будет ждать, чтобы захватить ресурсы. Я устанавливаю ресурс для отправки, но это не имеет значения. Каждый узел имеет 24 ядра и 45 ГБ памяти, доступной для использования. Вот две команды, которые я использую для отправки, которые я хочу выполнять параллельно.

./bin/spark-submit --master spark://MASTER:6066 --class MainAggregator --conf spark.driver.memory=10g --conf spark.executor.memory=10g --executor-cores 3 --num-executors 5 sparkapp_2.11-0.1.jar -new

./bin/spark-submit --master spark://MASTER:6066 --class BackAggregator --conf spark.driver.memory=5g --conf spark.executor.memory=5g --executor-cores 3 --num-executors 5 sparkapp_2.11-0.1.jar 01/22/2020 01/23/2020

Также я должен отметить, что второе приложение запускается, но на главной странице мониторинга я вижу его как «Ожидание» "и у него будет 0 ядер, пока не будет сделано первое. Приложения действительно извлекают данные из одних и тех же таблиц, но у них будет много разных блоков данных, которые они извлекают, поэтому RDD / Dataframes являются уникальными, если это имеет значение.

Чего мне не хватает, чтобы запустить их на в то же время?

1 Ответ

2 голосов
/ 28 апреля 2020

второе приложение запускается, но на главной странице мониторинга я вижу его как «Ожидание», и оно будет иметь 0 ядер, пока не будет выполнено первое.


Я столкнулся то же самое некоторое время назад. Здесь есть две вещи ..

Возможно, это и есть причины.

1) У вас нет соответствующей инфраструктуры.

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

Если это # ​​1, то вам нужно увеличить количество узлов, выделять больше ресурсов, используя ваш spark-submit.

Если это # ​​2, тогда вы можете принять oop справедливое расписание, где вы может поддерживать 2 пула см. документацию spark по этому преимущество: вы можете запускать задания parllel. Fair позаботится об этом, предварительно освободив некоторые ресурсы и выделив другое задание, которое выполняется parllely.

  • mainpool для первой искровой работы ..
  • backlogpool для запуска вашей второй искровой работы.

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

<pool name="default">
    <schedulingMode>FAIR</schedulingMode>
    <weight>3</weight>
    <minShare>3</minShare>
</pool>
<pool name="mainpool">
    <schedulingMode>FAIR</schedulingMode>
    <weight>3</weight>
    <minShare>3</minShare>
</pool>
<pool name="backlogpool">
    <schedulingMode>FAIR</schedulingMode>
    <weight>3</weight>
    <minShare>3</minShare>
</pool>

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

Как это работает:

enter image description here

Подробнее см. В статьях me ..

имел oop -ярн-справедливый-schedular-преимущества-объяснил-part1

имел oop -ярн-справедливый-schedular -advantages-объяснено-часть2

Попробуйте эти идеи, чтобы преодолеть ожидание. Надеюсь, это поможет ..

...