Amazon EMR 클러스터에서 NameNode용 안전 모드 서비스를 해제하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 9월 3일

Amazon EMR 클러스터에서 Apache Hadoop 또는 Apache Spark 작업을 실행하려고 하면 다음 오류 메시지 중 하나가 표시됩니다.

  • Cannot create file/user/test.txt._COPYING_. Name node is in safe mode.
  • org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /user/hadoop/.sparkStaging/application_15xxxxxxxx_0001. Name node is in safe mode. It was turned on manually. Use "hdfs dfsadmin -safemode leave" to turn safe mode off. NamenodeHostName:ip-xxx-xx-xx-xx.ec2.internal

안전 모드를 끄려고 시도했지만 즉시 다시 켜집니다. NameNode를 안전 모드에서 꺼내고 싶습니다.

간략한 설명

NameNode에 대한 안전 모드는 기본적으로 Hadoop 분산 파일 시스템(HDFS) 클러스터의 읽기 전용 모드입니다. NameNode는 다음과 같은 여러 가지 이유로 안전 모드에 들어갈 수 있습니다.

  • 사용 가능한 공간의 크기가 NameNode 저장소 디렉터리에 필요한 공간보다 작습니다. NameNode 디렉터리에 필요한 공간의 크기는 파라미터 dfs.namenode.resource.du.reserved에 정의되어 있습니다.
  • NameNode에서 FsImageEditLog를 메모리에 로드할 수 없습니다.
  • NameNode가 DataNode에서 블록 보고서를 받지 못했습니다.

문제의 근본 원인을 찾으려면 로그 위치 /var/log/hadoop-hdfs/에서 NameNode 로그를 확인하세요.

해결 방법

사용 사례에 따라 다음 문제 해결 옵션 중 하나 이상을 시도합니다.

다중 프라이머리 노드가 있는 클러스터로 전환

단일 프라이머리 노드가 있는 클러스터에서는 체크포인트가 자동으로 수행되지 않습니다. 즉, HDFS 편집 로그가 새 스냅샷(FsImage)에 백업되지 않고 제거되지 않습니다. HDFS는 편집 로그를 사용하여 스냅샷 간의 파일 시스템 변경 사항을 기록합니다. 단일 프라이머리 노드가 있는 클러스터가 있고 편집 로그를 수동으로 제거하지 않으면 해당 로그가 결국 /mnt의 모든 디스크 공간을 사용할 수 있습니다. 이 문제를 해결하려면 다중 프라이머리 노드가 있는 클러스터를 시작합니다. 다중 프라이머리 노드가 있는 클러스터는 HDFS NameNode에 대한 고가용성을 지원하므로 체크포인트 수행 문제가 해결됩니다. 자세한 내용은 프라이머리 노드 계획 및 구성을 참조하세요.

/mnt에서 불필요한 파일 제거

/mnt에 사용할 수 있는 최소 디스크 공간은 dfs.namenode.resource.du.reserved 파라미터에 의해 지정됩니다. /mnt 디렉터리에서 사용 가능한 디스크의 공간이 dfs.namenode.resource.du.reserved에 설정된 값보다 낮은 값으로 떨어지면 NameNode가 안전 모드로 들어갑니다. dfs.namenode.resource.du.reserved의 기본값은 100MB입니다. NameNode가 안전 모드에 있으면 파일 시스템 또는 블록 수정이 허용되지 않습니다. 따라서 /mnt에서 불필요한 파일을 제거하면 문제를 해결하는 데 도움이 될 수 있습니다. 더 이상 필요하지 않은 파일을 삭제하려면 다음을 수행합니다.

1.    SSH를 사용하여 프라이머리 노드에 연결합니다.

2.    디스크 공간이 부족하여 NameNode가 안전 모드에 있는지 확인하려면 NameNode 로그를 확인하세요. 해당 로그는 /var/log/hadoop-hdfs에 있습니다. 디스크 공간이 충분하면 로그는 다음과 비슷할 수 있습니다.

2020-08-28 19:14:43,540 WARN org.apache.hadoop.hdfs.server.namenode.NameNodeResourceChecker (org.apache.hadoop.hdfs.server.namenode.FSNamesystem$NameNodeResourceMonitor@5baaae4c): Space available on volume '/dev/xvdb2' is 76546048, which is below the configured reserved amount 104857600

디스크 공간이 부족할 경우 로그는 다음과 비슷할 수 있습니다.

2020-09-28 19:14:43,540 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem (org.apache.hadoop.hdfs.server.namenode.FSNamesystem$NameNodeResourceMonitor@5baaae4c): NameNode low on available disk space. Already in safe mode.

3.    다음 명령을 실행하여 NameNode가 여전히 안전 모드에 있는지 확인합니다.

[root@ip-xxx-xx-xx-xxx mnt]# hdfs dfsadmin -safemode get
Safe mode is ON

4.    /mnt에서 불필요한 파일을 삭제합니다. 예를 들어, 하나의 프라이머리 노드가 있는 클러스터에서 디렉터리 /mnt/namenode/current가 많은 공간을 사용하는 경우, 새 스냅샷(FsImage)을 생성한 다음 이전 편집 로그를 제거할 수 있습니다.

다음 예제 스크립트는 새 스냅샷을 생성하고 이전 편집 로그를 Amazon Simple Storage Service(Amazon S3) 버킷에 백업한 다음 편집 로그를 제거합니다. 스크립트는 진행 중인 편집에 대한 로그를 제거하지 않습니다. 다음 스크립트를 hadoop 사용자로 실행합니다.

#!/bin/bash
hdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace
sudo su - root -c "hdfs dfs -put /mnt/namenode/current/*edits_[0-9]* s3://doc-example-bucket/backup-hdfs/"
sudo su - root -c "rm -f /mnt/namenode/current/*edits_[0-9]*"
sudo su - root -c "rm -f /mnt/namenode/current/seen*"
hdfs dfsadmin -safemode leave

5.    /mnt에서 사용 가능한 디스크 공간의 크기를 확인합니다. 사용 가능한 공간이 100MB를 초과하면 안전 모드 상태를 다시 확인한 다음 안전 모드를 끕니다.

[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

여전히 /mnt에 사용 가능한 공간이 100MB 미만인 경우 다음 중 하나 이상을 수행합니다.

  • 다음 섹션에 설명된 대로 더 많은 파일을 제거합니다.
  • /mnt 볼륨의 크기를 늘립니다.

더 많은 파일 제거

1.    SSH를 사용하여 프라이머리 노드에 연결합니다.

2.    /mnt 디렉터리로 이동합니다.

cd /mnt

3.    디스크 공간을 가장 많이 사용하고 있는 폴더를 확인합니다.

sudo du -hsx * | sort -rh | head -10

4.    디스크 공간 문제의 원인을 찾을 때까지 계속 조사합니다. 예를 들어 var 폴더가 많은 디스크 공간을 사용하는 경우 var에서 가장 큰 하위 폴더를 확인합니다.

cd var
sudo du -hsx * | sort -rh | head -10

5.    디스크 공간을 차지하는 파일 및 폴더를 확인한 후 해당 파일을 삭제하도록 선택합니다. 더 이상 필요하지 않은 파일만 삭제해야 합니다. Amazon S3 로깅 버킷에 이미 백업되어 있는 /mnt/var/log/hadoop-hdfs//mnt/var/log/hadoop-yarn/의 압축된 로그 파일은 삭제하기에 적합합니다.

6.    불필요한 파일을 삭제한 후 안전 모드 상태를 다시 확인한 다음 안전 모드를 끕니다.

[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

HDFS 사용 설명서에 대한 Hadoop 설명서

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?