Amazon EMR의 "java.lang.OutOfMemoryError: GC overhead limit exceeded" 예외를 해결하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2021년 8월 16일
Amazon EMR의 NameNode 서비스가 "java.lang.OutOfMemoryError: GC overhead limit exceeded" 예외와 함께 실패합니다.
간략한 설명
NameNode 서비스는 메모리를 사용하여 HDFS에 저장된 파일의 네임스페이스 객체 및 메타데이터를 저장합니다. HDFS에 파일이 많을수록 NameNode가 사용하는 메모리가 늘어납니다. "java.lang.OutOfMemoryError: GC overhead limit exceeded" 오류는 NameNode 힙 크기가 클러스터의 HDFS 데이터 양을 처리하기에 부족함을 나타냅니다. 메모리 부족 예외를 방지하려면 힙 크기를 늘리십시오.
해결 방법
로그에서 오류 확인
2. 마스터 노드에서 다음 명령을 실행하여 NameNode 서비스의 상태를 확인합니다.
initctl list
다음 출력은 NameNode 서비스가 중지되었음을 나타냅니다.
hadoop-hdfs-namenode stop/waiting
3. /var/log/hadoop-hdfs/hadoop-hdfs-namenode-ip-xxxx.out 경로에 있는 NameNode 로그에서 OutofMemory 예외를 확인합니다. xxxx를 마스터 노드의 프라이빗 IP 주소(예: /var/log/hadoop-hdfs/hadoop-hdfs-namenode-ip-10-0-1-109.out)로 변경합니다.
다음과 유사한 출력은 OutOfMemory 예외로 인해 NameNode 서비스가 실패했음을 확인해 줍니다.
# java.lang.OutOfMemoryError: GC overhead limit exceeded
# -XX:OnOutOfMemoryError="kill -9 %p
kill -9 %p
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 이하:
2. /etc/hadoop/conf/hadoop-env.sh 파일에서 NameNode 힙 크기를 늘립니다. 워크로드에 적합한 크기를 선택합니다. 예:
export HADOOP_NAMENODE_HEAPSIZE=2048
3. 변경 내용을 저장합니다.
4. NameNode 서비스를 다시 시작합니다.
sudo stop hadoop-hdfs-namenode
sudo start hadoop-hdfs-namenode
5. NameNode 프로세스가 실행 중인지 확인합니다.
initctl list
성공적인 출력은 다음과 같습니다.
hadoop-hdfs-namenode start/running, process 6324
6. HDFS 명령이 작동하는지 확인합니다.
hdfs dfs -ls /
성공적인 출력은 다음과 같습니다.
Found 4 items
drwxr-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