2014-02-19 8 views
8

anwenden Ich habe eine Tabelle test_details mit etwa 4 Millionen Datensätze. 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, werden die Map Reduce-Jobs erfolgreich ausgeführt, aber für mehr Tage schlägt es fehl, JAVA Heap Space Error oder GC Error zu geben.Nicht in der Lage, dynamische Partitionierung für einen großen Datensatz in Hive

Ein vereinfachtes 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;

habe ich versucht, diese Parameter einstellen, so dass Hive meine Arbeit in einer besseren Art und Weise ausführt:

set hive.exec.dynamic.partition.mode=nonstrict; 
set hive.exec.dynamic.partition=true; 
set hive.exec.max.dynamic.partitions.pernode = 10000; 

Gibt es etwas, was ich vermisse, um die INSERT für eine komplette Charge ohne Angabe von th ausführen e Daten speziell?

Antwort

6

Neels,

Hive 12 und unten haben bekannte Skalierbarkeit Probleme mit dynamische Partitionierung, die mit Hive 13. Das Problem angegangen wird, ist, dass Hive zu halten versucht, eine Datei für jede Partition offen damit umgehen schreibt aus, was zu wenig Speicher und Abstürzen führt. Hive 13 sortiert nach Partitionsschlüssel, sodass nur eine Datei gleichzeitig geöffnet sein muss.

Sie haben 3 Optionen wie ich sehe

  1. Ihren Job wechseln nur wenige Partitionen auf einmal einzufügen.
  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 Stamm und verwenden Sie es, um Ihre Daten zu vervollständigen.