Nach dem Lesen Ссылка möchten wir experimentieren mit mapred.reduce.parallel.copies.
In dem Blog wird erwähnt, dass "die Logs sehr sorgfältig geprüft werden". Woher wissen wir, dass wir den Sweet Spot erreicht haben? Was sollten wir suchen? Wie können wir erkennen, dass wir zu stark parallelisieren?
Um das zu tun, sollten Sie grundsätzlich nach 4 Dingen suchen: CPU, RAM, Disk und Netzwerk. Wenn Ihr Setup die Schwelle dieser Metriken überschreitet, können Sie folgern, dass Sie die Grenzen überschreiten. Wenn Sie beispielsweise den Wert von "mapred.reduce.parallel.copies" auf einen Wert festgelegt haben, der viel höher ist als die Anzahl der verfügbaren Kerne, werden Sie basierend auf dieser Eigenschaft Threads mit zu vielen Threads im Wartezustand enden wird erstellt, um die Kartenausgabe abzurufen. Darüber hinaus könnte das Netzwerk überwältigt werden. Oder, wenn zu viel Zwischenausgangsmaterial gemischt werden muss, wird Ihr Auftrag langsam, da Sie in diesem Fall einen Dish-basierten Shuffle benötigen, der langsamer ist als ein Shuffle auf RAM-Basis. Wählen Sie einen weisen Wert für "mapred.job.shuffle.input.buffer.percent" basierend auf Ihrem Arbeitsspeicher (standardmäßig 70% des Reducer-Heapspeichers, der normalerweise gut ist). Also, das sind ein paar Dinge, die Ihnen sagen, ob Sie über-parallelisieren oder nicht. Es gibt viele andere Dinge, die Sie beachten sollten. Ich würde Ihnen empfehlen, das Kapitel 6 des "Hadoop Definitive Guide" zu lesen.
Einige der Maßnahmen, die Sie treffen können, um Ihre Jobs effizient zu machen, sind wie die Verwendung eines Combiners, um die Datenübertragung zu begrenzen, die Zwischenkomprimierung usw. zu aktivieren.
HTH
P.S: Die Antwort ist nicht sehr spezifisch für "mapred.reduce.parallel.copies". Hier erfahren Sie, wie Sie Ihren Job im Allgemeinen optimieren. Eigentlich wird nur das Einstellen dieser Eigenschaft dir nicht viel helfen. Sie sollten auch andere wichtige Eigenschaften berücksichtigen.
Um den "Sweet Spot" zu erreichen, müssen Sie nur die Parameter finden, die Ihnen das beste Ergebnis für die von Ihnen als wichtig erachtete Metrik liefern, normalerweise die gesamte Arbeitszeit. Um herauszufinden, welche Parameter funktionieren, würde ich vorschlagen, die folgenden Profiling-Tools zu verwenden, mit denen Hadoop kommt, MrBench, TestDFSIO und NNBench. Diese finden Sie im hadoop-mapreduce-client-jobclient - *. Jar.
Wenn Sie diesen Befehl ausführen, sehen Sie eine lange Liste von Benchmark-Programmen, die Sie neben den oben erwähnten verwenden können.
hadoop ./share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient - *. jar
Ich würde vorschlagen, mit den Standardparametern zu laufen, Tests durchzuführen, um Baseline-Benchmarks zu geben, dann einen Parameter zu ändern und erneut zu laufen. Ein bisschen zeitaufwendig, aber es lohnt sich, besonders wenn Sie ein Skript verwenden, um Parameter zu ändern und die Benchmarks auszuführen.
Tags und Links hadoop