Pregunta java.lang.OutOfMemoryError: no se puede crear un nuevo hilo nativo para el conjunto de datos grandes


Tengo la ejecución de la consulta de la colmena, que funciona bien para pequeños conjuntos de datos. pero me estoy ejecutando por 250 millones de registros que tengo debajo de los errores en los registros

 FATAL org.apache.hadoop.mapred.Child: Error running child : java.lang.OutOfMemoryError:   unable to create new native thread
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Thread.java:640)
    at org.apache.hadoop.mapred.Task$TaskReporter.startCommunicationThread(Task.java:725)
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:362)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1136)
    at org.apache.hadoop.mapred.Child.main(Child.java:249)



 2013-03-18 14:12:58,907 WARN org.apache.hadoop.mapred.Child: Error running child
 java.io.IOException: Cannot run program "ln": java.io.IOException: error=11, Resource temporarily unavailable
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
    at java.lang.Runtime.exec(Runtime.java:593)
    at java.lang.Runtime.exec(Runtime.java:431)
    at java.lang.Runtime.exec(Runtime.java:369)
    at org.apache.hadoop.fs.FileUtil.symLink(FileUtil.java:567)
    at org.apache.hadoop.mapred.TaskRunner.symlink(TaskRunner.java:787)
    at org.apache.hadoop.mapred.TaskRunner.setupWorkDir(TaskRunner.java:752)
    at org.apache.hadoop.mapred.Child.main(Child.java:225)
 Caused by: java.io.IOException: java.io.IOException: error=11, Resource temporarily unavailable
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
    at java.lang.ProcessImpl.start(ProcessImpl.java:65)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
    ... 7 more
2013-03-18 14:12:58,911 INFO org.apache.hadoop.mapred.Task: Runnning cleanup for the task
2013-03-18 14:12:58,911 INFO org.apache.hadoop.mapred.Child: Error cleaning up
  java.lang.NullPointerException
    at org.apache.hadoop.mapred.Task.taskCleanup(Task.java:1048)
    at org.apache.hadoop.mapred.Child.main(Child.java:281)

Necesito ayuda en esto.


5
2018-03-19 08:37


origen


Respuestas:


Lo he experimentado con MapReduce en general. En mi experiencia, no es realmente un error de falta de memoria: el sistema se está quedando sin descriptores de archivos para iniciar los hilos, por lo que dice "no se puede crear un nuevo hilo nativo".

La solución para nosotros (en Linux) era aumentar el ulimit, que se estableció en 1024, a 2048 a través de: ulimit -n 2048. Necesitará tener permisos para hacer esto, ya sea sudo o acceso raíz o tener un límite estricto de 2048 o superior para que pueda configurarlo como su propio usuario en el sistema. Puedes hacer esto en tu .profile o .bashrc archivo de configuración

Puede verificar su configuración actual con ulimit -a. Vea esta referencia para más detalles: https://stackoverflow.com/a/34645/871012

También he visto a muchos otros hablar sobre cambiar el /etc/security/limits.conf archivo, pero no he tenido que hacer eso todavía Aquí hay un enlace hablando de eso: https://stackoverflow.com/a/8285278/871012


7
2017-10-11 19:54



Si su trabajo está fallando debido a OutOfMemmory en los nodos, puede cambiar el número de mapas máximos y reductores y la JVM opta por cada uno. mapred.child.java.opts (el valor predeterminado es 200Xmx) por lo general debe aumentarse en función del hardware específico de los nodos de datos.


1
2018-03-21 08:20



Gracias a todos ... Estás en lo cierto. es por el descriptor de archivo, ya que mi programa generaba gran cantidad de archivos en la tabla de objetivos. Debido a multinivel de estructura de partición.

He aumentado la propiedad ulimit y también xceivers. ayudó pero aún en nuestra situación esos límites también fueron cruzados

Luego decidimos distribuir los datos según las particiones y luego recibimos solo un archivo por partición.

Funcionó para nosotros Escalamos nuestro sistema a más de 50 millones de registros y funcionó para nosotros


-1
2017-10-12 04:00