2010-08-23 14 views
8

Ich erkunde die Optionen zum Ausführen einer Hadoop-Anwendung auf einem lokalen System.Kann Hadoop im Pseudo-Distributed-Betrieb ohne HDFS ausgeführt werden?

Wie bei vielen Anwendungen sollten die ersten Releases in der Lage sein, auf einem einzelnen Knoten zu laufen, solange wir alle verfügbaren CPU-Kerne verwenden können (Ja, dies bezieht sich auf). Die derzeitige Einschränkung ist, dass wir auf unseren Produktionssystemen Java 1.5 haben und daher an Hadoop 0.18.3 als neueste Version gebunden sind (siehe this question). Leider können wir this new feature noch nicht verwenden.

Die erste Option besteht darin, hadoop einfach im pseudoverteilten Modus auszuführen. Im Wesentlichen: Erstelle einen kompletten Hadoop-Cluster mit allem, was auf genau einem Knoten läuft.

Der "Nachteil" dieser Form ist, dass es auch ein vollwertiges HDFS verwendet. Dies bedeutet, dass zur Verarbeitung der Eingangsdaten diese zunächst auf das lokal gespeicherte DFS "hochgeladen" werden müssen. Dies erfordert zusätzliche Transferzeit sowohl der Eingabe- als auch der Ausgabedaten und benötigt zusätzlichen Speicherplatz. Ich möchte beide vermeiden, während wir auf einer einzigen Knotenkonfiguration bleiben.

Also dachte ich: Ist es möglich, die Einstellung "fs.hdfs.impl" zu überschreiben und sie von "org.apache.hadoop.dfs.DistributedFileSystem" in (zum Beispiel) "org.apache.hadoop" zu ändern. fs.LocalFileSystem "?

Wenn dies funktioniert, kann der "lokale" Hadoop-Cluster (der NUR aus einem Knoten bestehen kann) vorhandene Dateien ohne zusätzliche Speicheranforderungen verwenden und schneller starten, da die Dateien nicht hochgeladen werden müssen. Ich würde erwarten, immer noch einen Job- und Aufgaben-Tracker zu haben und vielleicht auch einen Namen, um das Ganze zu kontrollieren.

Hat jemand das schon mal probiert? Kann es funktionieren oder ist diese Idee viel zu weit von der beabsichtigten Verwendung entfernt?

Oder gibt es eine bessere Möglichkeit, den gleichen Effekt zu erzielen: Pseudo-Distributed-Betrieb ohne HDFS?

Vielen Dank für Ihre Einblicke.


EDIT 2:

Dies ist die Config-I für hadoop erstellt 0.18.3 conf/Hadoop-site.xml die von bajafresh4life bereitgestellt Antwort verwenden.

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<!-- Put site-specific property overrides in this file. --> 

<configuration> 
    <property> 
    <name>fs.default.name</name> 
    <value>file:///</value> 
    </property> 

    <property> 
    <name>mapred.job.tracker</name> 
    <value>localhost:33301</value> 
    </property> 

    <property> 
    <name>mapred.job.tracker.http.address</name> 
    <value>localhost:33302</value> 
    <description> 
    The job tracker http server address and port the server will listen on. 
    If the port is 0 then the server will start on a free port. 
    </description> 
    </property> 

    <property> 
    <name>mapred.task.tracker.http.address</name> 
    <value>localhost:33303</value> 
    <description> 
    The task tracker http server address and port. 
    If the port is 0 then the server will start on a free port. 
    </description> 
    </property> 

</configuration> 

Antwort

6

Ja, das ist möglich, obwohl ich 0.19.2 verwende. Ich bin mit 0.18.3 nicht so vertraut, aber ich bin mir ziemlich sicher, dass es keinen Unterschied machen sollte.

nur sicherstellen, dass fs.default.name auf Standard festgelegt ist (die file:/// ist) und mapred.job.tracker eingestellt ist zu zeigen, wo Sie Ihre Jobtracker gehostet wird. Dann starte deine Daemons mit bin/start-mapred.sh. Sie müssen den Namenknoten oder die Datenknoten nicht starten. Jetzt sollten Sie in der Lage sein, Ihre Karten-/Reduzierungsjobs mit bin/hadoop jar ...

auszuführen. Wir haben diese Konfiguration verwendet, um Hadoop über eine kleine Gruppe von Computern mit einer über NFS installierten NetApp-Appliance auszuführen.

+0

Ja, danke. Das funktioniert großartig. Ich werde meine Konfiguration veröffentlichen, nachdem ich weitere Tests durchgeführt habe. –

Verwandte Themen