Problem -
Ich führe 1 Abfrage in AWS EMR aus. Es schlägt fehl, indem eine Ausnahme ausgelöst wird -
%Vor%Ich habe im Folgenden alle diesbezüglichen Informationen zu diesem Problem erwähnt. Bitte überprüfen Sie.
Abfrage -
%Vor%Ausnahme -
%Vor%Hive Konfigurationseigenschaften, die ich vor der Ausführung der obigen Abfrage eingestellt habe. -
%Vor%/etc/hive/conf/hive-site.xml
%Vor%/etc/tez/conf/tez-site.xml
%Vor%Fragen -
Hinweis - Ich habe die hive-exec-Version von 0.13.0 auf 2.1.0 aktualisiert. In der vorherigen Version funktionieren alle Abfragen einwandfrei.
Update-1
Wenn ich einen anderen Cluster starte, hat es funktioniert. Ich habe 3 mal auf dem gleichen ETL getestet.
Wenn ich das gleiche nochmal auf einem neuen Cluster gemacht habe, zeigt es dieselbe Ausnahme an. Nicht in der Lage zu verstehen, warum diese Mehrdeutigkeit passiert.
Hilf mir, diese Zweideutigkeit zu verstehen.
Ich bin naiv im Umgang mit Hive. Also, haben Sie weniger konzeptionelle Idee dazu.
Update-2 -
hfs protokolliert unter Öffentlicher DNS-Clustername: 50070 -
2016-09-20 11:31:55,155 WARN org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy (IPC Server handler 11 on 8020): 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-09-20 11:31:55,155 WARN org.apache.hadoop.hdfs.protocol.BlockStoragePolicy (IPC Server handler 11 on 8020): 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-09-20 11:31:55,155 WARN org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy (IPC Server handler 11 on 8020): 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-09-20 11:31:55,155 INFO org.apache.hadoop.ipc.Server (IPC Server handler 11 on 8020): IPC Server handler 11 on 8020, call org.apache.hadoop.hdfs.protocol.ClientProtocol.addBlock from 172.30.2.207:56462 Call#7497 Retry#0 java.io.IOException: File /user/hive/warehouse/bc_kmart_3813.db/dp_internal_temp_full_load_offer_flexibility_20160920/.hive-staging_hive_2016-09-20_11-17-51_558_1222354063413369813-58/_task_tmp.-ext-10000/_tmp.000079_0 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. 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.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.run(Server.java:2049) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2045) 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:1657) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2043)
Als ich diese Ausnahme durchsucht habe. Ich habe diese Seite gefunden - Ссылка
In meinem Cluster gibt es einen Datenknoten mit 32 GB Speicherplatz.
** /etc/hive/conf/hive-default.xml.template - **
%Vor%Fragen -
Update-3 -
Einige Ausnahmen sind vom Typ - LeaseExpiredException -
2016-09-21 08:53:17,995 INFO org.apache.hadoop.ipc.Server (IPC Server handler 13 on 8020): IPC Server handler 13 on 8020, call org.apache.hadoop.hdfs.protocol.ClientProtocol.complete from
172.30.2.189:42958 Call#726 Retry#0: org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException: No lease on /tmp/hive/hadoop/_tez_session_dir/6ebd2d18-f5b9-4176-ab8f-d6c78124b636/.tez/application_1474442135017_0022/recovery/1/summary (inode 20326): File does not exist. Holder DFSClient_NONMAPREDUCE_1375788009_1 does not have any open files.
Ich habe das Problem gelöst. Lassen Sie mich das im Detail erklären.
Ausnahmen, die kommen -
Problemszenario -
Verschiedene Gedanken zur Lösung des Problems -
Zuerst dachte man, dass zwei Threads wegen der NN-Intelligenz am selben Stück arbeiteten. Aber gemäß den folgenden Einstellungen
set mapreduce.map.speculative = false setze mapreduce.reduce.speculative = false
das war nicht möglich.
Dann erhöhe ich die Anzahl von 1000 bis 100000 für die unteren Einstellungen -
SET hive.exec.max.dynamic.partitions = 100000; SET hive.exec.max.dynamic.partitions.pernode = 100000;
das hat auch nicht funktioniert.
Dann war der dritte Gedanke, definitiv in einem selben Prozess, welcher Mapper-1 erstellt wurde, wurde von einem anderen Mapper / Reducer gelöscht. Aber wir haben solche Logs in Hveserver2, Tez Logs nicht gefunden.
Schließlich liegt die Ursache in einem Code für die Anwendungsschicht selbst. In der Version hive-exec-2.1.0 führten sie eine neue Konfigurationseigenschaft ein
"hive.exec.stagingdir": ".hive-staging"
Beschreibung der obigen Eigenschaft -
Verzeichnisname, der innerhalb von Tabellenpositionen erstellt wird, um Unterstützung der HDFS-Verschlüsselung. Dies ersetzt $ {hive.exec.scratchdir} für Abfrageergebnisse mit Ausnahme von schreibgeschützten Tabellen. Auf alle Fälle $ {hive.exec.scratchdir} wird immer noch für andere temporäre Dateien verwendet, z als Arbeitspläne.
Wenn also gleichzeitig Jobs im Application-Layer-Code (ETL) vorhanden sind und Operationen (umbenennen / löschen / verschieben) für dieselbe Tabelle ausgeführt werden, kann dies zu diesem Problem führen.
Und in unserem Fall führen 2 gleichzeitige Jobs "INSERT OVERWRITE" in derselben Tabelle aus, was dazu führt, dass die Metadatendatei von 1 Mapper gelöscht wird, die dieses Problem verursacht.
Auflösung -
Tags und Links mapreduce amazon-web-services hdfs hive apache-tez