복붙노트

[HADOOP] namenode를 포맷하려고 할 때 주 클래스를 찾거나로드 할 수 없습니다. MAC OS X 10.9.2에 설치된 hadoop

HADOOP

namenode를 포맷하려고 할 때 주 클래스를 찾거나로드 할 수 없습니다. MAC OS X 10.9.2에 설치된 hadoop

hadoop을 사용하여 MAC OS X 10.9.2에서 개발 한 단일 노드 클러스터 설정을 얻으려고합니다. 가장 최근의 온라인 자습서를 다양한 온라인 자습서를 사용해 보았습니다. 내가 한 일을 요약하면 다음과 같다.

1) $ brew install hadoop

/usr/local/Cellar/hadoop/2.2.0에 설치된 hadoop 2.2.0

2) 구성된 환경 변수. 내 .bash_profile의 관련 부분은 다음과 같습니다.

### 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) 구성된 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) 구성된 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) 구성된 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) 다음을 사용하여 namenode를 포맷하려고했습니다 :

$HADOOP_PREFIX/bin/hdfs namenode -format

이것은 나에게 오류를 준다 : Error : 메인 클래스 org.apache.hadoop.hdfs.server.namenode.NameNode를 찾거나로드 할 수 없다.

hdfs 코드를 살펴 보았습니다.이 코드는 기본적으로 hdfs 코드를 호출합니다.

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

그래서 이것이 classpath 문제라고 생각해서, 나는 몇 가지 것을 시도했다.

a) hadoop-common-2.2.0.jar와 hadoop-hdfs-2.2.0.jar를 classpath에 추가한다. 위에서 보았던 것처럼 .bash_profile 스크립트에서 볼 수있다.

b) 라인을 추가한다.

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

이 튜토리얼의 추천에 따라 .bash_profile에 추가했다. (나중에 도움이되지 않았기 때문에 나중에 제거했다.)

c) $ HADOOP_HOME / libexec / share / hadoop에있는 모든 jar를 $ HADOOP_CLASSPATH에 추가하는 쉘 스크립트를 작성하는 것도 고려했습니다. 그러나 이것은 불필요하고 미래의 문제를 일으키는 것처럼 보입니다.

왜 계속 오류가 발생하는지 알기 : 주 클래스 org.apache.hadoop.hdfs.server.namenode.NameNode를 찾거나로드 할 수 없습니다. 미리 감사드립니다.

해결법

  1. ==============================

    1.BREW 패키지가 배치되는 방식으로 인해 HADOOP_PREFIX가 패키지의 libexec 폴더를 가리 키도록해야합니다.

    BREW 패키지가 배치되는 방식으로 인해 HADOOP_PREFIX가 패키지의 libexec 폴더를 가리 키도록해야합니다.

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

    그런 다음 conf 디렉토리 선언에서 libexec을 제거합니다.

    export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
    
  2. ==============================

    2.나는 같은 문제가 있었다. 그것은 권리 "뿌리"때문이었다. 이전과 같이 sudo 명령으로 hadoop 또는 hdfs 명령을 실행하십시오.

    나는 같은 문제가 있었다. 그것은 권리 "뿌리"때문이었다. 이전과 같이 sudo 명령으로 hadoop 또는 hdfs 명령을 실행하십시오.

    sudo hdfs namenode -format
    
  3. ==============================

    3.$ HADOOP_PREFIX / bin / hadoop namenode -format 대신 $ HADOOP_PREFIX / bin / hdfs namenode -format을 사용하십시오.

    $ HADOOP_PREFIX / bin / hadoop namenode -format 대신 $ HADOOP_PREFIX / bin / hdfs namenode -format을 사용하십시오.

  4. from https://stackoverflow.com/questions/23017937/could-not-find-or-load-main-class-when-trying-to-format-namenode-hadoop-install by cc-by-sa and MIT license