복붙노트

[HADOOP] Hadoop put 명령 던지기 - 1 대신 1 개의 노드에만 복제 가능

HADOOP

Hadoop put 명령 던지기 - 1 대신 1 개의 노드에만 복제 가능

저는 Hadoop을 처음 사용하고 있습니다. 우분투 컴퓨터에 pseudo distributed mode setup을 시도하고 hadoop put 명령으로 문제에 직면하고 있습니다. 내 구성 세부 정보는이 게시물에서 사용할 수 있습니다 -> "hadoop namenode -format"명령이 수행 할 작업

이제 아래 명령을 사용하여 HDFS에 파일을 추가하려고합니다.

hadoop fs –mkdir /user/myuser

hadoop fs -lsr /

$ ./hadoop fs -lsr /
drwxr-xr-x   - myuser supergroup          0 2014-11-26 16:04 /tmp
drwxr-xr-x   - myuser supergroup          0 2014-11-26 16:04 /tmp/hadoop-myuser
drwxr-xr-x   - myuser supergroup          0 2014-11-26 16:04 /tmp/hadoop-myuser/dfs
-rw-r--r--   1 myuser supergroup          0 2014-11-26 16:04 /tmp/hadoop-myuser/dfs/name
drwxr-xr-x   - myuser supergroup          0 2014-11-26 16:04 /tmp/hadoop-myuser/mapred
drwx------   - myuser supergroup          0 2014-11-26 16:12 /tmp/hadoop-myuser/mapred/system
drwxr-xr-x   - myuser supergroup          0 2014-11-26 16:04 /user
drwxr-xr-x   - myuser supergroup          0 2014-11-26 16:06 /user/myuser

이제 put 명령을 실행하고 있지만 다음과 같이 예외가 발생합니다.

$ ./hadoop fs -put example.txt .
14/11/26 16:06:19 WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/myuser/example.txt could only be replicated to 0 nodes, instead of 1
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1920)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:783)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:587)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1432)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1428)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1426)

    at org.apache.hadoop.ipc.Client.call(Client.java:1113)
    at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:229)
    at com.sun.proxy.$Proxy1.addBlock(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62)
    at com.sun.proxy.$Proxy1.addBlock(Unknown Source)
    at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:3720)
    at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:3580)
    at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2600(DFSClient.java:2783)
    at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:3023)

14/11/26 16:06:19 WARN hdfs.DFSClient: Error Recovery for null bad datanode[0] nodes == null
14/11/26 16:06:19 WARN hdfs.DFSClient: Could not get block locations. Source file "/user/myuser/example.txt" - Aborting...
put: java.io.IOException: File /user/myuser/example.txt could only be replicated to 0 nodes, instead of 1
14/11/26 16:06:19 ERROR hdfs.DFSClient: Failed to close file /user/myuser/example.txt
org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/myuser/example.txt could only be replicated to 0 nodes, instead of 1
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1920)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:783)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:587)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1432)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1428)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1426)

    at org.apache.hadoop.ipc.Client.call(Client.java:1113)
    at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:229)
    at com.sun.proxy.$Proxy1.addBlock(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62)
    at com.sun.proxy.$Proxy1.addBlock(Unknown Source)
    at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:3720)
    at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:3580)
    at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2600(DFSClient.java:2783)
    at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:3023)

누군가이 문제를 어떻게 해결할 수 있습니까?

문제의 해결 방법 :

제공된 답변에 따라 다음 단계에 따라 문제를 해결할 수 있습니다.

1) 모든 서비스 중지 :

./stop-all.sh

2) 데이터 디렉토리 삭제 :

rm -rf /tmp/hadoop-myuser/dfs/data/

3) 서비스 시작 :

./start-all.sh

4) 그런 다음 파일을 HDFS에 넣습니다.

./hadoop fs -put example.txt .

해결법

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

    1.이것은 데이터 노드 문제 때문입니다. 데이터 노드를 시작하고 지금 작업하십시오.

    이것은 데이터 노드 문제 때문입니다. 데이터 노드를 시작하고 지금 작업하십시오.

  2. ==============================

    2."hdfs-site.xml"의 "dfs.replication"에 최소 1이 있는지 확인 했습니까? 0 복제를 넣을 수 있다고 생각합니다.

    "hdfs-site.xml"의 "dfs.replication"에 최소 1이 있는지 확인 했습니까? 0 복제를 넣을 수 있다고 생각합니다.

    그리고 모든 hadoop 서비스가 실행 중인지 확인하십시오.

    실행 상태를 확인하려면 다음을 수행하십시오. JPS 명령을 실행하다

    개별적으로 서비스를 시작하려면 다음을 수행하십시오. Goto ... \ hadoop \ bin \

    start hadoop {datanode \ namenode}
    start yarn {nodemanager \ resourcemanager}
    
  3. from https://stackoverflow.com/questions/27147096/hadoop-put-command-throws-could-only-be-replicated-to-0-nodes-instead-of-1 by cc-by-sa and MIT license