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
Bitte fügen Sie Fehlerprotokolle und hive Parameter. – leftjoin
bearbeitet, angehängt Beispielprotokoll für TEZ + ORC + 8G RAM – Martin