Spring DataFlow Yarn — контейнер работает за пределами физической памяти

Я запускаю Spring Cloud Tasks на Yarn, простые задачи работают нормально, но при выполнении более крупных задач, требующих больше ресурсов, я получаю сообщение об ошибке «Контейнер работает за пределами физической памяти»:

onContainerCompleted:ContainerStatus: [ContainerId: 
container_1485796744143_0030_01_000002, State: COMPLETE, Diagnostics: Container [pid=27456,containerID=container_1485796744143_0030_01_000002] is running beyond physical memory limits. Current usage: 652.5 MB of 256 MB physical memory used; 5.6 GB of 1.3 GB virtual memory used. Killing container.
Dump of the process-tree for container_1485796744143_0030_01_000002 :
        |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
        |- 27461 27456 27456 27456 (java) 1215 126 5858455552 166335 /usr/lib/jvm/java-1.8.0/bin/java -Dserver.port=0 -Dspring.jmx.enabled=false -Dspring.config.location=servers.yml -jar cities-job-0.0.1.jar --spring.datasource.driverClassName=org.h2.Driver --spring.datasource.username=sa --spring.cloud.task.name=city2 --spring.datasource.url=jdbc:h2:tcp://localhost:19092/mem:dataflow 
        |- 27456 27454 27456 27456 (bash) 0 0 115806208 705 /bin/bash -c /usr/lib/jvm/java-1.8.0/bin/java  -Dserver.port=0 -Dspring.jmx.enabled=false -Dspring.config.location=servers.yml -jar cities-job-0.0.1.jar --spring.datasource.driverClassName='org.h2.Driver' --spring.datasource.username='sa' --spring.cloud.task.name='city2' --spring.datasource.url='jdbc:h2:tcp://localhost:19092/mem:dataflow' 1>/var/log/hadoop-yarn/containers/application_1485796744143_0030/container_1485796744143_0030_01_000002/Container.stdout 2>/var/log/hadoop-yarn/containers/application_1485796744143_0030/container_1485796744143_0030_01_000002/Container.stderr 

Я попробовал параметры настройки в настройках DataFlow server.yml:

spring:
 deployer:
   yarn:
     app:
       baseDir: /dataflow
       taskappmaster:
         memory: 512m
         virtualCores: 1
         javaOpts: "-Xms512m -Xmx512m"
       taskcontainer:
         priority: 1
         memory: 512m
         virtualCores: 1
         javaOpts: "-Xms256m -Xmx512m"

Я обнаружил, что изменения памяти taskappmaster видны (для контейнера AM в YARN установлено это значение), но параметры памяти taskcontainer не меняются — каждый созданный контейнер для Cloud Task имеет только 256 МБ, что является параметром по умолчанию для YarnDeployer.

Для этого server.yml ожидаемым результатом является выделение 2 контейнеров с 512 как для Application Master, так и для Application Container. Но YARN выделяет 2 контейнера 512 под мастер приложения и 256 мб под приложение.

Я не думаю, что эта проблема связана с неправильными параметрами YARN, потому что приложения Spark работают правильно, захватывая ГБ памяти.

Некоторые из моих настроек YARN:

mapreduce.reduce.java.opts -Xmx2304m
mapreduce.reduce.memory.mb 2880
mapreduce.map.java.opts -Xmx3277m
mapreduce.map.memory.mb 4096
yarn.nodemanager.vmem-pmem-ratio 5
yarn.nodemanager.vmem-check-enabled false
yarn.scheduler.minimum-allocation-mb 32
yarn.nodemanager.resource.memory-mb 11520

Моя среда выполнения Hadoop — EMR 4.4.0, и мне пришлось изменить java по умолчанию на 1.8.


person Ragnar    schedule 31.01.2017    source источник
comment
Вы не забыли уничтожить загруженные приложения из hdfs в /dataflow, когда изменяли этот файл yml? Этот файл в hdfs не будет переопределен.   -  person Janne Valkealahti    schedule 31.01.2017
comment
Большое спасибо, удаление server.yml из hdfs решило мою проблему!   -  person Ragnar    schedule 01.02.2017
comment
Привет, @Ragnar: Поскольку это решено после очистки каталога и успешной загрузки сервера, не могли бы вы рассмотреть возможность добавления ответа в эту тему и отметить его решенным?   -  person Sabby Anandan    schedule 03.02.2017


Ответы (1)


Очистка каталога /dataflow в HDFS решает проблему, после удаления этого каталога Spring DataFlow загружает все необходимые файлы. Другой способ — удалить файл самостоятельно и загрузить новый.

person Ragnar    schedule 04.02.2017