2017-04-19 11 views
0

내 감속기에이 메모리 오류를 받고 있어요 :EMR - 맵리 듀스 메모리 오류

Container is running beyond physical memory limits. Current usage: 6.1 GB of 6 GB physical memory used; 10.8 GB of 30 GB virtual memory used.

그래서 그래, mapreduce.reduce.memory.mb 증가에 의해 해결 될 수있는 물리적 메모리 문제가있다하지만 난 왜 이해가 안 돼요 그것은 일어난다.

파이프에 데이터가 더 많이 입력 될수록이 메모리 문제가 발생할 확률이 높아집니다. 데이터가 이미 디스크에 기록되어 있어야하기 때문에 제 감속기 (약 90 %)의 대부분이 통과하고 메모리가 감속기가 통과 할 때 해제되어야한다고 생각합니다.

무엇이 여기에 있습니까?

답변

0

기본적으로 YARN에서 컨테이너는 메모리가 미리 할당됩니다. 이 경우 모든 감속기 컨테이너에는 클러스터의 여유 메모리와 관계없이 6GB의 메모리가 있습니다. 이러한 컨테이너의 JVM은 컨테이너 전체에서 재사용되거나 공유되지 않습니다 (최소한 Hadoop2는 아님). 즉, 하나의 감속기에있는 메모리가 메모리 6GB 한도를 초과하면 다른 무료 컨테이너에서 리소스를 가져 오지 않습니다. if 그게 당신의 관심사입니다.)

지금까지는 왜 90 %가 넘었을 때 메모리에서 항상 올라가는 감속기가 몇 개 밖에 없기 때문에 데이터에서 가능한 SKEW를 알 수 있습니다. 즉,이 감속기는 다른 입력 그룹보다 많은 입력 그룹 또는 더 많은 키를 처리 할 수 ​​있습니다.

+0

설명해 주셔서 감사합니다. 오류를 발견했습니다 ... 감속기의 출력이 너무 많은 파일을 생성하고 아마 모든 파일에 대한 처리기를 가지고있어서 메모리가 과부하가됩니다. 내가 reducers의 응답으로 여러 파일을 가질 수없는 이유를 완전히 이해하지는 못했지만 어쩌면 셔플 단계와 관련이 있습니다. – refaelos