2012-11-19 14 views
6

ich für eine Disk-intensive Hadoop Anwendung gesucht, die E/A-Aktivität in Hadoop zu testen, aber ich konnte keine solche Anwendung finden, die über die Datenträgerauslastung gehalten, etwa 50% oder einig eine solche Anwendung, die tatsächlich die Festplatte beschäftigt hält. Ich habe versucht Randomwriter, aber das ist überraschend nicht Festplatte I/O intensiv.in eine Datei in HDFS in Hadoop Schreiben

Also schrieb ich ein kleines Programm, eine Datei in Mapper zu erstellen und einen Text hinein zu schreiben. Diese Anwendung funktioniert gut, aber die Verwendung ist nur im Master-Knoten hoch, der auch Name-Knoten, Job-Tracker und einer der Slaves ist. Die Plattenauslastung ist in den anderen Task-Trackern NIL oder vernachlässigbar. Ich kann nicht verstehen, warum Festplatten-I/O in Task-Tracker so niedrig ist. Könnte jemand bitte mich in die richtige Richtung stoßen, wenn ich etwas falsch mache? Danke im Voraus.

Hier ist mein Beispielcode-Segment, das ich in WordCount.java Datei geschrieben UTF String in ein File-

Configuration conf = new Configuration(); 
FileSystem fs = FileSystem.get(conf); 
Path outFile; 
while (itr.hasMoreTokens()) { 
    word.set(itr.nextToken()); 
    context.write(word, one); 
    outFile = new Path("./dummy"+ context.getTaskAttemptID()); 
    FSDataOutputStream out = fs.create(outFile); 

    out.writeUTF("helloworld"); 
    out.close(); 
    fs.delete(outFile); 
    } 
+0

Für E/A-Benchmarking können Sie auch TestDFSIO ansehen: http://answers.oreilly.com/topic/460-how-to-benchmark-a-hadoop-cluster/ –

+0

@LorandBendig Ich tat, die Die höchste Festplattenauslastung für TestDFSIO, die ich für meinen Cluster mit 14 Knoten gefunden habe, beträgt nur 2,4% und der Durchschnitt beträgt etwa 0,07%. Ich vermasse die Festplattenauslastung mit dem Befehl _iostat_, der Job lief ungefähr 300 Sekunden lang. Gibt es etwas wirklich Dummes, das ich mache und nicht weiß? –

+0

Sie können mit den Parametern spielen (Anzahl der Dateien, Größe), aber ich denke, Sie haben es bereits getan. Es gibt noch weitere Tests, die Sie versuchen können, ist hier sehr gut beschrieben: http://www.michael-noll.com/blog/2011/04/09/benchmarking-and-stress-testing-an-hadoop-cluster-with-terasort -testdfsio-nnbench-mrbench/ –

Antwort

0

OK. Ich muss wirklich dumm gewesen sein, dass ich vorher nicht nachgesehen habe. Das eigentliche Problem war, dass alle meine Datenknoten nicht wirklich liefen. Ich habe die Namen-Nummer umformatiert und alles fiel wieder an den richtigen Platz, ich bekam eine Auslastung von 15-20%, was nicht schlecht für WC ist. Ich werde es für den TestDFSIO laufen lassen und sehen, ob ich den Datenträger noch mehr nutzen könnte.

1

Ich denke, dass jeder Mechanismus, der in jeder Zeile Java-Objekte pro Zelle erzeugt, zu erstellen und schreiben und führen Sie jede tun Serialisierung der Java-Objekte vor dem Speichern auf der Festplatte hat wenig Chance, IO zu verwenden.
Nach meiner Erfahrung Serialisierung ist in Geschwindigkeit von mehreren MBs pro Sekunde oder ein bisschen mehr, aber nicht 100 MB pro Sekunde arbeiten.
Also, was Sie hadoop Schichten auf dem Ausgangspfad zu vermeiden tat, ist ganz richtig. Jetzt betrachten wir, wie das Schreiben in HDFS funktioniert. Die Daten werden abhängig von Ihrem Replikationsfaktor über lokalen Datenknoten und dann synchron mit anderen Knoten im Netzwerk auf die lokale Festplatte geschrieben. In diesem Fall können Sie nicht mehr Daten in HDFS als Ihre Netzwerkbandbreite schreiben. Wenn Ihr Cluster relativ klein ist, werden die Dinge wert. Für 3-Knoten-Cluster und Triple-Replikation werden Sie alle Daten an alle Knoten übertragen, so dass die HDFS-Bandbreite des gesamten Clusters etwa 1 GBit beträgt - wenn Sie ein solches Netzwerk haben.
Also, ich würde vorschlagen, zu:
a) Replikationsfaktor auf 1 zu reduzieren und damit durch das Netzwerk ist gebunden zu stoppen.
b) Schreiben Sie größere Teile von Daten in einem Anruf zum Mapper

+0

Ich habe den Replikationsfaktor auf 1 geändert und die Blockgröße auf 1 KB bzw. 1 MB geändert. Meine Beobachtungen sind, dass die Map-Reduce sehr langsam abläuft und der IO nur im Master-Knoten wieder hoch ist. Ich habe auch versucht, einmal im Mapper zu schreiben, anders als im obigen Code, wo ich in die Datei schreibe, wenn jedes Wort gefunden wird. Trotzdem blieb das Verhalten gleich. –

+0

Wie viele Mapper laufen gleichzeitig? und was ist Band-Bandbreite pro Knoten, den Sie beobachten? –

+0

Starte Kartenaufgaben = 3, Starte reduziere Aufgaben = 1, mapred.tasktracker.map.tasks.maximum = 2, mapred.tasktracker.reduce.tasks.maximum = 2. Die Festplattenauslastung auf 3 Knoten ist fast 0 und auf dem Master-Knoten ist es 100%. –

Verwandte Themen