wordcount와 같은 mapreduce 프로그램 을 실행하는 동안 이상한 오류가 발생 합니다. 각각 4GB RAM이있는 20 개의 슬레이브가있는 하둡 클러스터가 있습니다. 300MB의 힙을 갖도록 맵 작업을 구성했고 작업 슬롯을 줄이기 위해 1GB를 얻었습니다. 노드 당 2 개의 맵 슬롯과 1 개의 축소 슬롯이 있습니다. 첫 번째지도 작업이 완료 될 때까지 모든 것이 잘 진행됩니다. 그러면 진행률이 100 %로 유지됩니다. 그러면 복사 단계 가 진행 되고 있다고 생각합니다 . 각지도 작업은 다음과 같은 것을 생성합니다.
Map output bytes 4,164,335,564
Map output materialized bytes 608,800,675
(압축을 위해 SnappyCodec을 사용하고 있습니다)
후 실속 작업은 다음을 제외하고 crach (가) 감소 시간 정도에 대해 :
Error: java.lang.OutOfMemoryError: Java heap space at
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.shuffleInMemory(ReduceTask.java:1703) at
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getMapOutput(ReduceTask.java:1563) at
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.copyOutput(ReduceTask.java:1401) at
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.run(ReduceTask.java:1333
나는 인터넷 검색 중이 링크를 찾았지만 실제로 무엇을 만들어야할지 모르겠습니다 : hadoop common link
테라 소트 벤치 마크를 수행 할 수 있다면 왜 hadoop이 복사 및 병합에 문제가 있는지 이해할 수 없습니다. 모든 맵 출력이 감속기 스레드의 RAM에 맞아야하는 것은 아닙니다. 그래서 여기서 무슨 일이 일어나고 있습니까?
위에 제공된 링크에서 다음 매개 변수를 조정하는 방법에 대해 설명합니다.
mapreduce.reduce.shuffle.input.buffer.percent = 0.7
mapreduce.reduce.shuffle.memory.limit.percent = 0.25
mapreduce.reduce.shuffle.parallelcopies = 5
그들은 매개 변수의 곱이> 1이라는 사실이 힙 크기 오류를 허용한다고 주장 합니다 . 편집 : 5 * 1.25 * 0.7은 여전히 <1이므로 두 번째 솔루션 게시물에 집중하십시오!)이 집중 시뮬레이션을 다시 시작하기 전에 나는 거의 문제가 발생하기 때문에 내가 직면 한 문제에 대한 누군가의 의견을 듣고 매우 기쁠 것입니다. 지금 주. 나는 또한이 복사 단계에서 무슨 일이 일어나고 있는지 완전히 이해하지 못하는 것 같습니다. 디스크에서 병합 정렬이 많은 힙 크기를 요구하지 않을 것으로 예상합니까?
유용한 의견과 답변에 미리 감사드립니다 !
단서는 축소 작업의 힙 크기가 축소 단계에서 거의 완전히 필요하다는 것입니다. 그러나 셔플 단계는 동일한 힙 공간을 놓고 경쟁하고 있으며 충돌이 발생하여 내 작업이 중단되었습니다. 나는 이것이 내가 shuffle.input.buffer.percent
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다