запуск нескольких искровых приложений параллельно - PullRequest
4 голосов
/ 02 апреля 2020

Я использую кластер YARN + spark 2.4.5. Я запускаю задания, используя docker в качестве режима клиента пряжи. Я настроил мастер и docker клиент следующим образом:

пряжа-сайт. xml

<property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
  </property>
 <property>
    <name>yarn.scheduler.fair.preemption</name>
    <value>true</value>
  </property>


  <property>
    <name>yarn.scheduler.fair.assignmultiple</name>
    <value>true</value>
  </property>

fairscheduler. xml:

<allocations>
  <pool name="default">
    <schedulingMode>FAIR</schedulingMode>
    <maxRunningApps>2</maxRunningApps>
    <fairSharePreemptionThreshold>0.6</fairSharePreemptionThreshold>
    <fairSharePreemptionTimeout>1</fairSharePreemptionTimeout>
    <weight>2</weight>
    <minShare>2</minShare>
  </pool>

  <pool name="today">
    <schedulingMode>FAIR</schedulingMode>
    <maxRunningApps>2</maxRunningApps>
    <fairSharePreemptionThreshold>0.6</fairSharePreemptionThreshold>
    <fairSharePreemptionTimeout>1</fairSharePreemptionTimeout>
    <weight>2</weight>
    <minShare>2</minShare>
  </pool>

  <pool name="yesterday">
    <schedulingMode>FAIR</schedulingMode>
    <maxRunningApps>2</maxRunningApps>
    <weight>1</weight>
    <fairSharePreemptionThreshold>0.4</fairSharePreemptionThreshold>
    <fairSharePreemptionTimeout>1</fairSharePreemptionTimeout>
    <minShare>2</minShare>
  </pool>
</allocations>

Теперь я запускаю два приложения spark в двух разных контейнерах. первый, а затем второй через минуту или две:

spark-submit --deploy-mode client --name job1 --queue today --py-files gs://babadod/spark.zip gs://babadod/spark/main.py --job job1 --job-args date=2020-04-02

spark-submit --deploy-mode client --name job2 --queue yesterday --py-files gs:/babadod/spark.zip gs://babadod/spark/main.py --job job2 --job-args date=2020-04-01

Выходные данные запускаются для каждого из них:

20/04/02 13:52:08 INFO SparkUI: Bound SparkUI to 0.0.0.0, and started at http://namenode:4040
20/04/02 13:52:08 INFO FairSchedulableBuilder: Creating Fair Scheduler pools from /opt/spark/conf/fairscheduler.xml
20/04/02 13:52:09 INFO FairSchedulableBuilder: Created pool: default, schedulingMode: FAIR, minShare: 2, weight: 2
20/04/02 13:52:09 INFO FairSchedulableBuilder: Created pool: today, schedulingMode: FAIR, minShare: 2, weight: 2
20/04/02 13:52:09 INFO FairSchedulableBuilder: Created pool: yesterday, schedulingMode: FAIR, minShare: 2, weight: 1
20/04/02 13:52:09 INFO Utils: Using initial executors = 0, max of spark.dynamicAllocation.initialExecutors, spark.dynamicAllocation.minExecutors and spark.executor.instances
20/04/02 13:52:09 INFO RMProxy: Connecting to ResourceManager at namenode/10.128.15.208:8032
20/04/02 13:52:09 INFO Client: Requesting a new application from cluster with 2 NodeManagers

Первое приложение забирает все доступные ресурсы, а второе - начинается после первого финиша. Что мне не хватает? Спасибо


РЕДАКТИРОВАТЬ

spark-defaults.conf:

spark.master yarn;
spark.dynamicAllocation.enabled true;
spark.shuffle.service.enabled true;
spark.yarn.shuffle.stopOnFailure false;

1 Ответ

0 голосов
/ 06 апреля 2020

Я не могу найти источник, но, насколько я помню, спарк должен находиться в режиме динамического выделения ресурсов c, чтобы пряжа могла убивать исполнителей при необходимости.

попробуйте настроить его включение с настройками здесь: https://spark.apache.org/docs/latest/configuration.html#dynamic -распределение

(вам также потребуется настроить службу перемешивания: https://spark.apache.org/docs/latest/running-on-yarn.html#configuring -The-внешний перетасовка-сервис )

...