2010-08-23 18 views
8

Sto esplorando le opzioni per l'esecuzione di un'applicazione hadoop su un sistema locale.È possibile eseguire Hadoop in operazioni Pseudo-Distribuite senza HDFS?

Come con molte applicazioni, le prime versioni dovrebbero essere in grado di essere eseguite su un singolo nodo, purché sia ​​possibile utilizzare tutti i nuclei della CPU disponibili (Sì, questo è correlato a this question). La limitazione attuale è che nei nostri sistemi di produzione abbiamo Java 1.5 e come tale siamo vincolati a Hadoop 0.18.3 come ultima versione (Vedi this question). Quindi, sfortunatamente non possiamo ancora usare this new feature.

La prima opzione è eseguire semplicemente hadoop in modalità pseudo distribuita. In sostanza: crea un cluster hadoop completo con tutto ciò che viene eseguito su esattamente 1 nodo.

Lo "svantaggio" di questo modulo è che utilizza anche un completo HDFS. Ciò significa che per elaborare i dati di input, questo deve prima essere "caricato" sul DFS ... che viene memorizzato localmente. Pertanto, questo richiede un tempo di trasferimento aggiuntivo sia per i dati di input che di output e utilizza ulteriore spazio su disco. Vorrei evitare entrambi mentre restiamo su una configurazione a nodo singolo.

Quindi stavo pensando: è possibile sovrascrivere l'impostazione "fs.hdfs.impl" e cambiarla da "org.apache.hadoop.dfs.DistributedFileSystem" in (ad esempio) "org.apache.hadoop. fs.LocalFileSystem "?

Se funziona, il cluster hadoop "locale" (che può essere costituito SOLO da un nodo) può utilizzare i file esistenti senza requisiti di archiviazione aggiuntivi e può essere avviato più rapidamente perché non è necessario caricare i file. Mi aspetto di avere ancora un job tracker e forse anche un namenode per controllare tutto.

Qualcuno ha provato prima? Può funzionare o è un'idea troppo lontana dall'uso previsto?

Oppure c'è un modo migliore per ottenere lo stesso effetto: operazione Pseudo-Distributed senza HDFS?

Grazie per i vostri approfondimenti.


EDIT 2:

Questa è la configurazione che ho creato per Hadoop 0.18.3 conf/Hadoop-site.xml con la risposta fornita da bajafresh4life.

<?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> 

risposta

6

Sì, questo è possibile, anche se sto usando 0.19.2. Non ho molta familiarità con 0.18.3, ma sono abbastanza sicuro che non dovrebbe fare la differenza.

basta assicurarsi che fs.default.name è impostato di default (che è file:///), e mapred.job.tracker è impostato per puntare al punto in cui è ospitato il tuo JobTracker. Quindi avvia i demoni usando bin/start-mapred.sh. Non è necessario avviare il namenode o i datanode. A questo punto dovresti essere in grado di eseguire la mappa/ridurre i lavori utilizzando bin/hadoop jar ...

Abbiamo usato questa configurazione per eseguire Hadoop su un piccolo cluster di macchine utilizzando un'appliance Netapp montata su NFS.

+0

Sì, grazie. Funziona alla grande. Pubblicherò la mia configurazione dopo aver effettuato ulteriori test. –

Problemi correlati