www - Hadoop:... minReplication(= 1) 대신 0 개의 노드로 복제됩니다. 1 개의 데이터 노드가 실행 중이며이 작업에서 노드가 제외되지 않았습니다.




www hadoop (4)

나는 hdfs 서비스를 다시 시작하여이 문제를 해결 한 동일한 오류가 발생했습니다. 다시 시작된 NameNode 및 DataNode 서비스.

멀티 스레드 응용 프로그램의 일부로 HDFS에 쓰려고 할 때 다음 오류가 발생합니다.

could only be replicated to 0 nodes instead of minReplication (=1).  There are 1 datanode(s) running and no node(s) are excluded in this operation.

나는 포맷팅에 대해 최고 등급의 답변을 시도했지만이 것은 나에게 도움이되지 않는다. HDFS 오류 : 1 대신 1 개의 노드로만 복제 될 수있다.

무슨 일이 일어나고있는거야?

  1. 내 응용 프로그램은 각각 자신의 Spring Data PartitionTextFileWriter 구성된 2 개의 스레드로 구성됩니다.
  2. 스레드 1은 데이터를 처리하는 첫 번째이며 이것이 HDFS에 성공적으로 쓸 수 있습니다.
  3. 그러나 스레드 2가 데이터를 처리하기 시작하면 파일로 플러시하려고 할 때이 오류가 발생합니다.

스레드 1과 2는 내 디렉토리 트리의 루트에 상위 디렉토리를 공유하지만 동일한 파일에 쓰지 않습니다.

내 서버의 디스크 공간에는 문제가 없습니다.

나는 또한 내 이름 - 노드 로그에서 이것을 볼 수 있지만 그것이 무엇을 의미하는지 확실하지 않다.

2016-03-15 11:23:12,149 WARN org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: Failed to place enough replicas, still in need of 1 to reach 1 (unavailableStorages=[], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}, newBlock=true) For more information, please enable DEBUG log level on org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy
2016-03-15 11:23:12,150 WARN org.apache.hadoop.hdfs.protocol.BlockStoragePolicy: Failed to place enough replicas: expected size is 1 but only 0 storage types can be selected (replication=1, selected=[], unavailable=[DISK], removed=[DISK], policy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]})
2016-03-15 11:23:12,150 WARN org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: Failed to place enough replicas, still in need of 1 to reach 1 (unavailableStorages=[DISK], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}, newBlock=true) All required storage types are unavailable:  unavailableStorages=[DISK], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}
2016-03-15 11:23:12,151 INFO org.apache.hadoop.ipc.Server: IPC Server handler 8 on 9000, call org.apache.hadoop.hdfs.protocol.ClientProtocol.addBlock from 10.104.247.78:52004 Call#61 Retry#0
java.io.IOException: File /metrics/abc/myfile could only be replicated to 0 nodes instead of [2016-03-15 13:34:16,663] INFO [Group Metadata Manager on Broker 0]: Removed 0 expired offsets in 1 milliseconds. (kafka.coordinator.GroupMetadataManager)

이 오류의 원인은 무엇입니까?

감사


데이터 노드를 실행하는 컴퓨터의 jps 명령이 데이터 노드가 실행 중인지 확인하십시오. 실행중인 경우 namenode와 연결할 수 없으므로 namenode는 hadoop 시스템에 datanode가 없다고 생각합니다.

이 경우 start-dfs.sh 를 실행 한 후 마스터 노드에서 netstat -ntlp 를 실행하십시오. 9000은 대부분의 자습서에서 core-site.xml 에 지정하도록 지시 한 포트 번호입니다. netstat 의 출력에서 ​​이와 같은 라인이 netstat

tcp        0      0 120.0.1.1:9000        0.0.0.0:*               LISTEN       4209/java

호스트 별명에. 제가 있습니다. 나는 똑같은 문제가 있었기 때문에 그것이 어떻게 풀 렸는지 진술 할 것이다.

이것이 내 core-site.xml 의 내용입니다.

<configuration>
   <property>
       <name>fs.default.name</name>
       <value>hdfs://vm-sm:9000</value>
   </property>
</configuration>

따라서 마스터 컴퓨터의 vm-sm 별칭은 127.0.1.1에 매핑됩니다. 이것은 /etc/hosts 파일의 설정 때문입니다.

127.0.0.1       localhost
127.0.1.1       vm-sm
192.168.1.1     vm-sm
192.168.1.2     vm-sw1
192.168.1.3     vm-sw2

마스터 시스템의 core-site.xml120.0.1.1:9000 에 매핑 된 것처럼 보이고 작업자 노드의 192.168.1.1:9000 통해 연결하려고하는 것처럼 보입니다.

그래서 /etc/hosts 파일에서 hadoop 시스템을위한 마스터 노드의 별명을 바꾸어야했습니다 (그냥 하이픈을 삭제했습니다).

127.0.0.1       localhost
127.0.1.1       vm-sm
192.168.1.1     vmsm
192.168.1.2     vm-sw1
192.168.1.3     vm-sw2

core-site.xml , mapred-site.xmlslave 파일 (마스터의 이전 별칭이 발생한 곳)의 변경 사항을 반영했습니다.

hadoop 위치뿐 아니라 tmp 폴더에서 이전 hdfs 파일을 삭제하고 모든 노드를 다시 시작한 후에 문제가 해결되었습니다.

이제 DFS를 시작한 후 netstat -ntlp 반환합니다.

tcp        0      0 192.168.1.1:9000        0.0.0.0:*               LISTEN ...
...

제 경우에는 COLD로 설정된 출력 경로의 저장 정책 이었습니다.

폴더 설정 확인 방법 :

hdfs storagepolicies -getStoragePolicy -path my_path

내 경우에는 돌아왔다.

The storage policy of my_path
BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], creationFallbacks=[], replicationFallbacks=[]}   

나는 다른 곳으로 데이터를 버리고 (HOT 스토리지에) 문제가 사라졌습니다.


최근에 비슷한 문제가 발생했습니다. 내 데이터 노드 (SSD)가 스토리지 용 [SSD]file:///path/to/data/dir 를 보유하고 dfs.datanode.data.dir 구성에 [SSD]file:///path/to/data/dirdfs.datanode.data.dir 합니다. unavailableStorages=[DISK] 포함 된 로그로 인해 [SSD] 태그가 제거되어 문제가 해결되었습니다.

분명히 Hadoop은 [DISK] 를 기본 저장소 유형으로 사용하고 [DISK] 태그가있는 저장소 위치가없는 경우 SSD를 사용하도록 '대체'(fallback)하지 않습니다. 이 동작에 대한 어떤 문서도 발견 할 수 없었습니다.







hdfs