50 Stimmen

Einfaches Java Map/Reduce-Framework

Kann mir jemand einen Hinweis auf ein einfaches, quelloffenes Map/Reduce-Framework/API für Java geben? Es scheint nicht zu viel Beweise für eine solche Sache existieren, aber jemand anderes könnte anders wissen.

Das Beste, was ich finden kann, ist natürlich Hadoop MapReduce, aber das erfüllt nicht das Kriterium "einfach". Ich brauche nicht die Möglichkeit, verteilte Aufträge auszuführen, sondern nur etwas, mit dem ich Map/Reduce-ähnliche Aufträge auf einem Multi-Core-Rechner in einer einzigen JVM mit standardmäßiger Gleichzeitigkeit im Stil von Java5 ausführen kann.

Es ist nicht schwer, selbst etwas zu schreiben, aber ich möchte es lieber nicht tun.

5voto

Florian Pilz Punkte 7852

Ich verwende gerne Skandium für Parallelität in Java. Das Framework implementiert bestimmte Muster der Parallelität (nämlich Master-Slave, Map/Reduce, Pipe, Fork und Divide & Conquer) für Multicore-Maschinen mit gemeinsamem Speicher. Diese Technik wird als "algorithmische Skelette" bezeichnet. Die Muster können verschachtelt werden.

Im Einzelnen handelt es sich um Skelette und Muskeln. Die Muskeln erledigen die eigentliche Arbeit (Aufteilen, Zusammenführen, Ausführen und Konditionieren). Skelette stellen die Muster der Parallelität dar, mit Ausnahme von "While", "For" und "If", die bei der Verschachtelung von Mustern nützlich sein können.

Beispiele finden Sie innerhalb des Frameworks. Ich brauchte ein bisschen, um zu verstehen, wie man die Muskeln und Skelette verwendet, aber nachdem ich diese Hürde überwunden hatte, mag ich dieses Framework wirklich :)

3voto

Costi Ciudatu Punkte 35188

Haben Sie schon einen Blick auf GridGain ?

3voto

rethab Punkte 4894

Werfen Sie einen Blick auf die Projekt-Website von Functionals 4 Java: http://f4j.rethab.ch/ Es führt Filter, Map und Reduce in Java-Versionen vor 8 ein.

0voto

skaffman Punkte 389758

Eine MapReduce-API wurde in Version 3.2 von Hazelcast eingeführt (siehe die Abschnitt MapReduce API in den Dokumenten ). Obwohl Hazelcast für den Einsatz in einem verteilten System gedacht ist, funktioniert es auch sehr gut in einem Einzelknoten-Setup und ist ziemlich leichtgewichtig.

0voto

Sie können LeoTask ausprobieren: ein Framework für die parallele Ausführung von Aufgaben und die Aggregation von Ergebnissen

Es ist kostenlos und quelloffen: https://github.com/mleoking/leotask

Hier finden Sie eine kurze Einführung in die API: https://github.com/mleoking/leotask/blob/master/leotask/introduction.pdf?raw=true

Es handelt sich um ein leichtgewichtiges Framework, das auf einem einzigen Computer mit allen verfügbaren CPU-Kernen arbeitet.

Es hat die folgenden Merkmale:

  • Automatische und parallele Erkundung des Parameterraums
  • Flexible und konfigurationsbasierte Ergebnisaggregation
  • Programmiermodell, das sich nur auf die Hauptlogik konzentriert
  • Zuverlässige und automatische Wiederherstellung von Unterbrechungen

und Dienstprogramme:

  • Dynamische und klonbare Netzstrukturen.
  • Integration mit Gnuplot
  • Netzgenerierung nach gängigen Netzmodellen
  • DelimitedReader: ein ausgeklügeltes Leseprogramm, das CSV-Dateien (Comma-separated values) wie eine Datenbank durchsucht
  • Schneller Zufallszahlengenerator auf der Grundlage des Mersenne-Twister-Algorithmus
  • Ein integrierter CurveFitter aus dem ImageJ-Projekt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X