2016-04-13 5 views
0

Ich habe eine Hive-Tabelle, zu der täglich Daten hinzugefügt werden. Also, rund 5 Dateien werden jeden Tag hinzugefügt. Jetzt hatten wir am Ende 800 Teildateien unter dieser Tabelle.Steuern von Mappern mit Hive-Tabelle mit ungefähr 800 Teildateien

Das Problem, das ich habe, ist Beitritt oder die Verwendung dieser Tabelle überall löst 800 Mapper, da Mapper proportional zur Anzahl der Dateien sind.

Aber ich muss die gesamte Tabelle für meine laufenden Jobs verwenden.

Gibt es eine Möglichkeit, die gesamte Tabelle zu verwenden, aber nicht zu viele Mapper auszulösen?

Dateien aussehen wie unten

-rw-rw-r-- 3 XXXX hdfs  106610 2015-12-15 05:39 /apps/hive/warehouse/prod.db/TABLE1/000000_0_copy_1.deflate 
-rw-rw-r-- 3 XXXX hdfs  106602 2015-12-23 12:31 /apps/hive/warehouse/prod.db/TABLE1/000000_0_copy_10.deflate 
-rw-rw-r-- 3 XXXX hdfs  157686 2016-03-06 05:20 /apps/hive/warehouse/prod.db/TABLE1/000000_0_copy_100.deflate 
-rw-rw-r-- 3 XXXX hdfs  163580 2016-03-07 05:22 /apps/hive/warehouse/prod.db/TABLE1/000000_0_copy_101.deflate 

Antwort

0

ich lieber die Tabelle partitionieren, so dass die Daten in der Partition Verzeichnissen gespeichert werden und wann immer abgefragt werden nur die Dateien unter den Partitionen zugegriffen und so sind die Mapper, dass in den Hive-Abfragen ausgelöst werden, wenn diese Partitionsspalten verwendet werden.

Eine andere Möglichkeit besteht darin, die Tabelle mit der CLUSTER BY-Klausel zu füllen, um die Daten in die feste Nr. von bucketed Verzeichnisse und die Verringerung der Nr. von Verzeichnissen und damit von Dateien, auf die während der Abfrage zugegriffen wird.