복붙노트

[HADOOP] core-site.xml에 fs.default.name을 설정하면 HDFS가 Safemode로 설정됩니다.

HADOOP

core-site.xml에 fs.default.name을 설정하면 HDFS가 Safemode로 설정됩니다.

필자는 Cloudera CDH4 배포판을 의사 배포 모드로 단일 컴퓨터에 설치하고 올바르게 작동하는지 테스트했습니다 (예 : MapReduce 프로그램을 실행하고 하이브 서버에 데이터를 삽입하는 등). xml 파일에서 fs.default.name을 localhost 대신 machine name으로 설정하고 NameNode 서비스를 다시 시작하면 HDFS가 안전 모드로 들어갑니다.

fs.default.name이 변경되기 전에 다음을 실행하여 HDFS의 상태를 확인했습니다.

$ hadoop dfsadmin -report
...
Configured Capacity: 18503614464 (17.23 GB)
Present Capacity: 13794557952 (12.85 GB)
DFS Remaining: 13790785536 (12.84 GB)
DFS Used: 3772416 (3.60 MB)
DFS Used%: 0.03%
Under replicated blocks: 2
Blocks with corrupt replicas: 0
Missing blocks: 0

그런 다음 core-site.xml을 수정했습니다 (컴퓨터 이름은 hadoop 임).

<property>
  <name>fs.default.name</name>
  <value>hdfs://hadoop:8020</value>
</property>

서비스를 다시 시작하고 보고서를 다시 보냈습니다.

$ sudo service hadoop-hdfs-namenode restart
$ hadoop dfsadmin -report
...
Safe mode is ON
Configured Capacity: 0 (0 B)
Present Capacity: 0 (0 B)
DFS Remaining: 0 (0 B)
DFS Used: 0 (0 B)
DFS Used%: NaN%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0

흥미로운 점은 일부 HDFS 명령을 계속 수행 할 수 있다는 것입니다. 예를 들면, 나는 달릴 수있다.

$ hadoop fs -ls /tmp

그러나 hadoop fs -cat을 사용하여 파일을 읽거나 HDFS에 파일을 저장하려고하면 NameNode가 safemode에 있다고 들립니다.

$ hadoop fs -put somefile .
put: Cannot create file/user/hadinstall/somefile._COPYING_. Name node is in safe mode.

fs.default.name을 컴퓨터 이름으로 설정해야하는 이유는 포트 8020 (기본 NameNode 포트)에서이 컴퓨터와 통신해야하기 때문입니다. fs.default.name을 localhost로두면 NameNode 서비스는 외부 연결 요청을 수신하지 않습니다.

나는 이것이 왜 일어나고 있는지에 관해서는 손해보고 있으며 도움을 주셔서 감사합니다.

해결법

  1. ==============================

    1.이 문제는 도메인 이름 확인에서 비롯되었습니다. / etc / hosts 파일은 localhost와 정규화 된 도메인 이름 모두에 대해 hadoop 시스템의 컴퓨터의 IP 주소를 가리 키도록 수정해야했습니다.

    이 문제는 도메인 이름 확인에서 비롯되었습니다. / etc / hosts 파일은 localhost와 정규화 된 도메인 이름 모두에 대해 hadoop 시스템의 컴퓨터의 IP 주소를 가리 키도록 수정해야했습니다.

    192.168.0.201 hadoop.fully.qualified.domain.com localhost
    
  2. ==============================

    2.안전 모드는 파일 시스템이 읽기 전용으로 마운트 된 HDFS 상태입니다. 복제가 수행되지 않으며 파일을 작성하거나 삭제할 수 없습니다. 필자의 경우 'ls'와 같은 파일 시스템 메타 데이터에 액세스하는 파일 시스템 작업이 효과적입니다.

    안전 모드는 파일 시스템이 읽기 전용으로 마운트 된 HDFS 상태입니다. 복제가 수행되지 않으며 파일을 작성하거나 삭제할 수 없습니다. 필자의 경우 'ls'와 같은 파일 시스템 메타 데이터에 액세스하는 파일 시스템 작업이 효과적입니다.

    네임 노드는 수동으로이 명령 ($ hadoop dfsadmin -safemode leave)으로 안전 모드를 떠나야합니다. ($ hadoop dfsadmin -safemode get)을 사용하여 안전 모드의 상태를 확인한 다음 dfsadmin 보고서를 실행하여 데이터가 표시되는지 확인하십시오. 나가는 경우 안전 모드의 보고서는 여전히 어떤 데이터도 보여주지 않는다. 그런데 namenode와 datanode 사이의 통신이 과장되지 않았다고 의심된다. 이 단계 후에 namenode 및 datanode 로그를 확인하십시오.

    다음 단계는 데이터 노드 프로세스를 다시 시작하는 것일 수 있으며 최후의 수단은 데이터 손실로 이어지는 namenode를 형식화하는 것입니다.

  3. from https://stackoverflow.com/questions/19412328/setting-fs-default-name-in-core-site-xml-sets-hdfs-to-safemode by cc-by-sa and MIT license