2014-04-11 12 views
8

Próbuję uzyskać konfigurację klastra dla jednego węzła programistycznego na moim Mac OS X 10.9.2 z hadoop. Próbowałem różnych samouczków online, z których najnowszym jest this one. Podsumowując to, co zrobiłem:Nie można znaleźć lub wczytać głównej klasy podczas próby sformatowania polecenia namenode; Instalacja Miaoop na MAC OS X 10.9.2

1) $ brew install hadoop 

zainstalowanej Hadoop 2.2.0 w /usr/local/Cellar/hadoop/2.2.0

2) skonfigurowane zmiennych środowiskowych. Oto, co dana część mojego bash_profile wygląda następująco:

### 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) skonfigurowany 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) ukształtowany rdzeń 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) skonfigurowanego 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) Następnie próbowałem formatować namenode używając:

$HADOOP_PREFIX/bin/hdfs namenode -format 

To daje mi błąd: Błąd: Nie można odnaleźć lub załadować głównej klasy org.apache.hadoop.hdfs.server.namenode.NameNode.

patrzyłem na kod HDFS, a linia, która biegnie w zasadzie wynosi nazywając

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

więc myślałem, że to był problem classpath, próbowałem kilka rzeczy

a) dodanie hadoop- common-2.2.0.jar i Hadoop-HDFS-2.2.0.jar do ścieżki klasy jak widać powyżej w moim .bash_profile skryptu

b) dodanie linii

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

do mojego bash_profile na zalecenie this tutorial. (I później usunięto go, ponieważ nie wydaje się, aby pomóc coś)

c) ja też rozważyć napisanie skrypt, który dodaje każdy słoik $ HADOOP_HOME/libexec/share/hadoop do $ HADOOP_CLASSPATH, ale wydawało się to niepotrzebne i podatne na przyszłe problemy.

Każdy pomysł, dlaczego ciągle pojawia się błąd: Nie można znaleźć lub załadować głównej klasy org.apache.hadoop.hdfs.server.namenode.NameNode? Z góry dziękuję.

Odpowiedz

0

Spróbuj $HADOOP_PREFIX/bin/hadoop namenode -format zamiast $ HADOOP_PREFIX/bin/HDFS namenode -format

+0

Odpowiedzią jest: DEPRECATED: użycie tego skryptu do wykonania HDFS komenda jest nieaktualna. Zamiast tego użyj polecenia hdfs. Błąd: Nie można znaleźć lub wczytać głównej klasy org.apache.hadoop.hdfs.server.namenode.NameNode –

+0

Proszę wyjaśnić, dlaczego? – larry

9

Ze względu na sposób, w jaki pakiet napar jest określone, należy wskazać HADOOP_PREFIX do libexec folderu w opakowaniu:

export HADOOP_PREFIX="/usr/local/Cellar/hadoop/2.2.0/libexec" 

Będziesz wtedy wyjąć libexec z deklaracją katalogu conf:

export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop 
4

miałem ten sam problem, że to z powodu praw „root”. Run hadoop lub hdfs komenda z sudo jak poprzednio:

sudo hdfs namenode -format 
Powiązane problemy