2015-11-17 17 views
8

Ho un cluster di due nodi worker. Worker_Node_1 - 64 GB RAM Worker_Node_2 - 32 GB RAMSpark: il contenitore è in esecuzione oltre i limiti di memoria fisica

Sfondo estiva: Sto provando ad eseguire scintilla presentare il filo-cluster per eseguire Pregel su un grafico per calcolare le brevi distanze di percorso da un vertice di origine a tutti altri vertici e stampare i valori sulla console. experment:

  1. Per piccole grafico con 15 vertici esecuzione completa applicazione status finale: SUCCEEDED
  2. mio codice funziona perfettamente e stampe più breve distanza per 241 vertici grafico per singolo vertice come vertice sorgente ma c'è un problema.

Problema: Quando ho scavare nel registro depositare il compito si completa successo in 4 minuti e 26 Secondi, ma ancora sul terminale continua a mostrare lo stato di applicazione come Esecuzione e dopo circa 12 più minuti di esecuzione del task termina dicendo -

Application application_1447669815913_0002 failed 2 times due to AM Container for appattempt_1447669815913_0002_000002 exited with exitCode: -104 For more detailed output, check application tracking page:http://myserver.com:8088/proxy/application_1447669815913_0002/ 
Then, click on links to logs of each attempt. 
Diagnostics: Container [pid=47384,containerID=container_1447669815913_0002_02_000001] is running beyond physical memory limits. Current usage: 17.9 GB of 17.5 GB physical memory used; 18.7 GB of 36.8 GB virtual memory used. Killing container. 

Dump of the process-tree for container_1447669815913_0002_02_000001 : 
|- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE 
|- 47387 47384 47384 47384 (java) 100525 13746 20105633792 4682973 /usr/lib/jvm/java-7-oracle-cloudera/bin/java -server -Xmx16384m -Djava.io.tmpdir=/yarn/nm/usercache/cloudera/appcache/application_1447669815913_0002/container_1447669815913_0002_02_000001/tmp -Dspark.eventLog.enabled=true -Dspark.eventLog.dir=hdfs://myserver.com:8020/user/spark/applicationHistory -Dspark.executor.memory=14g -Dspark.shuffle.service.enabled=false -Dspark.yarn.executor.memoryOverhead=2048 -Dspark.yarn.historyServer.address=http://myserver.com:18088 -Dspark.driver.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native -Dspark.shuffle.service.port=7337 -Dspark.yarn.jar=local:/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/spark/lib/spark-assembly.jar -Dspark.serializer=org.apache.spark.serializer.KryoSerializer -Dspark.authenticate=false -Dspark.app.name=com.path.PathFinder -Dspark.master=yarn-cluster -Dspark.executor.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native -Dspark.yarn.am.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native -Dspark.yarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001 org.apache.spark.deploy.yarn.ApplicationMaster --class com.path.PathFinder --jar file:/home/cloudera/Documents/Longest_Path_Data_1/Jars/ShortestPath_Loop-1.0.jar --arg /home/cloudera/workspace/Spark-Integration/LongestWorstPath/configFile --executor-memory 14336m --executor-cores 32 --num-executors 2 
|- 47384 47382 47384 47384 (bash) 2 0 17379328 853 /bin/bash -c LD_LIBRARY_PATH=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native::/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native /usr/lib/jvm/java-7-oracle-cloudera/bin/java -server -Xmx16384m -Djava.io.tmpdir=/yarn/nm/usercache/cloudera/appcache/application_1447669815913_0002/container_1447669815913_0002_02_000001/tmp '-Dspark.eventLog.enabled=true' '-Dspark.eventLog.dir=hdfs://myserver.com:8020/user/spark/applicationHistory' '-Dspark.executor.memory=14g' '-Dspark.shuffle.service.enabled=false' '-Dspark.yarn.executor.memoryOverhead=2048' '-Dspark.yarn.historyServer.address=http://myserver.com:18088' '-Dspark.driver.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native' '-Dspark.shuffle.service.port=7337' '-Dspark.yarn.jar=local:/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/spark/lib/spark-assembly.jar' '-Dspark.serializer=org.apache.spark.serializer.KryoSerializer' '-Dspark.authenticate=false' '-Dspark.app.name=com.path.PathFinder' '-Dspark.master=yarn-cluster' '-Dspark.executor.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native' '-Dspark.yarn.am.extraLibraryPath=/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/lib/hadoop/lib/native' -Dspark.yarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001 org.apache.spark.deploy.yarn.ApplicationMaster --class 'com.path.PathFinder' --jar file:/home/cloudera/Documents/Longest_Path_Data_1/Jars/ShortestPath_Loop-1.0.jar --arg '/home/cloudera/workspace/Spark-Integration/LongestWorstPath/configFile' --executor-memory 14336m --executor-cores 32 --num-executors 2 1> /var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001/stdout 2> /var/log/hadoop-yarn/container/application_1447669815913_0002/container_1447669815913_0002_02_000001/stderr 
Container killed on request. Exit code is 143 
Container exited with a non-zero exit code 143 
Failing this attempt. Failing the application. 

cose che ho provato:

  1. yarn.schedular.maximum-assegnazione-mb - 32GB
  2. mapreduce.map.memory.mb = 2048 (precedenza era 1024)
  3. provato diversi --driver memoria fino a 24g

Potresti mettere più colori su come posso configurare il gestore delle risorse in modo che anche i grafici di grandi dimensioni (> 300K vertici) possano essere elaborati? Grazie.

+1

C'è una domanda simile precedente: http://stackoverflow.com/questions/21005643/container-is-running-beyond-memory-limits –

+0

@aditya hai trovato qualcosa? l'altro non mi ha aiutato –

+0

È necessario perfezionare l'applicazione con la capacità del cluster. Params --driver-memory --executor-memory --executor-core --num-executors svolgono un ruolo molto importante mentre fai lo spark-submit sul thread-cluster. – aditya

risposta

2

Più dati si stanno elaborando, maggiore è la memoria necessaria per ogni attività Spark. E se il tuo esecutore esegue troppe attività, può esaurire la memoria. Quando ho avuto problemi nell'elaborare grandi quantità di dati, di solito era il risultato di non bilanciare correttamente il numero di core per esecutore. Prova a ridurre il numero di core o aumentare la memoria dell'esecutore.

Un modo semplice per dire che si verificano problemi di memoria è controllare la scheda Executor nell'interfaccia utente di Spark. Se vedi un sacco di barre rosse che indicano un tempo elevato di raccolta dei dati inutili, probabilmente stai esaurendo la memoria dei tuoi esecutori.