Benutzerdefinierte Partitionierer Beispiel
Ich bin versucht zu schreiben, eine neue Hadoop-job für die Eingabe der Daten ist etwas schief. Eine Analogie HIERFÜR wäre die word count Beispiel in Hadoop tutorial, außer, sagen wir ein bestimmtes Wort vorhanden ist, sehr Häufig.
Ich will eine partition-Funktion, wenn diese einer Taste zugeordnet werden, um mehrere Reduzierstücke und die restlichen Tasten entsprechend Ihrer üblichen hash-paritioning. Ist das möglich?
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Glaube nicht, dass in Hadoop der gleichen Taste zugeordnet werden können, mehrere Reduktionen. Aber, die Tasten können partitioniert werden, so dass die Reduzierstücke sind mehr oder weniger gleichmäßig geladen. Für dieses die Eingabe von Daten erfasst werden sollen, und die Schlüssel werden entsprechend partitioniert. Überprüfen Sie die Yahoo Papier für mehr details über die benutzerdefinierte Partitionierer. Die Yahoo Sort code ist in der org.apache.hadoop.Beispiele.terasort Paket.
Können sagen, dass Key Eine hat 10 Zeilen, B hat 20 Zeilen C hat 30 Zeilen und D hat 60 Zeilen in der Eingabe. Dann Tasten A,B,C gesendet werden können, zu Reduzierstück 1 und Taste D können an der Abschwächer 2 stellen Sie die Last auf die Reduzierstücke gleichmäßig verteilt. Partitionieren Sie die Tasten, Eingang Probenahme durchgeführt werden, um zu wissen, wie die Schlüssel verteilt werden.
Hier sind einige weitere Vorschläge, um die Aufgabe abzuschließen schneller.
Angeben Combiner auf die JobConf zu reduzieren die Anzahl der Schlüssel, die geschickt an den reducer. Dies verringert auch den Netzwerkverkehr zwischen dem mapper und den reducer-tasks. Obwohl, es gibt keine Garantie, dass der combiner wird aufgerufen durch das Hadoop-framework.
Auch, da die Daten verzerrt ist (einige Tasten werden wiederholt, wieder und wieder, sagen wir 'tools'), Sie wollen vielleicht erhöhen Sie die Anzahl der Aufgaben reduzieren vervollständigen den Job schneller. Dadurch wird sichergestellt, dass ein reducer ist die Verarbeitung der "Werkzeuge", die anderen Daten werden immer verarbeitet, die von anderen Reduzierstücke parallel.
Wenn Sie teilen Sie Ihre Daten über mehrere Reduzierstücke aus performance-Gründen, dann müssen Sie eine zweite reducer aggregiert werden die Daten in das endgültige ResultSet.
Hadoop hat eine Funktion gebaut, die so etwas macht: die combiner.
Den combiner ist ein "Abschwächer" Art von Funktionalität.
Dadurch wird sichergestellt, dass innerhalb der map-Aufgabe eine teilweise reduzieren kann getan werden, von den Daten und als solche reduziert die Anzahl der Datensätze, die verarbeitet werden müssen später auf.
In der basic-wordcount Beispiel die combiner ist genau das gleiche wie der reducer.
Beachten Sie, dass einige algorithmen, die Sie benötigen eine andere Implementierung für diese beiden.
Ich habe auch ein Projekt, wo ein combiner war nicht möglich, weil der Algorithmus.