[HADOOP] java.lang.OutOfMemoryError : 큰 데이터 세트에 대해 새 원시 스레드를 만들 수 없습니다.
HADOOPjava.lang.OutOfMemoryError : 큰 데이터 세트에 대해 새 원시 스레드를 만들 수 없습니다.
나는 작은 데이터 집합에 대해 잘 실행되는 하이브 쿼리를 실행하고있다. 하지만 로그에 오류가 발생하는 2 억 5 천만 개의 레코드를 실행 중입니다.
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)
이것에 대한 도움이 필요합니다.
해결법
-
==============================
1.필자는 일반적으로 MapReduce를 경험했습니다. 내 경험에 따르면 실제로 메모리 부족 오류가 아닙니다. 시스템에서 파일 설명자가 부족하여 스레드를 시작할 수 없으므로 "새 원시 스레드를 만들 수 없습니다"라는 메시지가 표시됩니다.
필자는 일반적으로 MapReduce를 경험했습니다. 내 경험에 따르면 실제로 메모리 부족 오류가 아닙니다. 시스템에서 파일 설명자가 부족하여 스레드를 시작할 수 없으므로 "새 원시 스레드를 만들 수 없습니다"라는 메시지가 표시됩니다.
우리 (Linux)의 수정 사항은 1024로 설정된 ulimit를 2048을 통해 ulimit -n 2048으로 늘리는 것이 었습니다. ulimit -n 2048을 사용하려면이 작업을 수행 할 수있는 권한이 있어야합니다 (sudo 또는 root 액세스 또는 하드 제한이 있음). 2048 이상이므로 시스템에서 자신의 사용자로 설정할 수 있습니다. .profile 또는 .bashrc 설정 파일에서이 작업을 수행 할 수 있습니다.
ulimit -a를 사용하여 현재 설정을 확인할 수 있습니다. 자세한 내용은이 참조 자료를 참조하십시오. https://stackoverflow.com/a/34645/871012
나는 또한 많은 사람들이 /etc/security/limits.conf 파일을 변경하는 것에 관해 이야기했지만, 아직 그렇게 할 필요가 없었다. 여기에 대한 링크가 있습니다 : https://stackoverflow.com/a/8285278/871012
-
==============================
2.노드의 OutOfMemmory로 인해 작업이 실패한 경우 최대 맵 수와 감속기 수를 트위 킹 할 수 있고 각각에 대한 JVM 옵트 아웃을 수행 할 수 있습니다. mapred.child.java.opts (기본값은 200Xmx)는 일반적으로 데이터 노드의 특정 하드웨어에 따라 증가되어야합니다.
노드의 OutOfMemmory로 인해 작업이 실패한 경우 최대 맵 수와 감속기 수를 트위 킹 할 수 있고 각각에 대한 JVM 옵트 아웃을 수행 할 수 있습니다. mapred.child.java.opts (기본값은 200Xmx)는 일반적으로 데이터 노드의 특정 하드웨어에 따라 증가되어야합니다.
-
==============================
3.고마워요 .. 당신 말이 맞아요. 그것은 내 프로그램이 목표 테이블에 파일을 많이 생성했기 때문에 파일 설명 자 때문입니다. 파티션 구조의 다단계로 인해.
고마워요 .. 당신 말이 맞아요. 그것은 내 프로그램이 목표 테이블에 파일을 많이 생성했기 때문에 파일 설명 자 때문입니다. 파티션 구조의 다단계로 인해.
나는 ulimit과 xceivers 속성을 증가 시켰습니다. 도움이되었습니다. 그러나 우리의 상황에서 여전히 그러한 한계는 또한 넘어 섰다.
그런 다음 파티션별로 데이터를 배포하기로 결정한 다음 파티션 당 하나의 파일 만 가져옵니다.
그것은 우리를 위해 일했습니다. 우리는 시스템을 50 억 개의 레코드로 확장했으며 우리를 위해 일했습니다.
from https://stackoverflow.com/questions/15494749/java-lang-outofmemoryerror-unable-to-create-new-native-thread-for-big-data-set by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 스파크 예외 : 행을 쓰는 동안 작업을 수행하지 못했습니다. (0) | 2019.07.22 |
---|---|
[HADOOP] 원사 - 클러스터 모드에서 Spark 드라이버 (및 YARN 컨테이너)에 대한 장애 조치 프로세스가 어떻게 작동하는지에 대한 리소스 / 문서 (0) | 2019.07.22 |
[HADOOP] 감속기에서 매퍼 카운터 값에 액세스하는 방법? (0) | 2019.07.22 |
[HADOOP] jobtracker.info 파일은 1 대신에 0 노드로만 복제 될 수있었습니다. (0) | 2019.07.22 |
[HADOOP] Phoenix는 음의 정수 값을 올바르게 표시하지 않습니다. (0) | 2019.07.22 |