Ich habe eine Tabelle test_details
mit etwa 4 Millionen Datensätzen. Unter Verwendung der Daten in dieser Tabelle muss ich eine neue partitionierte Tabelle test_details_par
mit Datensätzen erstellen, die auf visit_date
partitioniert sind. Erstellen der Tabelle ist keine Herausforderung, aber wenn ich zu dem Teil komme, wo ich die Daten mit dynamischen Partitionen einfügen muss, gibt Hive auf, wenn ich versuche, Daten für mehrere Tage einzufügen. Wenn ich es für 2 oder 3 Tage mache, wird der Map Reduce-Job erfolgreich ausgeführt, aber für mehrere Tage gibt es keine JAVA Heap Space Error
oder GC Error
.
Ein vereinfachter Snapshot meiner DDLs ist wie folgt:
CREATE TABLE test_details_par( visit_id INT, visit_date DATE, store_id SMALLINT);
INSERT INTO TABLE test_details_par PARTITION(visit_date) SELECT visit_id, store_id, visit_date FROM test_details DISTRIBUTE BY visit_date;
Ich habe versucht, diese Parameter so einzustellen, dass Hive meinen Job besser ausführt:
%Vor%Gibt es etwas, das ich vermisse, um den INSERT für einen kompletten Stapel auszuführen, ohne die Daten speziell anzugeben?
Neels,
Hive 12 und darunter haben bekannte Skalierbarkeitsprobleme mit dynamischer Partitionierung, die mit Hive 13 behoben werden. Das Problem ist, dass Hive versucht, ein Datei-Handle für jede ausgeschriebene Partition offen zu halten, was zu wenig Speicher führt und stürzt ab. Struktur 13 sortiert nach Partitionsschlüssel, so dass nur eine Datei gleichzeitig geöffnet sein muss.
Sie haben 3 Möglichkeiten, wie ich sehe