Amazon EMR에서 "java.lang.OutOfMemoryError: GC overhead limit exceeded." 예외를 해결하고 싶습니다.
간략한 설명
NameNode 서비스는 메모리를 사용하여 Hadoop 분산 파일 시스템(HDFS)에 저장된 파일의 네임스페이스 객체 및 메타데이터를 저장합니다. HDFS에 파일이 많이 있을수록 NameNode가 더 많은 메모리를 사용합니다.
NameNode 힙 크기가 클러스터의 HDFS 데이터 양에 비해 작을 경우 "java.lang.OutOfMemoryError: GC overhead limit exceeded" 오류가 표시됩니다. 메모리 부족 예외를 방지하려면 힙 크기를 늘리십시오.
해결 방법
로그를 확인하여 오류 확인
다음 단계를 완료하십시오.
-
SSH를 사용하여 프라이머리 노드에 연결합니다.
-
NameNode 서비스의 상태를 확인하려면 프라이머리 노드에서 다음 명령을 실행합니다.
initctl list
NameNode 서비스가 중지되면 다음과 같은 출력이 표시됩니다.
hadoop-hdfs-namenode stop/waiting
-
OutofMemory 예외를 확인하려면 var/log/hadoop-hdfs/hadoop-hdfs-namenode-ip-####.out에서 NameNode 로그를 확인하십시오.
참고: **####**을 프라이머리 노드의 프라이빗 IP 주소로 바꾸십시오.
OutofMemory 예외로 인해 NameNode 서비스가 실패하면 다음 예시와 유사한 출력이 표시됩니다.
# java.lang.OutOfMemoryError: GC overhead limit exceeded# -XX:OnOutOfMemoryError="kill -9 %p
kill -9 %p
NameNode 힙 크기 늘리기
중요: 이 구성을 변경하려면 NameNode 서비스를 다시 시작해야 합니다. NameNode 힙 크기를 늘리는 동안 HDFS 읽기 또는 쓰기 작업을 수행하는 애플리케이션이 없어야 합니다.
Amazon EMR 버전 5.21.0 이상
힙 크기를 늘리려면 실행 중인 클러스터의 인스턴스 그룹에 hadoop-env 구성 객체를 제공하십시오. 또는 새 클러스터를 시작할 때 구성 객체를 추가합니다. 워크로드에 적합한 크기를 선택하십시오.
다음 구성 예시 객체는 힙 크기를 1GB에서 2GB로 늘립니다.
[
{
"Classification": "hadoop-env",
"Properties": {},
"Configurations": [
{
"Classification": "export",
"Properties": {
"HADOOP_NAMENODE_HEAPSIZE": "2048"
},
"Configurations": []
}
]
}
]
Amazon EMR은 새 구성을 적용하고 NameNode 프로세스를 정상적으로 다시 시작합니다.
Amazon EMR 버전 5.20.0 이하
다음 단계를 완료하십시오.
-
SSH를 사용하여 프라이머리 노드에 연결합니다.
-
/etc/hadoop/conf/hadoop-env.sh 파일에서 NameNode 힙 크기를 늘립니다.
export HADOOP_NAMENODE_HEAPSIZE=2048
참고: 2048을 필요한 힙 크기로 바꾸십시오.
-
변경 사항을 저장합니다.
-
NameNode 서비스를 다시 시작하려면 다음 명령을 실행합니다.
sudo stop hadoop-hdfs-namenode; sudo start hadoop-hdfs-namenode
-
NameNode 프로세스가 실행 중인지 확인하려면 다음 명령을 실행합니다.
initctl list
예상 출력:
hadoop-hdfs-namenode start/running, process 6324
-
HDFS 명령이 작동하는지 확인하려면 다음 명령을 실행합니다.
hdfs dfs -ls /
예상 출력:
Found 4 itemsdrwxr-xr-x - hdfs hadoop 0 2019-09-26 14:02 /apps
drwxrwxrwt - hdfs hadoop 0 2019-09-26 14:03 /tmp
drwxr-xr-x - hdfs hadoop 0 2019-09-26 14:02 /user
drwxr-xr-x - hdfs hadoop 0 2019-09-26 14:02 /var
-
구성을 변경한 후 클러스터를 모니터링합니다.
관련 정보
애플리케이션 구성
Hive가 쿼리 결과를 출력할 때 발생하는 Amazon EMR의 "OutOfMemoryError" Hive Java 힙 공간 예외는 어떻게 해결합니까?