2017-03-16 6 views
1

Ich habe eine Datei mit der Größe 39MB, ich habe die Blockgröße als 36MB festgelegt. Wenn die Datei in HDFS hochgeladen wird, speichert sie die Datei erfolgreich in zwei Blöcken. Nun, wenn ich eine Karte-Reduce Job (einfache Lese Job) auf diese Datei ausgeführt, zeigen die Job-Zähler: „INFO mapreduce.JobSubmitter: Anzahl der Teilungen: 1Erstellen von Eingangsaufteilungen (HADOOP)

Das heißt, es wird unter Berücksichtigung der 2 Blöcke als einzelne Split, so sah ich mich um und die Formel für die Berechnung des Spaltgröße gefunden, die wie folgt ist: Größe

Split = max (MinSize, min (maxsize, blocksize))

wo minsize = mapreduce.input.fileinputformat.split.minsize und maxsize = minsize = mapreduce.input.fileinputformat.split.maxsize.

Jetzt in meinem MR-Code stelle ich die folgenden Eigenschaften:

Configuration conf = new Configuration() 
conf.set("mapreduce.input.fileinputformat.split.minsize","1") 
conf.set("mapreduce.input.fileinputformat.split.maxsize","134217728") 

Das minsize = 1 Byte und maxsize = 128 MB, also nach der Formel sollte die Spaltgröße 36 MB sein und somit zwei Splits sollten da sein, aber ich bin immer die gleiche Zählerausgang noch wie:

INFO mapreduce.JobSubmitter: Anzahl der Teilungen: 1

Kann mir jemand erklären, warum?

+0

Welche Art von Datei ist das? –

+0

Es ist eine CSV-Datei @BinaryNerd – User9523

Antwort

1

Die letzte Teilung einer Datei kann um 10% überlaufen. Dies wird als SPLIT_SLOP bezeichnet und ist auf 1.1 eingestellt.

In diesem Szenario

39MB (Remaining Bytes)/36MB (Input Split Size) = 1.08 is less than 1.1 (SPLIT_SLOP) 

Somit wird die gesamte Datei als eine Spaltung betrachtet.

Snippet wie Splits unterteilt sind,

long bytesRemaining = FileSize; 
while (((double) bytesRemaining)/splitSize > SPLIT_SLOP) { 
    String[][] splitHosts = getSplitHostsAndCachedHosts(blkLocations,length-bytesRemaining, splitSize, clusterMap); 
    splits.add(makeSplit(path, length-bytesRemaining, splitSize,splitHosts[0], splitHosts[1])); 
    bytesRemaining -= splitSize; 
} 

Siehe getSplits() Methode zu wissen, wie Splits für jede Datei aufgeteilt sind.

+0

Dies (Verbleibende Bytes) ist die Gesamtdateigröße? – User9523

+1

Da in diesem Fall die Dateigröße klein ist, sieht es so aus, als ob die gesamte Datei als verbleibende Bytes eingeht. Zum Beispiel: wenn die Fils-Größe 75 MB ist, dann haben Sie 2 Splits. Der erste Split wird '36MB' sein und der zweite Split wird' 39MB' sein. Die verbleibenden Bytes ändern sich für jeden Split-Bereich. Siehe aktualisierte Antwort – franklinsijo

+0

Können wir den Wert von SPLIT_SLOP überschreiben? Am wichtigsten, sollten wir diesen Wert überschreiben? – User9523