[HADOOP] Hadoop : ... minReplication (= 1) 대신 0 개의 노드로 복제됩니다. 실행중인 데이터 노드가 하나이며이 작업에서 노드가 제외되지 않았습니다.
HADOOPHadoop : ... minReplication (= 1) 대신 0 개의 노드로 복제됩니다. 실행중인 데이터 노드가 하나이며이 작업에서 노드가 제외되지 않았습니다.
내 멀티 스레드 응용 프로그램의 일부로 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과 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)
이 오류의 원인은 무엇입니까?
감사
해결법
-
==============================
1.이 오류는 집중된 파일 내에서 특정 블록의 복사본을 만들 수 없으므로 HDFS의 블록 복제 시스템으로 인해 발생합니다. 그 일반적인 이유 :
이 오류는 집중된 파일 내에서 특정 블록의 복사본을 만들 수 없으므로 HDFS의 블록 복제 시스템으로 인해 발생합니다. 그 일반적인 이유 :
또한하시기 바랍니다 :
참조 : https://wiki.apache.org/hadoop/CouldOnlyBeReplicatedTo
참조 : https://support.pivotal.io/hc/en-us/articles/201846688-HDFS-reports-Configured-Capacity-0-0-B-for-datanode
또한 확인하십시오 : Java에서 HDFS로 쓰기, "minReplication 대신 0 개의 노드에만 복제 할 수 있습니다"
-
==============================
2.최근에 비슷한 문제가 발생했습니다. 내 데이터 노드 (SSD)가 스토리지 용 SSD를 보유하고 있으므로 dfs.datanode.data.dir 구성에 [SSD] file : /// path / to / data / dir을 입력합니다. unavailableStorages = [DISK]이 (가) 포함 된 로그로 인해 [SSD] 태그가 제거되어 문제가 해결되었습니다.
최근에 비슷한 문제가 발생했습니다. 내 데이터 노드 (SSD)가 스토리지 용 SSD를 보유하고 있으므로 dfs.datanode.data.dir 구성에 [SSD] file : /// path / to / data / dir을 입력합니다. unavailableStorages = [DISK]이 (가) 포함 된 로그로 인해 [SSD] 태그가 제거되어 문제가 해결되었습니다.
분명히 Hadoop은 [DISK]를 기본 저장소 유형으로 사용하고 [DISK] 태그가있는 저장소 위치가없는 경우 SSD를 사용하도록 '대체'(fallback)하지 않습니다. 이 동작에 대한 어떤 문서도 찾지 못했습니다.
-
==============================
3.데이터 노드를 실행하는 컴퓨터의 jps 명령이 데이터 노드가 실행 중인지 확인하십시오. 실행중인 경우 namenode와 연결할 수 없으므로 namenode는 hadoop 시스템에 datanode가 없다고 생각합니다.
데이터 노드를 실행하는 컴퓨터의 jps 명령이 데이터 노드가 실행 중인지 확인하십시오. 실행중인 경우 namenode와 연결할 수 없으므로 namenode는 hadoop 시스템에 datanode가 없다고 생각합니다.
이 경우 start-dfs.sh를 실행 한 후 마스터 노드에서 netstat -ntlp를 실행하십시오. 9000은 대부분의 자습서에서 core-site.xml에 지정하도록 지시 한 포트 번호입니다. 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.xml이 120.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.xml 및 슬레이브 파일 (마스터의 이전 별명이 발생한 곳)의 변경 사항을 반영합니다.
hadoop 위치뿐 아니라 tmp 폴더에서 이전 hdfs 파일을 삭제하고 모든 노드를 다시 시작한 후에 문제가 해결되었습니다.
이제 DFS를 시작한 후 netstat -ntlp가 반환합니다.
tcp 0 0 192.168.1.1:9000 0.0.0.0:* LISTEN ... ...
-
==============================
4.나는 hdfs 서비스를 다시 시작하는 것과 같은 오류가있어이 문제를 해결했습니다. 다시 시작된 NameNode 및 DataNode 서비스.
나는 hdfs 서비스를 다시 시작하는 것과 같은 오류가있어이 문제를 해결했습니다. 다시 시작된 NameNode 및 DataNode 서비스.
-
==============================
5.제 경우에는 COLD로 설정된 출력 경로의 저장 정책이었습니다.
제 경우에는 COLD로 설정된 출력 경로의 저장 정책이었습니다.
폴더 설정 확인 방법 :
hdfs storagepolicies -getStoragePolicy -path my_path
내 경우에는 돌아왔다.
The storage policy of my_path BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], creationFallbacks=[], replicationFallbacks=[]}
나는 다른 곳으로 데이터를 버리고 (HOT 스토리지에) 문제가 사라졌습니다.
-
==============================
6.HDFS 안전 모드를 벗어날 수 있습니다.
HDFS 안전 모드를 벗어날 수 있습니다.
hdfs dfsadmin -safemode forceExit
-
==============================
7.제 경우에는 문제가 임시 파일이었습니다.
제 경우에는 문제가 임시 파일이었습니다.
로그에 다음 오류가 표시되었습니다.
2019-02-27 13:52:01,079 INFO org.apache.hadoop.hdfs.server.common.Storage: Lock on /tmp/hadoop-i843484/dfs/data/in_use.lock acquired by nodename 28111@slel00681841a 2019-02-27 13:52:01,087 WARN org.apache.hadoop.hdfs.server.common.Storage: java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-i843484/dfs/data: namenode clusterID = CID-38b0104b-d3d2-4088-9a54-44b71b452006; datanode clusterID = CID-8e121bbb-5a08-4085-9817-b2040cd399e1
hadoop tmp 파일을 제거하여 해결했습니다.
sudo rm -r /tmp/hadoop-*
-
==============================
8.또 다른 이유는 데이터 노드 시스템이 포트를 노출시키지 않았기 때문입니다 (기본적으로 50010). 필자는 Machine2에서 호스팅 된 Docker 컨테이너 C1에서 실행되는 HDFS로 Machine1의 파일을 쓰려고했습니다. 호스트 시스템이 컨테이너에서 실행중인 서비스로 요청을 전달하려면 포트 포워딩을 처리해야합니다. 호스트 컴퓨터에서 게스트 컴퓨터로 포트 50010을 전달한 후 문제를 해결할 수있었습니다.
또 다른 이유는 데이터 노드 시스템이 포트를 노출시키지 않았기 때문입니다 (기본적으로 50010). 필자는 Machine2에서 호스팅 된 Docker 컨테이너 C1에서 실행되는 HDFS로 Machine1의 파일을 쓰려고했습니다. 호스트 시스템이 컨테이너에서 실행중인 서비스로 요청을 전달하려면 포트 포워딩을 처리해야합니다. 호스트 컴퓨터에서 게스트 컴퓨터로 포트 50010을 전달한 후 문제를 해결할 수있었습니다.
-
==============================
9.나도 같은 오류가 발생했다, 그럼 나는 블록 크기를 변경했습니다. 이 문제가 해결되었습니다.
나도 같은 오류가 발생했다, 그럼 나는 블록 크기를 변경했습니다. 이 문제가 해결되었습니다.
from https://stackoverflow.com/questions/36015864/hadoop-be-replicated-to-0-nodes-instead-of-minreplication-1-there-are-1 by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Flume 설정을 테스트하기 위해 HTTP 소스를 설정하는 방법은 무엇입니까? (0) | 2019.06.15 |
---|---|
[HADOOP] Select Count (*)가 Select *보다 느린 이유는 하이브입니다. (0) | 2019.06.15 |
[HADOOP] LeaseExpiredException : HDFS에 임대 오류가 없습니다. (0) | 2019.06.14 |
[HADOOP] HBase REST 필터 (SingleColumnValueFilter) (0) | 2019.06.14 |
[HADOOP] 하나의 블록에 여러 개의 파일이 저장되어 있습니까? (0) | 2019.06.14 |