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ę.
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 –
Proszę wyjaśnić, dlaczego? – larry