복붙노트

[HADOOP] "파일을 minReplication (= 1) 대신 0 개의 노드에만 복제 할 수 있습니다."

HADOOP

"파일을 minReplication (= 1) 대신 0 개의 노드에만 복제 할 수 있습니다."

나는 전에 비슷한 질문을 던졌고이 문제를 해결할 것이라고 생각했지만, 더 작은 데이터 세트로 작업했기 때문에 사라 졌다는 것이 밝혀졌습니다.

많은 사람들이이 질문을했으며, 내가 찾을 수있는 모든 인터넷 게시판을 통과했지만 여전히 진전을 이루지 못했습니다.

내가하려고하는 것은 이것이다. 하이브에 약 1 기가 바이트의 데이터를 참조하는 외부 테이블 브라우저 데이터가 있습니다. 나는 그 데이터를 파티션 테이블 partbrowserdata에 집어 넣으려고하는데, 그 정의는 다음과 같다.

CREATE EXTERNAL TABLE IF NOT EXISTS partbrowserdata (                                                                                                                                                              
    BidID string,                                                                                                                                                                                                  
    Timestamp_ string,                                                                                                                                                                                             
    iPinYouID string,                                                                                                                                                                                              
    UserAgent string,                                                                                                                                                                                              
    IP string,                                                                                                                                                                                                     
    RegionID int,                                                                                                                                                                                                  
    AdExchange int,                                                                                                                                                                                                
    Domain string,                                                                                                                                                                                                 
    URL string,                                                                                                                                                                                                    
    AnonymousURL string,                                                                                                                                                                                           
    AdSlotID string,                                                                                                                                                                                               
    AdSlotWidth int,                                                                                                                                                                                               
    AdSlotHeight int,                                                                                                                                                                                              
    AdSlotVisibility string,                                                                                                                                                                                       
    AdSlotFormat string,                                                                                                                                                                                           
    AdSlotFloorPrice decimal,                                                                                                                                                                                      
    CreativeID string,                                                                                                                                                                                             
    BiddingPrice decimal,                                                                                                                                                                                          
    AdvertiserID string,                                                                                                                                                                                           
    UserProfileIDs array<string>                                                                                                                                                                                   
)                                                                                                                                                                                                                  
PARTITIONED BY (CityID int)                                                                                                                                                                                        
ROW FORMAT DELIMITED                                                                                                                                                                                               
FIELDS TERMINATED BY '\t'                                                                                                                                                                                          
STORED AS TEXTFILE                                                                                                                                                                                                 
LOCATION '/user/maria_dev/data2';

이 쿼리 :

insert into table partbrowserdata partition(cityid) 
select BidID,Timestamp_ ,iPinYouID ,UserAgent ,IP ,RegionID ,AdExchange ,Domain ,URL ,AnonymousURL ,AdSlotID ,AdSlotWidth ,AdSlotHeight ,AdSlotVisibility ,AdSlotFormat ,AdSlotFloorPrice ,CreativeID ,BiddingPrice ,AdvertiserID ,UserProfileIDs ,CityID 
from browserdata;

그리고 매번 모든 플랫폼에서 hortonworks 나 cloudera가 될 때마다 나는이 메시지를받습니다.

Caused by: 

org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/maria_dev/data2/.hive-staging_hive_2019-02-06_18-58-39_333_7627883726303986643-1/_task_tmp.-ext-10000/cityid=219/_tmp.000000_3 could only be replicated to 0 nodes instead of minReplication (=1).  There are 4 datanode(s) running and no node(s) are excluded in this operation.
        at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1720)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3389)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:683)
        at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.addBlock(AuthorizationProviderProxyClientProtocol.java:214)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:495)
        at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1073)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2217)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2213)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1917)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2211)

        at org.apache.hadoop.ipc.Client.call(Client.java:1504)
        at org.apache.hadoop.ipc.Client.call(Client.java:1441)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:230)
        at com.sun.proxy.$Proxy14.addBlock(Unknown Source)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.java:413)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:258)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:104)
        at com.sun.proxy.$Proxy15.addBlock(Unknown Source)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:1814)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1610)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:773)

나는 무엇을해야합니까? 왜 이런 일이 일어나는 지 이해할 수 없습니다. 그것은 비록 몇 가지 행을 삽입 할 수 있기 때문에 메모리 문제처럼 보이지만 모든 이유가있을 수는 없습니다. HDFS에는 충분한 메모리가 있으므로 1 기가의 추가 데이터는 1 달러의 동전이므로 RAM 문제일까요?

다음은 내 dfs 보고서 출력입니다.

나는 모든 실행 엔진에서 이것을 시도했다 : spark, tez, mr.

namenode를 포맷팅해야한다고 말하는 솔루션을 제안하지 마십시오. 왜냐하면 작동하지 않기 때문에 어떤 방법 으로든 해결책이 아니기 때문입니다.

최신 정보:

namenode에 대한 로그를보고 난 후에 이것이 도움이된다면 다음과 같은 사실을 발견했습니다.

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], stor agePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}

이러한 로그는 다음과 같이 제안합니다.

어떻게해야합니까?

나는 또한 여기에 비슷한 미해결 게시물을 발견 :

HDP 2.2 @ Linux / CentOS @ OracleVM (Hortonworks)이 Eclipse @ Windows에서 원격 제출시 실패 함

업데이트 2 :

필자는 스파크로 파티셔닝을 시도해 보았습니다. 그래서, 이것은 하이브 버그 일 것입니다 ...

업데이트 3 :

MapR에서이 점을 테스트 한 결과 작동했지만 MapR은 HDFS를 사용하지 않습니다. 이것은 분명히 일종의 HDFS + Hive 조합 버그입니다.

증명:

해결법

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

    1.나는 cloudera 포럼에 연락을 마치고 몇 분 만에 내 질문에 대답했습니다. http://community.cloudera.com/t5/Storage-Random-Access-HDFS/Why-can-tI-partition-a-1 -gigabyte-dataset-into-300 / mp / 86554 # M3981 가혹한 J가 제안한 것을 시도했는데 완벽하게 작동했습니다!

    나는 cloudera 포럼에 연락을 마치고 몇 분 만에 내 질문에 대답했습니다. http://community.cloudera.com/t5/Storage-Random-Access-HDFS/Why-can-tI-partition-a-1 -gigabyte-dataset-into-300 / mp / 86554 # M3981 가혹한 J가 제안한 것을 시도했는데 완벽하게 작동했습니다!

    그가 한 말은 다음과 같습니다.

    그래서, 하루가 끝날 때 나는 hive.optimize.sort.dynamic.partition = true를 설정했다. 모든 것이 작동하기 시작했습니다. 그러나 나는 또 다른 일을했다.

    이 문제를 조사하면서 이전 게시물 중 하나는 다음과 같습니다. 왜 분할 된 테이블에 쓸 때 "파일을 0 노드에만 복제 할 수 있습니까?" hive.exec.max.dynamic.partitions가 100으로 설정 되었기 때문에 하이브가 내 데이터 세트를 분할 할 수없는 문제가 발생했습니다. 그래서이 문제와 어딘가에 hortonworks 포럼에서 봤는데 나는 대답을 보았습니다. 그냥 이렇게해라.

    SET hive.exec.max.dynamic.partitions=100000; 
    SET hive.exec.max.dynamic.partitions.pernode=100000;
    

    이것은 또 다른 문제점이었습니다. 하이브가 hive.exec.max.dynamic.partitions를 설정할 때 많은 동시 연결을 열려고 했으므로이 값을 500으로 줄이기 전까지는 삽입 쿼리가 작동하지 않았습니다.

  2. from https://stackoverflow.com/questions/54561086/how-do-i-fix-file-could-only-be-replicated-to-0-nodes-instead-of-minreplication by cc-by-sa and MIT license