2017-07-03 1 views
0

Wir speichern Zeichenfolge Felder, die in der Länge von kleinen (wenige kB) bis sehr lange (< 400MB) in HIVE-Tabelle variiert. Jetzt sehen wir uns mit dem Problem von OOM konfrontiert, wenn wir Daten von einer Tabelle in eine andere kopieren (ohne Bedingungen oder Joins), was nicht genau das ist, was wir in der Produktion ausführen, aber es ist der einfachste Anwendungsfall, in dem dieses Problem auftritt. So ist die HQL ist im Grunde nur:HIVE sehr langes Feld gibt OOM Heap

INSERT INTO new_table 
SELECT * FROM old_table; 

Container und Java Heap zu 16 GB eingestellt waren, hatten wir versuchen, verschiedene Dateiformate (RC-Datei, ORC), mit und ohne Kompression, verschiedene Motoren (MR, TEZ) usw., aber nichts hilft und wir stoßen immer auf OOM.

Wir sind nicht sicher, was genau dort passiert. Wir haben erwartet, dass der Java-Prozess nur ein paar Mal Speicher der maximalen Länge des einzelnen Datensatzes, der ~ 400 M, aber nicht ganze 16 GB Heap ist.

Können Sie uns etwas geben, auf das wir uns konzentrieren sollten?

Version verwendet: HDP 2.4.2

Musterprotokoll, wenn TEZ + ORC + 8G RAM mit: https://pastebin.com/uza84t6F

+0

Bitte fügen Sie Fehlerprotokolle und hive Parameter. – leftjoin

+0

bearbeitet, angehängt Beispielprotokoll für TEZ + ORC + 8G RAM – Martin

Antwort

0
  1. Try TEXTFILE statt ORC zu verwenden. Das Schreiben einer ORC-Datei erfordert viel mehr Speicher.

  2. Versuchen Sie Parallelität zu erhöhen, fügen Sie weitere Mapper hinzu. Spielen Sie mit diesen Parametern für Tez und versuchen, die Anzahl der Mapper zu erhöhen:

--min und max Split Größe:

set tez.grouping.min-size=16777216; 
set tez.grouping.max-size=1073741824; 

Siehe hier: https://community.hortonworks.com/articles/14309/demystify-tez-tuning-step-by-step.html

+0

Danke. Ich habe das Format der zugrundeliegenden Speicherdateien in sequencefile geändert und es fängt an, wie ein Charme zu arbeiten. Scheint, dass ORC und RCFile nicht für solch einen speziellen Anwendungsfall wie ein sehr langes Stringfeld erstellt werden. – Martin

+0

Das Erstellen von Dateisäulen erfordert mehr Speicher für spezielle Puffer für die Datenverarbeitung. – leftjoin

Verwandte Themen