Warum die Hive_Staging-Datei in AWS EMR fehlt

8

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 -

  1. Welcher Prozess hat diese Datei gelöscht? Für die Hive sollte diese Datei nur dort sein. (Diese Datei wird auch nicht vom Anwendungscode erstellt.)
  2. Wenn ich fehlgeschlagene Abfrage-Nummern von Male ausgeführt habe, passiert es. Warum gibt es mehrdeutiges Verhalten?
  3. Seitdem habe ich die hive-exec, hive-jdbc Version auf 2.1.0 aktualisiert. Es scheint also so, als ob einige Hive-Konfigurationseigenschaften falsch gesetzt sind oder einige Eigenschaften fehlen. Können Sie mir helfen, falsch eingestellte / verpasste Bienenstockeigenschaften zu finden?

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 -

  1. Gemäß den Protokollen wird der Hive-Staging-Ordner im Cluster-Computer erstellt, wie in /var/log/hadoop-hdfs/hadoop-hdfs-datanode-ip-172-30-2-189.log , warum erstellt er dann auch denselben Ordner in s3?

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.

    
devsda 17.09.2016, 12:47
quelle

1 Antwort

2

Ich habe das Problem gelöst. Lassen Sie mich das im Detail erklären.

Ausnahmen, die kommen -

  1. LeaveExpirtedException - von der HDFS-Seite.
  2. FileNotFoundException - von Hive-Seite (wenn Tez-Ausführungsengine DAG ausführt)

Problemszenario -

  1. Wir haben gerade die Hive-Version von 0.13.0 auf 2.1.0 aktualisiert. Und alles funktionierte gut mit der vorherigen Version. Null Laufzeit Ausnahme.

Verschiedene Gedanken zur Lösung des Problems -

  1. 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.

  1. 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.

  1. 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.

  2. 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 -

  1. Verschieben Sie den Speicherort der Metadatendatei in eine externe Tabelle (Tabelle liegt in S3).
  2. Deaktivieren Sie die HDFS-Verschlüsselung (wie unter Beschreibung der Eigenschaft 'stagingdir' beschrieben).
  3. Ändern Sie den Code Ihrer Anwendungsebene, um Probleme mit Nebenläufigkeit zu vermeiden.
devsda 27.09.2016, 04:13
quelle