2012-10-05 7 views
5

Per impostazione predefinita, Hadoop imposta hadoop.tmp.dir nella cartella/tmp. Questo è un problema, perché/tmp viene spazzata via da Linux quando si riavvia, che conduce a questa bella errore dal JobTracker:Quando si esegue Hadoop in modalità pseudo-distribuita, quale directory devo usare per hadoop.tmp.dir?

2012-10-05 07:41:13,618 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 0 time(s).  
...  
2012-10-05 07:41:22,636 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 9 time(s). 
2012-10-05 07:41:22,643 INFO org.apache.hadoop.mapred.JobTracker: problem cleaning system directory: null 
java.net.ConnectException: Call to localhost/127.0.0.1:8020 failed on connection exception: java.net.ConnectException: Connection refused 
    at org.apache.hadoop.ipc.Client.wrapException(Client.java:767)  

L'unico modo che ho trovato per risolvere questo problema è quello di riformattare il nodo del nome, che ricostruisce la cartella/tmp/hadoop-root, che ovviamente viene cancellata di nuovo quando si riavvia.

Così sono andato avanti e ho creato una cartella chiamata/hadoop_temp e ho dato a tutti gli utenti l'accesso in lettura/scrittura. Ho quindi impostare questa proprietà nel mio core-site.xml:

<property> 
      <name>hadoop.tmp.dir</name> 
      <value>file:///hadoop_temp</value> 
</property> 

Quando ho ri-formattato il mio NameNode, Hadoop sembrava felice, dandomi questo messaggio:

12/10/05 07:58:54 INFO common.Storage: Storage directory file:/hadoop_temp/dfs/name has been successfully formatted. 

Tuttavia, quando ho guardato/hadoop_temp, ho notato che la cartella era vuota. E poi, quando ho riavviato Hadoop e controllato il mio registro JobTracker, ho visto questo:

2012-10-05 08:02:41,988 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 0 time(s). 
... 
2012-10-05 08:02:51,010 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 9 time(s). 
2012-10-05 08:02:51,011 INFO org.apache.hadoop.mapred.JobTracker: problem cleaning system directory: null 
java.net.ConnectException: Call to localhost/127.0.0.1:8020 failed on connection exception: java.net.ConnectException: Connection refused 

E quando ho controllato il mio log NameNode, ho visto questo:

2012-10-05 08:00:31,206 INFO org.apache.hadoop.hdfs.server.common.Storage: Storage directory /opt/hadoop/hadoop-0.20.2/file:/hadoop_temp/dfs/name does not exist. 
2012-10-05 08:00:31,212 ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed. 
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /opt/hadoop/hadoop-0.20.2/file:/hadoop_temp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible. 

Quindi, chiaramente non ho configurare qualcosa di giusto. Hadoop si aspetta comunque di vedere i suoi file nella cartella/tmp anche se ho impostato hadoop.tmp.dir su/hadoop_temp in core-site.xml. Che cosa ho fatto di sbagliato? Qual è il valore "giusto" accettato per hadoop.tmp.dir?

Domanda bonus: cosa devo usare per hbase.tmp.dir? Informazioni

Sistema:

Ubuntu 12.04, Apache Hadoop .20.2, hbase .92.1

Grazie per dare un'occhiata!

risposta

3

Grazie a Harsh sulla mailing list Hadoop per avermi aiutato con questo. Per citarlo:

"Nelle versioni basate su 0.20.xo 1.x, non utilizzare un prefisso di file: /// per hadoop.tmp.dir."

Ho estratto il prefisso del file: // e ha funzionato.

0

Anche con HBase 0,94 * si dovrà specificare

<property> <name>hbase.cluster.distributed</name> <value>true</value> </property>

Problemi correlati