Hive Query Execution Error, Rückgabecode 3 von MapredLocalTask

8

Ich erhalte diesen Fehler beim Ausführen einer einfachen Verbindung zwischen zwei Tabellen. Ich führe diese Abfrage in der Hive-Befehlszeile aus. Ich benenne Tabelle als & amp; b. Tabelle a ist eine interne Hive-Tabelle und b ist eine externe Tabelle (in Cassandra). Tabelle a hat nur 1610 Zeilen und Tabelle b hat ~ 8 Millionen Zeilen. Im tatsächlichen Produktionsszenario könnte Tabelle a bis zu 100.000 Zeilen erreichen. Im Folgenden sehen Sie meinen Join mit Tabelle b als letzte Tabelle im Join

  

WÄHLEN Sie a.col1, a.col2, b.col3, b.col4 aus einem Join b on (a.col1 = b.col1 und a.col2 = b.col2);

Im Folgenden sehen Sie den Fehler

  

Insgesamt MapReduce-Jobs = 1   
Ausführungsprotokoll unter: /tmp/pricadmn/.log   
2014-04-09 07:15:36 Starten der lokalen Aufgabe zum Bearbeiten der Map-Verknüpfung; maximaler Speicher = 932184064   
2014-04-09 07:16:41 Zeilen verarbeiten: 200000 Hashtable-Größe: 199999 Speicherauslastung: 197529208 Prozent: 0.212   
2014-04-09 07:17:12 Zeilen verarbeiten: 300000 Hashtable Größe: 299999 Speicherauslastung: 163894528 Prozentsatz: 0.176   
2014-04-09 07:17:43 Zeilen verarbeiten: 400000 Hashtable-Größe: 399999 Speicherauslastung: 347109936 Prozent: 0,372   
...   
...   
...   

2014-04-09 07:24:29 Zeilen verarbeiten: 1600000 Hashtable-Größe: 1599999 Speicherauslastung: 714454400 Prozentsatz: 0,766   
2014-04-09 07:25:03 Zeilen verarbeiten: 1700000 Hashtable Größe: 1699999 Speicherauslastung: 901427928 Prozentsatz: 0.967   
Ausführung mit Exit-Status fehlgeschlagen: 3   
Erhalten von Fehlerinformationen   


Aufgabe fehlgeschlagen!   
Aufgaben-ID:   
Stufe-5   

Protokolle:   

/u/applic/pricadmn/dse-4.0.1/logs/hive/hive.log   
FAILED: Execution Error, Rückgabecode 3 von org.apache.hadoop.hive.ql.exe.mr.MapredLocalTask ​​

Ich verwende DSE 4.0.1. Im Folgenden finden Sie einige meiner Einstellungen, an denen Sie interessiert sein könnten. Maptrd.map.child.java.opts = -Xmx512M
mapred.reduce.child.java.opts = -Xmx512M
mapred.reduce.parallel.copies = 20
hive.auto.convert.join = true

Ich habe mapred.map.child.java.opts auf 1G erhöht, und ich habe einige weitere Datensätze übersprungen und dann Fehler gemacht. Es sieht nicht nach einer guten Lösung aus. Auch ich habe die Reihenfolge im Join geändert aber keine Hilfe. Ich habe diesen Link Hive Map Join: nicht genügend Arbeitsspeicher-Ausnahme gesehen, aber didn Löse mein Problem nicht.

Für mich sieht es so aus, dass Hive versucht, die größere Tabelle während der lokalen Task-Phase in den Speicher zu legen, was ich verwirrt habe. Nach meinem Verständnis sollte die zweite Tabelle (in meinem Fall Tabelle b) hineingestreamt werden. Korrigiere mich, wenn ich falsch liege. Jede Hilfe bei der Lösung dieses Problems wird sehr geschätzt.

    
user3517633 10.04.2014, 02:52
quelle

3 Antworten

25

set hive.auto.convert.join = false;

    
Sahil Nagpal 31.10.2014 09:43
quelle
1

Es scheint, dass Ihre Aufgabe nicht mehr ausreicht. Überprüfen Sie Zeile 324 der MapredLocalTask-Klasse .

%Vor%     
Andrew Weaver 10.04.2014 18:52
quelle
-1

Letzter Join sollte die größte Tabelle sein. Sie können die Reihenfolge der Join-Tabellen ändern.

    
alexliu68 10.04.2014 15:52
quelle