Parallele Verarbeitung



  • Hallo,

    ich habe hier eine Datenbank, inder recht viele Datensätze liegen.
    Ein Programm muss mit jedem dieser Datensätze einige Tests durchführen und das Ergebnis irgendwo speichern.

    Da die Tests voneinander unabhängig sind und ich hier einige Rechner zur Verfügung habe, sollte das ganze parallelisiert werden.

    Mein Problem:
    Ich weiß nicht wie ich die Jobs am besten verteile. Ich habe bisher ein wenig Erfahrung mit MPI, aber hier musste ich noch nicht solche Datenmengen verteilen.

    Geht das was ich vorhab mit MPI?

    Und welche Techniken kämen sonst noch in Frage?



  • MPI ist nur dann interessant, wenn du die Tests auf verschiedenen Rechnern laufen laesst, die dann miteinander kommunizieren muessen. Wenn du auf einem einzelnen Rechner arbeitest (der mehrere Cores hat), gehts viel einfacher, etwa mit verschiedenen Threads (du hast nicht erwaehnt welche Sprache du verwendest, also gibts auch keine Empfehlungen) oder OpenMP.



  • Da die Tests voneinander unabhängig sind und ich hier einige Rechner zur Verfügung habe, sollte das ganze parallelisiert werden.

    Es SIND mehrere Rechner. Die Berechnung für einen Datensatz ist auch nicht allzu aufwändig, aber es sind VIELE Datensätze.

    Nochmal von vorne:

    1. Datenbank mit mehreren Millionen Einträgen in einer Tabelle
    2. Algorithmus der zu einer (festen) Eingabe und eineM Datenbankeintrag etwas berechnet
    3. Mehrere Rechner zur Verfügung

    Frage:
    Wie kriege ich die Rechner dazu, sich alle Datensätze zu schnappen, den Algorithmus anzuwenden und das Ergebnis irgendwo (meinetwegen auch in der Datenbank) zu speichern, so dass die Datensätze parallel verarbeitet werden, die Rechner möglichst gleich stark belastet werden und am Schluss alle Datensätze genau einmal bearbeitet wurden?
    Im Grunde muss ein Rechner gar nicht alle Datenbankeinträge kennen, es reicht wenn er "seinen" Teil abfragt und bearbeitet.

    Beispiel:
    Datenbank:
    ID, Zahl
    1, 1
    2, 2
    3, 3

    Funktion(zahl, eingabe):
    quadriere Zahl und addiere eingabe

    Programm wird gestartet mit eingabe = 0, es stehen 3 rechner zur Verfügung.

    Gewünschter Ablauf:
    Rechner 1 bearbeitet 1. Eintrag und schreibt das ergebnis als tupel (id, funktionsauswertung) wieder in eine tabelle.
    Rechner 2 und 3 nehmen sich den 2. bzw 3. Eintrag der tabelle vor.

    Nutzer kann nun die Ergebnisse abfragen.

    Mit welcher Technik kann man so etwas am besten realisieren?
    Und geht das mit MPI?



  • http://de.wikipedia.org/wiki/MapReduce alternativ auch http://hadoop.apache.org/mapreduce/ .

    Hadoop MapReduce is a programming model and software framework for writing applications that rapidly process vast amounts of data in parallel on large clusters of compute nodes.



  • Erwischt ...

    Ich habe bereits eine Hadoop-Implementierung.
    Ich möchte allerdings die Performance mit einem anderen "System" vergleichen.

    Nur weiß ich nicht, was ich da am besten verwende 🙂



  • Du kannst das von google benutzen. Heisst das auch Hadoop?



  • shisha schrieb:

    Erwischt ...

    Ich habe bereits eine Hadoop-Implementierung.
    Ich möchte allerdings die Performance mit einem anderen "System" vergleichen.

    Nur weiß ich nicht, was ich da am besten verwende 🙂

    Was bist du denn für ein Assi? Hast schon eine Implementierung, aber hälst es nicht für nötig das zu erwähnen. Statt dessen lässt du hilfsbereite Menschen ihre Zeit verplembern dir genau diese Lösung vorzuschlagen...



  • Sorry,

    ich war so vertieft in der Suche nach einem anderen System und so in MPI versteift, dass ich schon gar nicht mehr daran gedacht habe, das was ich schon habe zu erwähnen.


Anmelden zum Antworten