2009-10-19 8 views
16

haben eine stochastische Simulation in Java geschrieben, die Daten von einigen CSV-Dateien auf der Festplatte (insgesamt etwa 100 MB) lädt und Ergebnisse in eine andere Ausgabedatei schreibt (nicht viel Daten, nur ein Boolean und ein paar Zahlen). Es gibt auch eine Parameterdatei und für verschiedene Parameter wird erwartet, dass sich die Verteilung der Simulationsausgaben ändert. Um die richtigen/besten Eingabeparameter zu bestimmen, muss ich mehrere Simulationen über mehrere Eingabeparameterkonfigurationen hinweg ausführen und die Verteilungen der Ausgaben in jeder Gruppe betrachten. Jede Simulation dauert je nach Parameter und Zufälligkeit 0,1-10 min.Ist Hadoop richtig zum Ausführen meiner Simulationen?

Ich habe gelesen über Hadoop und frage mich, ob es mir helfen kann, viele Simulationen zu laufen; Ich habe vielleicht in naher Zukunft Zugriff auf ungefähr 8 vernetzte Desktop-Maschinen. Wenn ich richtig verstehe, könnte die Kartenfunktion meine Simulation ausführen und das Ergebnis ausspucken, und der Reduzierer könnte die Identität sein.

Die Sache, um die ich mir Sorgen mache, ist HDFS, das anscheinend für große Dateien gedacht ist, nicht für ein paar kleine CSV-Dateien (von denen keine die empfohlene Mindestblockgröße von 64 MB ausmachen würde). Darüber hinaus benötigt jede Simulation nur eine identische Kopie jeder der CSV-Dateien.

Ist Hadoop das falsche Werkzeug für mich?

Antwort

20

Ich sehe eine Reihe von Antworten hier, die im Grunde sagen, "Nein, Sie sollten Hadoop nicht für Simulationen verwenden, weil es nicht für Simulationen gebaut wurde." Ich glaube, das ist eine eher kurzsichtige Sichtweise und wäre vergleichbar mit jemandem, der 1985 sagt: "Sie können keinen PC für die Textverarbeitung verwenden, PCs sind für Tabellenkalkulationen!"

Hadoop ist ein fantastischer Rahmen für den Aufbau einer Simulationsmaschine. Ich benutze es seit Monaten für diesen Zweck und hatte großen Erfolg mit kleinen Daten/großen Berechnungsproblemen. Hier ist die Top-5 Gründe migriert ich für die Simulation Hadoop (mit R wie meine Sprache für Simulationen, btw):

  1. Zugang: I Hadoop Cluster leasen kann entweder durch Amazon Elastic Map Reduce und ich habe nicht Zeit und Energie in die Verwaltung eines Clusters zu investieren. Dies bedeutete, dass ich tatsächlich mit Simulationen in einem verteilten Framework beginnen konnte, ohne eine administrative Genehmigung in meiner Organisation zu erhalten.
  2. Verwaltung: Hadoop behandelt Jobsteuerungsfragen, wie Knotenausfall, unsichtbar. Ich muss nicht für diese Bedingungen codieren.Wenn ein Knoten ausfällt, stellt Hadoop sicher, dass die für diesen Knoten geplanten Sims auf einem anderen Knoten ausgeführt werden.
  3. Aufrüstbar: Als eher generische Karte reduzieren Sie die Engine mit einem großartigen verteilten Dateisystem, wenn Sie später Probleme mit großen Daten haben. Wenn Sie Hadoop verwenden, müssen Sie nicht zu einer neuen Lösung migrieren. Hadoop bietet Ihnen also eine Simulationsplattform, die auch (fast) kostenlos auf eine große Datenplattform skaliert werden kann!
  4. Unterstützung: Als Open Source und von so vielen Unternehmen verwendet, sind die Anzahl der Ressourcen, sowohl online als auch offline, für Hadoop zahlreich. Viele dieser Ressourcen werden mit der Annahme von "Big Data" geschrieben, aber sie sind immer noch nützlich, um zu lernen, auf eine Karte zu reduzieren.
  5. Portabilität: Ich habe die Analyse auf proprietären Maschinen mit proprietären Tools gebaut, die erhebliche Lernaufwand zu arbeiten. Als ich später den Job wechselte und mich in einer Firma ohne denselben proprietären Stack wiederfand, musste ich eine neue Reihe von Tools und einen neuen Simulationsstack lernen. Nie wieder. Ich habe SAS für R und unser altes Grid-Framework für Hadoop gehandelt. Beide sind Open Source und ich weiß, dass ich in Zukunft bei jedem Job landen kann und sofort Tools zur Hand habe, mit denen ich anfangen kann, in den Arsch zu treten.

Wenn Sie hören mehr über meine Erfahrungen interessiert sind, unter Verwendung von Hadoop mit R, hier ist die video of a presentation I gave at the Chicago Hadoop User Group Mai 2010:

+1

Ich denke, es ist mehr wie, sollten Sie keine Tabellenkalkulation für Datenbanken verwenden. Sicher können Sie * eine Tabelle als Datenbank verwenden, und viele Leute tun das, aber es kann (oder auch nicht) zu Problemen für Sie führen, weil es nicht stimmt zwischen dem, wozu es gedacht war und dem, wofür Sie es verwenden. Das heißt, einige Leute haben keinen Zugang zu Datenbanken, daher ist eine Tabellenkalkulation die beste Option für sie. –

+0

Das ist eine wirklich gute Analogie Emil. Sehr guter Punkt. Aber wenn Hadoop für Simulationen verwendet wird, ist das wirklich so, als würde man Zahlen in einer Datenbank speichern. Man könnte sagen: "Speichern von Zahlenspalten? Das ist ein Tabellenkalkulationsproblem! Tabellenkalkulationen wurden speziell für Zahlen entwickelt!" Aber dann, wenn Sie 1000mm Zahlen haben ... uh oh, es ist ein Datenbankproblem. Aber das Speichern von 1000-mm-Zahlen ist NICHT, wofür Datenbanken gebaut wurden. DBs speichern Text, Blobs, etc. Nur Zahlen speichern ist nicht das, wofür sie verwendet werden sollen! ;) –

+0

Könntest du bitte den Link zu dem Video aktualisieren, wenn es irgendwo noch verfügbar ist? – Stefan

2

Auch wenn Sie MapReduce mit Hadoop verwenden können, scheint es so, als ob Ihre Arbeit besser für einen Grid/Job-Scheduler wie Condor oder Sun Grid Engine geeignet wäre. Hadoop ist eher dafür geeignet, etwas zu tun, bei dem Sie eine einzelne (sehr große) Eingabe verwenden, diese in Blöcke aufteilen, die von Ihren Arbeitsmaschinen verarbeitet werden sollen, und sie dann zu reduzieren, um eine Ausgabe zu erzeugen.

+1

Sie sind richtig, dass Hadoop mit dem „großen Daten“ Problem im Verstand errichtet wurde. Was macht Hadoop für Simulationen ungeeignet? –

0

Da Sie bereits Java verwenden, schlage ich vor, einen Blick auf GridGain werfen, die, denke ich, besonders gut für Ihr Problem geeignet ist.

3

Hadoop kann erstellt werden, um Ihre Simulation durchzuführen, wenn Sie bereits einen Hadoop-Cluster haben, aber es ist nicht das beste Werkzeug für die Art von Anwendung, die Sie beschreiben. Hadoop wurde entwickelt, um die Arbeit an Big Data zu ermöglichen, und Sie haben keine großen Datenmengen - Sie haben große Rechenleistung.

Ich mag Gearman (http://gearman.org/) für diese Art von Sache.

0

Einfach gesagt, obwohl Hadoop Ihr ​​Problem hier lösen könnte, ist es nicht das richtige Werkzeug für Ihren Zweck.

Verwandte Themen