Kann die dynamische Partitionierung für einen großen Datensatz in Hive nicht anwenden

8

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 19.02.2014, 09:53
quelle

1 Antwort

6

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

  1. Ändern Sie Ihren Job so, dass nur einige Partitionen gleichzeitig eingefügt werden.
  2. Warten Sie, bis Hive 13 veröffentlicht wird und versuchen Sie es (2-3 Monate warten).
  3. Wenn Sie wissen, bauen Sie Hive aus dem Stamm und verwenden Sie es, um Ihre Daten zu vervollständigen.
Carter Shanklin 20.02.2014, 03:08
quelle

Tags und Links