2013-05-23 17 views
5

Sto utilizzando Hadoop 1.0.3 in modalità Pseudo-Distributed. E la mia conf/core-site.xml è impostato come segue:Hadoop: impossibile impostare FileSystem predefinito come HDFS in core-site.xml

<configuration> 
    <property> 
     <name>fs.default.name</name> 
     <value>hdfs://localhost:9000</value> 
    </property> 
    <property> 
    <name>mapred.child.tmp</name> 
    <value>/home/administrator/hadoop/temp</value> 
    </property> 
</configuration> 

Così ho creduto che il mio filesystem di default è impostato su HDFS. Tuttavia, quando si esegue il seguente codice:

Configuration conf = new Configuration(); 
FileSystem fs = FileSystem.get(conf); 

ho pensato che fs dovrebbe essere un esempio DistributedFileSystem. Tuttavia, risulta essere l'istanza LocalFileSystem.

Ma, se corro il seguente codice:

Configuration conf = new Configuration(); 
conf.set("fs.default.name", "hdfs://localhost:9000"); 
FileSystem fs = FileSystem.get(conf); 

Poi posso ottenere un DistributedFileSystem fs.

Il file system predefinito non è impostato su HDFS in core-site.xml? In caso contrario, come dovrei impostarlo?

+0

Come stai correndo/avviando il tuo lavoro? Puoi pubblicare più codice? –

+0

@ChrisWhite Questo è influenzato da come gestisco il mio lavoro? Il file system predefinito non dovrebbe essere impostato su hdf dopo che il mio core-site.xml è stato caricato correttamente? – Denzel

+1

Sì, ma se si avvia l'app con 'java myjar.jar ...' piuttosto che 'hadoop jar myjar.jar ...' il core-site.xml potrebbe non essere sul classpath, e quindi ha vinto ' essere caricato Prova e mostra il valore di 'fs.default.name' nel tuo codice dopo aver creato l'oggetto conf. –

risposta

4

L'ambiente Eclipse non sa dove si trova la directory conf nella directory di installazione di Hadoop per trovare il core-default.xml e core-site.xml a meno che questi file non vengano aggiunti al percorso di classe Eclipse da caricare prima.

Poiché questi non vengono aggiunti nel classpath eclipse, il core-site.xml predefinito verrà caricato dal file jar hadoop - * - core.jar (ad esempio: hadoop-0.20.2-core.jar per la versione 0.20) che ha il sistema locale come file system predefinito e quindi viene visualizzato l'oggetto LocalFileSystem anziché DistributedFileSystem.

Quindi, per aggiungere la directory <HADOOP_INSTALL>/conf di eclissare progetto classpath, goto le proprietà del progetto (progetto -> Proprietà) -> percorso di generazione Java -> scheda Librerie -> Aggiungi cartella classe esterna -> Selezionare la cartella conf da <HADOOP_INSTALL>

Quanto sopra dovrebbe aggiungere il tuo /core-site.xml al classpath eclipse e tutte le tue impostazioni dovrebbero sovrascrivere quelle predefinite.