이름 노드가 안전 모드에 있습니다. 떠날 수 없다


122
root# bin/hadoop fs -mkdir t
mkdir: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/root/t. Name node is in safe mode.

hdfs에서 아무것도 만들 수 없습니다.

나는했다

root# bin/hadoop fs -safemode leave

하지만 보여주는

safemode: Unknown command

무엇이 문제입니까?

해결책



2
제 경우에는 리소스가 부족했기 때문에 안전한 노드에있었습니다 (도커에서 실행 중)
pomber

@BrendenBrown, 다음은 Hadoop 3.2.0의 현재 작동중인 링크입니다. hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/…
Eugene Gr. Philippov

그리고 다음은 Hadoop«stable»(현재 2.9.x)에 대한 현재 작동중인 링크입니다. hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/…
Eugene Gr. Philippov

답변:


211

네임 노드가 안전 모드를 강제로 나가게하려면 다음 명령을 실행해야합니다.

 bin/hadoop dfsadmin -safemode leave

에 대한 하위 명령이 아니기 때문에 Unknown command명령에 대한 오류 가 발생 하지만 .-safemodehadoop fshadoop dfsadmin

또한 위의 명령 후에는 hadoop fsckhdfs에서 발생하는 불일치를 정리할 수 있도록 한 번 실행하는 것이 좋습니다 .

최신 정보:

최신 배포판 에는 hdfscommand 대신 hadoopcommand를 사용하십시오 . 이 hadoop명령은 더 이상 사용되지 않습니다.

hdfs dfsadmin -safemode leave

hadoop dfsadmin더 이상 사용되지 않으며 hadoop fs명령도 마찬가지입니다 . 모든 hdfs 관련 작업은 별도의 명령으로 이동됩니다 hdfs.


2
실제로 왜이 표시 '네임 노드는 안전 모드에'
Unmesha SreeVeni

1
기본적으로 namenode는 비정상적인 상황 (예 : 디스크가 가득 차거나 시작 단계)에서 안전 모드로 들어갑니다. 여기에서 더 많은 것을 읽으십시오; hadoop.apache.org/docs/stable/hdfs_user_guide.html#Safemode
Amar

2
저는 Hadoop 2.0.0-cdh4.1.1을 사용하고 있습니다. hadoop dfsadmin명령을 실행했을 때 ______ DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. Safe mode is OFF ______ ...하지만 여전히 실행되었습니다. 아래 @ user3316017의 제안은 권장 구문입니다.
CJBS 2014

새로운 배포판에 따라 내 대답을 업데이트했습니다. 이러한 지원 중단이 발생했을 때부터 아파치 하둡의 정확한 버전을 설정하는 데 도움을 줄 수 있다면 좋을 것입니다.
Amar

1
hdfs dfsadmin -safemode leave클러스터가 가득 차서 명령이 실행 되 자마자 HDFS가 다시 안전 모드로 전환 되는 경우, 정리 명령을 즉시 연결하여 상황을 벗어날 수 있습니다. 예hdfs dfsadmin -safemode leave; hdfs dfs -rm -skipTrash /path/to/stuff/to/delete
Shadocko

27

이것을 시도하면 작동합니다

sudo -u hdfs hdfs dfsadmin -safemode leave

이 수퍼 유저 privilage..thanks이 @wesam 요구할 수이 명령은 나를 위해 일한
NikhilP


7

위의 Hadoop 버전 2.6.1을 사용하는 경우 명령이 작동하는 동안 감가 상각되었다고 불평합니다. hadoop dfsadmin -safemode leaveDocker 컨테이너에서 Hadoop을 실행 하고 있었기 때문에 실제로 사용할 수 없었고 해당 명령은 컨테이너에서 실행될 때 마술처럼 실패했습니다. 그래서 제가 한 일은 이랬습니다. 나는 문서를 확인 dfs.safemode.threshold.pct했고 문서에서

dfs.replication.min에 정의 된 최소 복제 요구 사항을 충족해야하는 블록의 백분율을 지정합니다. 0보다 작거나 같은 값은 안전 모드를 종료하기 전에 특정 비율의 블록을 기다리지 않음을 의미합니다. 1보다 큰 값은 안전 모드를 영구적으로 만듭니다.

그래서 나는 hdfs-site.xml다음과 같이 변경했습니다 (이전 Hadoop 버전에서는 분명히 다음에서해야합니다 hdfs-default.xml.

<configuration>
    <property>
        <name>dfs.safemode.threshold.pct</name>
        <value>0</value>
    </property>
</configuration>

5

네임 노드는 메모리가 부족할 때 안전 모드로 들어갑니다. 결과적으로 HDFS는 읽기만 가능합니다. 즉, HDFS에 추가 디렉토리 나 파일을 만들 수 없습니다. 안전 모드에서 나오려면 다음 명령이 사용됩니다.

hadoop dfsadmin -safemode leave

cloudera 관리자를 사용하는 경우 :

go to >>Actions>>Leave Safemode

하지만 항상 문제가 해결되는 것은 아닙니다. 완전한 해결책은 메모리에 약간의 공간을 만드는 데 있습니다. 다음 명령을 사용하여 메모리 사용량을 확인하십시오.

free -m

cloudera를 사용하는 경우 HDFS가 건강 상태가 좋지 않은 징후를 보이는지도 확인할 수 있습니다. 아마도 네임 노드와 관련된 메모리 문제를 보여주고있을 것입니다. 사용 가능한 옵션에 따라 더 많은 메모리를 할당하십시오. cloudera 관리자를 사용하지 않는 경우 동일한 명령을 사용할지 모르겠지만 방법이 있어야합니다. 도움이 되었기를 바랍니다. :)


5

이 시도

sudo -u hdfs hdfs dfsadmin -safemode leave

안전 모드 상태 확인

sudo -u hdfs hdfs dfsadmin -safemode get

여전히 안전 모드에있는 경우 노드의 공간이 충분하지 않은 이유 중 하나는 다음을 사용하여 노드 디스크 사용량을 확인할 수 있습니다.

df -h

루트 파티션이 가득 찬 경우 파일을 삭제하거나 루트 파티션에 공간을 추가하고 첫 번째 단계를 다시 시도하십시오.


4

안전 모드 켜짐은 (HDFS가 읽기 전용 모드에 있음)
안전 모드 꺼짐은 (HDFS가 쓰기 가능 및 읽기 가능 모드에 있음)을 의미합니다.

에서는 Hadoop 2.6.0아래 명령을 사용하여 이름 노드의 상태를 확인할 수 있습니다.

이름 노드 상태를 확인하려면

$ hdfs dfsadmin -safemode get

안전 모드로 들어가려면 :

$ hdfs dfsadmin -safemode enter

안전 모드를 종료하려면

~$ hdfs dfsadmin -safemode leave

1
안전 모드를 강제 종료하려면 : ~ $ hdfs dfsadmin -safemode forceExit
ammills01

1

HDFS OS 사용자를 사용하여 아래 명령을 실행하여 안전 모드를 비활성화하십시오.

sudo -u hdfs hadoop dfsadmin -safemode leave

0

아래 명령을 사용하여 안전 모드를 끕니다.

$> hdfs dfsadmin -safemode 휴가

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.