2017-05-08 5 views
1

Ich versuche, 20k-Dateien in eine HBase-Tabelle zu laden. Die durchschnittliche Dateigröße beträgt 400 KB. Einige der Dateien sind jedoch so groß wie 70 MB. Die Gesamtgröße aller Dateien zusammen ist 11 GB. Der Ansatz ist Standard und gibt Schlüsselwertpaare nach einem Aufruf von loadIncremenalFiles aus. Wenn ich den Code für eine zufällige Stichprobe von 10 Dateien ausführen, funktioniert alles. Ich stellte fest, dass die Größe der generierten hfiles das 1,3-fache der Größe der Dateien selbst betrug. Wenn ich jedoch den gleichen Code für alle 20k-Dateien ausführen, bekomme ich hfiles, die zusammen 400GB groß sind. 36 mal so groß wie die Daten selbst. HFiles enthalten Indizes und Metadaten zusätzlich zu den Tabellendaten, aber was kann solch eine dramatische Größenzunahme erklären?Seltsames Verhalten in HBase-Massenlast

Antwort

1

Ich entdeckte den Grund hinter dem dramatischen Anstieg des Weltraums.

Dies ist, was meine Mapper aussendende Schlüsselwertpaare aussahen (Eingabe war eine Sequenzdatei).

public void map(Text key, BytesWritable value, Context context) 
.... 
byte[] row = Bytes.toBytes(rowID); 
hKey.set(row); 
kv=getKV(familyRaw, Bytes.toBytes("content"), value.getBytes()); 

Das Problem ist in dem Aufruf value.getBytes(). Es gibt ein Byte-Array zurück, das mit Nullen aufgefüllt ist. Ändern Sie es zu value.copyBytes() das Verhalten behoben.

Dies wird in HADOOP-6298

diskutiert