2016-08-30 2 views
-1

Wenn wir Aggregationsabfrage in der Hive-Tabelle ausführen, schlägt es mit der folgenden Ausnahme fehl. Aber select * from table funktioniert einwandfrei. verwenden wir Apache Hadoop 2.7.2, Hive 1.2.1Hive map reduce funktioniert nicht

In order to change the average load for a reducer (in bytes): 
    set hive.exec.reducers.bytes.per.reducer=<number> 
In order to limit the maximum number of reducers: 
    set hive.exec.reducers.max=<number> 
In order to set a constant number of reducers: 
    set mapreduce.job.reduces=<number> 
java.lang.RuntimeException: Error caching map.xml: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /tmp/hive/dssbp/eb828a68-6637-41ea-a05e-d33ae658eb19/hive_2016-08-30_16-41-13_054_4952687673775889960-1/-mr-10004/a48247fe-12cd-4c9f-bf41-df67ffada26d/map.xml could only be replicated to 0 nodes instead of minReplication (=1). There are 2 datanode(s) running and no node(s) are excluded in this operation. 
     at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1547) 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3107) 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3031) 
     at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:724) 
     at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:492) 
     at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 
     at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616) 
     at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:969) 
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049) 
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.Subject.doAs(Subject.java:415) 
     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 
     at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2043) 

Antwort

0

Wenn Sie Daten auswählen, hive braucht keine Zwischenergebnisse zu speichern. Es kann einfach das Ergebnis direkt erzeugen.

Wenn Sie irgendeine Art von Aggregation tun sollten, muss es seine Arbeit irgendwo speichern.

Der relevante Teil des Fehlers ist hier:

nur auf 0 Knoten statt minReplication repliziert werden kann (= 1). In diesem Betrieb werden 2 Datenknoten ausgeführt und keine Knoten ausgeschlossen.

Dies bedeutet, dass Hive seine Blöcke nirgendwo schreiben kann. Wahrscheinlich weil der Cluster voll ist (aber möglicherweise weil er nicht die Rechte hat).

+0

Dank Dennis, das physische Gedächtnis war das Problem, nach der Reinigung ging es durch. –