Impossible de trouver ou charger la classe principale lorsque vous essayez de formater namenode; hadoop installation sur MAC OS X 10.9.2

Je vais essayer d'obtenir un développement unique nœud de cluster configuré sur mon MAC OS X 10.9.2 avec hadoop. J'ai essayé différents tutoriels en ligne, la plus récente étant cette une. Pour résumer ce que j'ai fait:

1) $ brew install hadoop

De l'installer hadoop 2.2.0 dans /usr/local/Cave/hadoop/2.2.0

2) Configurer Les Variables D'Environnement. Voici ce que la partie pertinente de mon .bash_profile ressemble:

### Java_HOME 
export JAVA_HOME="$(/usr/libexec/java_home)"

### HADOOP Environment variables
export HADOOP_PREFIX="/usr/local/Cellar/hadoop/2.2.0"
export HADOOP_HOME=$HADOOP_PREFIX
export HADOOP_COMMON_HOME=$HADOOP_PREFIX
export HADOOP_CONF_DIR=$HADOOP_PREFIX/libexec/etc/hadoop
export HADOOP_HDFS_HOME=$HADOOP_PREFIX
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX
export HADOOP_YARN_HOME=$HADOOP_PREFIX

export CLASSPATH=$CLASSPATH:.
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/libexec/share/hadoop/common/hadoop-common-2.2.0.jar
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/libexec/share/hadoop/hdfs/hadoop-hdfs-2.2.0.jar

3) Configuré HDFS

<configuration>
  <property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/Cellar/hadoop/2.2.0/hdfs/datanode</value>
<description>Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.</description>
  </property>

  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///usr/local/Cellar/hadoop/2.2.0/hdfs/namenode</value>
    <description>Path on the local filesystem where the NameNode stores the namespace and transaction logs persistently.</description>
  </property>
</configuration>

3) Configuré core-site.xml

<!-- Let Hadoop modules know where the HDFS NameNode is at! -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost/</value>
    <description>NameNode URI</description>
  </property>

4) Configuré yarn-site.xml

<configuration>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>128</value>
<description>Minimum limit of memory to allocate to each container request at the Resource Manager.</description>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
<description>Maximum limit of memory to allocate to each container request at the Resource Manager.</description>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
<description>The minimum allocation for every container request at the RM, in terms of virtual CPU cores. Requests lower than this won't take effect, and the specified value will get allocated the minimum.</description>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>2</value>
<description>The maximum allocation for every container request at the RM, in terms of virtual CPU cores. Requests higher than this won't take effect, and will get capped to this value.     </description>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
<description>Physical memory, in MB, to be made available to running containers</description>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
<description>Number of CPU cores that can be allocated for containers.</description>
</property>
</configuration>

5) Puis j'ai essayé de formater le namenode à l'aide de:

$HADOOP_PREFIX/bin/hdfs namenode -format

Cela me donne l'erreur: Erreur: impossible de trouver ou charger la classe principale de org.apache.hadoop.hdfs.serveur.namenode.NameNode.

J'ai regardé le hdfs code, et la ligne qui passe fondamentalement, ça revient à mettre

$java org.apache.hadoop.hdfs.server.namenode.NameNode.

Donc en pensant que c'était un problème de classpath, j'ai essayé quelques choses

a) ajout de hadoop-common-2.2.0.jar et hadoop-hdfs-2.2.0.jar pour le classpath comme vous pouvez le voir ci-dessus dans mon .bash_profile script

b) l'ajout de la ligne

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

à mon .bash_profile sur la recommandation de ce tutoriel.(Plus tard, j'ai supprimé parce qu'il ne le semble pas aider n'importe quoi)

c) j'ai aussi envisagé d'écrire un script shell qui ajoute chaque pot dans $HADOOP_HOME/libexec/share/hadoop à l' $HADOOP_CLASSPATH, mais cela semble inutile et sujettes à des problèmes à l'avenir.

Aucune idée pourquoi je reçois le message d'Erreur: impossible de trouver ou charger la classe principale de org.apache.hadoop.hdfs.serveur.namenode.NameNode ? Merci à l'avance.

OriginalL'auteur Faiyam Rahman | 2014-04-11