У меня появляются сообщения об ошибках, как показано ниже, когда я запускаю искровое задание.
Container [pid=140679,containerID=some_container_id] is running beyond physical memory limits. Current usage: 2.3 GB of 2 GB physical memory used; 12.1 GB of 4.2 GB virtual memory used. Killing container.
Dump of the process-tree for some_container_id :
|- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
|- 140679 140676 140679 140679 (bash) 0 0 118009856 333 /bin/bash -c //bin/java -server -XX:NewRatio=8 -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx200m -Xmx1638m -Dfile.encoding=UTF-8 -Djavax.security.auth.useSubjectCredsOnly=false -Djava.io.tmpdir=./tmp -Djava.io.tmpdir=/data9/nm-local-dir/usercache/appcache/some_application_id/some_container_id/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/data11/nm-log-dir/some_application_id/some_container_id -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Dhadoop.root.logfile=syslog org.apache.hadoop.mapred.YarnChild 10.126.99.227 41953 attempt_1587100044137_3784279_m_000000_0 59373627899906 1>/data11/nm-log-dir/some_application_id/some_container_id/stdout 2>/data11/nm-log-dir/some_application_id/some_container_id/stderr
|- 140824 140701 140679 140679 (1-script) 0 0 118013952 389 /bin/bash -ex ./some_code.sh params
|- 140861 140824 140679 140679 (java) 4082 485 10257293312 522833 /home1///search-env/package/jdk-1.7.0_80/bin/java -cp /data9/nm-local-dir/usercache//appcache/some_application_id/some_container_id/spark-2.0.2-bin-hadoop2.7//conf/:/data9/nm-local-dir/usercache//appcache/some_application_id/some_container_id/spark-2.0.2-bin-hadoop2.7/jars/*://search-cluster/name.180621/conf/hadoop/:/home1///search-env/package/hadoop-2.7.3.2.6.3.0-r5-centos7/etc/hadoop/://search-cluster/name.180621/env/hadoop-yarn/share/hadoop/common/lib/*://search-cluster/name.180621/env/hadoop-yarn/share/hadoop/common/*://search-cluster/name.180621/env/hadoop-yarn/share/hadoop/hdfs/://search-cluster/name.180621/env/hadoop-yarn/share/hadoop/hdfs/lib/*://search-cluster/name.180621/env/hadoop-yarn/share/hadoop/hdfs/*://search-cluster/name.180621/env/hadoop-yarn/share/hadoop/yarn/lib/*://search-cluster/name.180621/env/hadoop-yarn/share/hadoop/yarn/*:/home1///search-env/package/hadoop-2.7.3.2.6.3.0-r5-centos7/share/hadoop/mapreduce/lib/*:/home1///search-env/package/hadoop-2.7.3.2.6.3.0-r5-centos7/share/hadoop/mapreduce/*:/data9/nm-local-dir/usercache//appcache/some_application_id/some_container_id/:job.jar/job.jar:job.jar/classes/:job.jar/lib/*:/data9/nm-local-dir/usercache//appcache/some_application_id/some_container_id/*:null://search-cluster/name.180621/env/hadoop-yarn/contrib/capacity-scheduler/*.jar:/*.jar -Xmx8g -XX:+UseCompressedOops -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:MaxPermSize=256m org.apache.spark.deploy.SparkSubmit --master yarn --deploy-mode client --conf spark.eventLog.eventLog.enabled=true --conf spark.executor.extraJavaOptions=-XX:+UseCompressedOops -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC --conf spark.executor.memoryOverhead=3g --conf spark.yarn.am.cores=1 --conf spark.driver.extraJavaOptions=-XX:+UseCompressedOops -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps --conf spark.executor.cores=1 --conf spark.dynamicAllocation.enabled=false --conf spark.executor.instances=200 --conf spark.executor.memory=5g --conf spark.yarn.am.memory=8g --conf spark.eventLog.dir=hdfs://name/user//spark2/logs --conf spark.yarn.historyServer.address=http://discover-name.linecorp.com:11005//shs2/quicklinks/history_server.url --conf spark.driver.memory=8g --conf spark.yarn.maxAppAttempts=1 --conf spark.shuffle.service.enabled=false --class org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver --name 1-script.sh --jars /data9/nm-local-dir/usercache//appcache/some_application_id/some_container_id/spark-2.0.2-bin-hadoop2.7//jars/datanucleus-api-jdo-3.2.6.jar,/data9/nm-local-dir/usercache//appcache/some_application_id/some_container_id/spark-2.0.2-bin-hadoop2.7//jars/datanucleus-core-3.2.10.jar,/data9/nm-local-dir/usercache//appcache/some_application_id/some_container_id/spark-2.0.2-bin-hadoop2.7//jars/datanucleus-rdbms-3.2.9.jar,hive-third-functions-2.1.2-shaded.jar --files hive-site.xml#hive-site.xml --queue batch spark-internal -f file
|- 140701 140679 140679 140679 (java) 658 46 2492874752 66786 /home1///search-env/package/jdk-1.7.0_80/bin/java -server -XX:NewRatio=8 -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx200m -Xmx1638m -Dfile.encoding=UTF-8 -Djavax.security.auth.useSubjectCredsOnly=false -Djava.io.tmpdir=./tmp -Djava.io.tmpdir=/data9/nm-local-dir/usercache//appcache/some_application_id/some_container_id/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/data11/nm-log-dir/some_application_id/some_container_id -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Dhadoop.root.logfile=syslog org.apache.hadoop.mapred.YarnChild 10.126.99.227 41953 attempt_1587100044137_3784279_m_000000_0 59373627899906 Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143.
Я знаю, что это ошибка нехватки памяти. Но я не знаю, какой памяти мне следует предоставить больше и сколько памяти нужно предоставить. Может быть, я найду их, меняя настройки конфигурации одну за другой. Но поскольку ошибка является прерывистой, трудно определить, какая из них является причиной.
Вот конфигурация искровой памяти, которую я установил.
--conf spark.executor.memory=3g \
--conf spark.executor.memoryOverhead=5g \
--conf spark.yarn.driver.memoryOverhead=3g \
--conf spark.yarn.am.memory=16g \
--conf spark.driver.memory=16g \
Я думаю, что задание превысило один или несколько из них. Есть ли способ узнать, какой предел памяти превышен? Я даже хочу знать, превышает ли задание один из ограничений памяти драйвера или один из ограничений памяти исполнителя.
Еще один вопрос, я не могу найти, что означает «2 ГБ» в сообщении «Текущее использование : Использовано 2,3 ГБ из 2 ГБ физической памяти; ". Я не указал "2 ГБ" в своей конфигурации. Что это за значение?