Thing's by Actruce

하둡 2.7.3 설치 본문

IT/Hadoop

하둡 2.7.3 설치

Actruce 2017. 12. 3. 22:31

설치환경

    - Windows10 에서 Oracle Virtual Box 가상머신으로 Ubuntu 16.04.1 x64 OS 로 설치
    - Hadoop Release 2.7.3
    - jdk 1.8.0_131

 

설치 가이드

    - 이 포스팅에서 다루는 하둡 설치 가이드는 다음 링크 를 참조했다.

           악명높은 WordCount 예제 실행하기

    - WordCount 예제 실행은 위의 링크의 maven 및 IDEA IntelliJ  를 설치해서 수행한 것과 Hadoop Apache 공식 사이트의 jar 생성방식을 같이 다룬다.

           하둡 아파치 2.7.3 WordCount 예제 Documentation

 

하둡 설치

 

  1. Oracle Virtual Box 에서 Ubuntu 설치하기

    - Virtual Box 를 설치하고 Ubuntu 설치하는 과정은 생활코딩 의 링크에서 확인가능하다.

 

  2. Linux 에서 자바 설치

    - 다음과 같이 sudo 권한으로 java application 을 설치한다. (각자 환경에 따라 다를 수도 있다.)

    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java8-installer
    sudo apt-get install oracle-java8-set-default

    - 설치된 자바 버전을 확인한다.

    java -version

    - 내 머신상에는 다음과 같이 표시된다.

   openjdk version "1.8.0_131"
   OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-0ubuntu1.16.04.2-b11)
   OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

 

   3. Hadoop 2.7.3 배포판 다운로드 및 압축 풀기 및 hduser 계정 생성

    - 먼저, hadoop-2.7.3-tar 파일 다운로드 링크 에서 배포판을 다운로드 받는다.

    - 압축을 해제하고 /usr/local 밑에 hadoop 폴더로 압축 해제한 파일을 옮긴다.

    wget http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
    tar xzvf hadoop-2.7.3.tar.gz
    mv hadoop-2.7.3 /usr/local

    - hduser 계정을 생성한다. Group 은 hadoop 으로 생성한다.

    sudo useradd hduser
    sudo passwd hduser
    sudo usermod -a -G sudo hduser
    sudo groupadd hadoop
    sudo usermod -a -G hadoop hduser

    - /usr/local 에 저장된 hadoop 2.7.3 을 /home/hduser 밑으로 가져온다. 그리고 해당 폴더에 hduser 권한을 부여한다.
      (간혹 /usr/local/ 밑에 놓고 그대로 쓰는데 문제 없다.)

    mv /usr/local/hadoop-2.7.3 /home/hduser/hadoop
    sudo chown -R hduser:hadoop /home/hduser/hadoop

 

   4. Hadoop 환경설정 (Configuration)

    - Hadoop 클러스터는 독립실행 모드(Standalone) / 가상분산 모드(Pseudo-distributed) /완전분산 모드(Fully distributed) 의 3가지 모드로
      구분 되는데, 시작하는데 사용할 환경은 하나의 NameNode 와 DataNode, Secondary NameNode 를 갖는 가상분산 모드이다.

    - 환경설정 작업은 ~/.bashrc 파일의 각종 PATH 설정과 SSH 키의 생성,
      $HADOOP_HOME/etc/hadoop 아래의 core-site.xml , hdfs-site.xml, yar-site.xml, mapred-site.xml 을 수정하는 작업으로 이뤄진다.

 

   4.1 ~/.bashrc 수정

    - 먼저, hduser 로 사용자 변경한 뒤, ~/.bashrc 파일의 환경 설정을 변경한다.
      $JAVA_HOME 및 $HADOOP_HOME 밑 Hadoop 수행에 필요한 Path 를 설정한다.

    sudo su hduser
    sudo vi ~/.bashrc

      해당 파일의 제일 뒤에 다음 내용을 추가한다.

    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-adms64/
    export HADOOP_HOME=/home/hduser/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    export HADOOP_MAPRED_HOME=$HADOOP_HOME
    export HADOOP_COMMON_HOME=$HADOOP_HOME
    export HADOOP_HDFS_HOME=$HADOOP_HOME
    export YARN_HOME=$HADOOP_HOME
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export HADOOP_OPTS=”-Djava.library.path=$HADOOP_HOME/lib”

    ※ JAVA_HOME 은 개인 마다 자바 jdk 가 설치된 폴더를 확인해야 하는데, 구글링을 해 보면, 
    java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home'
    해서 마지막의 jre 만 빼면 된다.

 

  4.2 SSH 생성 및 확인

    - 가상 분산 모드(Pseudo-distributed) 에서 NameNode 와 DataNode 간에 통신에 SSH 를 사용한다. master 노드의 역할을 하는 서버는 NameNode 와 JobTracker 데몬을 제공하게 된다. 또한 모든 slave 노드에 위치한 DataNode 와 TaskTacker 데몬을 실행시킨다. 따라서 master 노드는 클러스터에 위치한 다른 모든 노드들에 접근할 수 있어야 한다.

    - 하둡은 이러한 접근을 위해서 SSH 를 사용한다. 공개 키는 클러스터에 있는 모든 노드에 저장되고 master 노드는 원격의 컴퓨터에 접근할 때 개인키를 보낸다. 우선 SSH 가 노드에 설치되어 있는지 확인해야 한다.

    which ssh
    which ssh-keygen

        만약, ssh 가 없다는 메시지가 나오면 리눅스 패키지를 사용해 추가 설치를 해야 한다. 설치 되어있다고 가정하면, ssh 공개키를 생성한다.

        이때, password 를 입력하지 않는다. (NameNode 에서 DataNode 에 접근 할 때마다 매우 번거롭다.)

    ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
    chmod 0600 ~/.ssh/authorized_keys

        제대로 공개키가 설정되었는지 확인하려면,

    ssh localhost

        만약, 제대로 접속이 되지 않는다면, 설치된 ssh 패키지를 지우고 다시 설치하는 것을 권한다. (이후 하둡 시작시 NameNode 나 DataNode 가 제대로 구동이 안 될 수 있기 때문이다.)

 

  4.3 hadoop $HADOOP_HOME/etc/hadoop 아래의 .xml 파일들 수정하기

    - core-site.xml 파일 수정

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>

    - hdfs-site.xml 파일 수정

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/home/hduser/hadoop/hadoop_store/hdfs/namenode</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/home/hduser/hadoop/hadoop_store/hdfs/datanode</value>
        </property>
    </configuration>

    ※ namenode foler 와 datanode folder 는 개인마다 다를 수 있다.

    - yarn-site.xml 파일 수정

    <configuration>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <property>
            <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
            <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
    </configuration>

    - mapred-site.xml 파일 수정 (mapred-site.xml.template 로 되어 있는데 이름을 변경하여 복사해 둔다.)

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>

 

  4.4 datenode, namenode 폴더 생성

    - xml 설정에서 지정한 datanode, namenode 폴더를 생성한다.

    mkdir -p/home/hduser/hadoop/hadoop_store/hdfs/namenode
    mkdir -p /home/hduser/hadoop/hadoop_store/hdfs/datanode


  5. namenode format 및 service 시작하기.

    - 서비스 최초 실행시 namenode 를 포맷한다. (이후 실행 이후부터는 포맷할 필요없다.)

   hdfs namenode -format

    - 모든 준비가 끝났다! 이제 하둡 서비스를 실행하자. hadoop 2.x 버전부터 Yarn 기반의 MapReduce 작업이므로 1.x 의 start-all.sh 를 사용하지 않는다.

    start-dfs.sh
    start-yarn.sh

    - 정상적으로 실행된다면, 처리단계의 로그가 terminal 에 표시될 것이다. 클러스터 구성요소들이 확인되는지 확인하기 위해

    jps

        수행해 본다. 정상적이라면, 다음과 같은 화면이 출력될 것이다.

    9008 NodeManager
    6242 SecondaryNameNode
    9797 Jps
    5865 NameNode
    8619 ResourceManager
    6028 DataNode

 

※ 만약, jps 수행시 DataNode 가 제대로 수행되지 않았다면 크게 2가지 이유중 하나일 것이다.

      1. 설정 파일이 잘못 작성되었다. (오타, 잘못된 datanode 경로)

      2. 아래와 같이 $HADOOP_HOME/logs 아래 datanode log 를 확인해 보면, 제대로 datanode 의 clusterID 를 가져오지 못한 것을 확인할 수 있는데, 이는 대부분 hadoop service 수행후, namenode reformat 을 한 경우에 namenode 가 보유한 metadata 가 초기화 되어서 생기는 오류이다. 이 경우 hadoop service 를 중지한 후 datanode 경로의 데이터 삭제 후 재 시작 한다. (해당 clusterID 만 namenode 에서 format 할 수도 있다.)

 

2017-06-10 22:33:00,453 WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/home/hduser/hadoop/hadoop_store/hdfs/datanode/
java.io.IOException: Incompatible clusterIDs in /home/hduser/hadoop/hadoop_store/hdfs/datanode: namenode clusterID = CID-11246ae9-eb5b-4a20-9f3e-9d38b9bce9c4; datanode clusterID = CID-210e64b3-ef61-45b7-9ff0-755ca1a4a58b

   - hdfs 를 간단히 테스트 해보는 명령은 다음과 같다.

    hadoop fs -ls

  - 이제 하둡을 정상적으로 실행할 모든 준비가 끝났다. 설치나 설정 중간에 에러 상황이 생길 경우 구글링 등을 통해 적극적으로 해결하자. 앞 단계에서 잘못 설정이 되면 수행하려는 것들이 제대로 실행되지 않을 수 있기 때문이다.

'IT > Hadoop' 카테고리의 다른 글

하둡 소개글  (0) 2017.12.03
하둡 WordCount 예제 실행하기  (0) 2017.12.03
Comments