ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hadoop-2.6.4 + Zookeeper-3.4.8 + Spark-1.6.1 install
    개발노하우/Open.Source 2016. 6. 13. 15:02


    들어가며, 


    본 포스트는 처음 하둡을 접하고 테스트 기반을 위한 설치 과정을 적은 내용입니다. 다소 미흡한 점이나 오류가 있을 수 있습니다.


    또한 현재 이 글을 쓰고 있는 시점에 Hadoop은 2.7.2(25 January, 2016) 까지 나와있는 상태이며,


    Hadoop-2.7.2버전으로 Spark(1.6.1)를 함께 사용하려 했으나, 번번히 실패하였고 포기하여 2.6.4버전으로 설치를 진행하였습니다.

    (혹시 hadoop 2.7.2에 spark 1.6.1을 올리신 분이 계시다면 노하우좀 알려주세요..ㅜㅠ)

    mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.7.2 -Phive -Phive-thriftserver -DskipTests clean install



    목표

    - Hadoop yarn resource manager를 사용하는 Spark를 설치하며, HA[각주:1](High Availability)를 지원하는 구성을 만들자. 이를 위해 Zookeeper(3.4.8)를 사용.


    Software Requirements:

    OS Linux (Cent OS, Ubuntu, RedHat)

    Hadoop hadoop-2.6.4

    Java     Java(TM) SE Runtime Environment (build 1.8.0_91-b14)

    Zookeeper Zookeeper – 3.4.6


    테스트 서버 구성 (총 3대)

    bi-01

    bi-02

    bi-03 


    default settings

    * 각 서버에 호스트명을 설정한다.

    vi /etc/hosts


    192.168.10.11    bi-01

    192.168.10.12    bi-02

    192.168.10.13    bi-03


    * SSH 설정

    hadoop클러스터에서 master와 slave들 간에 통신은 SSH를 이용한다. 따라서 모든 컴퓨터들은 SSH를 설치 해야 하고, master에서 암호없이 slave에 접속하기 위해서 공개 키가 필요하다.

    (이를 제대로 설정하지 않은 경우 하둡을 실행하여 각 서버에 접속할때 마다 패스워드를 물어보는 불상사가 생기게 된다.)


    - 설정 방법은 이미 다른 사이트에서도 설명이 자세히 나와있으니 생략.


    bash shell configuration

    vi ~/.bashrc





    1. 작업 폴더 생성


    $cd ~


    $mkdir HA


    2. Zookeeper 설치


    $cd ~/HA


    $wget http://apache.mirror.cdnetworks.com/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz


    $tar zxf zookeeper-3.4.8.tar.gz


    $ln -s zookeeper-3.4.8 zookeeper


    $cd zookeeper


    $mv conf/zoo_sample.cfg conf/zoo.cfg


    $vi conf/zoo.cfg


    $mkdir data logs


    ------------------------------------------

    (나머지 서버에도 zookeeper 설치)

    scp -r /home/bi/HA/ bi-02:/home/bi/

    scp -r /home/bi/HA/ bi-03:/home/bi/

    ------------------------------------------


    $cd data


    $echo 1 > myid

    (bi-02, bi-03 서버의 zookeeper/data 아래에 myid 값을 각각 2,3) 으로 설정해 준다.



    zookeeper를 설치한 모든 서버에서 아래의 명령어를 실행한다.

    $zkServer.sh start


    $jps로 프로세스 확인 하여 아래의 프로세스가 떠 있는지 확인


    QuorumPeerMain (Running zookeeper Daemon) 



    또한 아래의 명령어로 리더가 누구며 팔로워가 누군지 확인

    $zkServer.sh status


    bi-01

    ZooKeeper JMX enabled by default

    Using config: /home/bi/HA/zookeeper/bin/../conf/zoo.cfg

    Mode: follower

    bi-02

    ZooKeeper JMX enabled by default

    Using config: /home/bi/HA/zookeeper/bin/../conf/zoo.cfg

    Mode: leader

    bi-03

    ZooKeeper JMX enabled by default

    Using config: /home/bi/HA/zookeeper/bin/../conf/zoo.cfg

    Mode: follower


    3. Hadoop 설치


    이 포스트에서는 하둡 기본 바이너리를 다운받아 실행하는 예제이다.

    이를 그대로 실행하였을때 하둡관련 각 서비스를 실행 할 때마다 아래와 같은 경고 메세지를 보게 될 것이다.

    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 


    위 경고 메세지를 해결하기 위해서는 각 플랫폼별 하둡을 수동으로 빌드해주면 된다.


    http://bloodguy.tistory.com/entry/Hadoop-네이티브-라이브러리-빌드-build-native-library 사이트에 친절히 설명이 나와있다.



    $cd ~/HA


    $wget http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-2.6.4/hadoop-2.6.4.tar.gz


    $tar zxf hadoop-2.6.4.tar.gz


    $ln -s hadoop-2.6.4 hadoop



    *하둡은 아래의 파일들을 설정할 것이다. 중요함*


    $cd hadoop

    • core-site.xml
    • hdfs-site.xml
    • mapred-site.xml
    • yarn-site.xml
    • hadoop-env.sh (optional)
    • yarn-env.sh (optional)
    • mapred-env.sh (optional)
    • slaves

    $vi etc/hadoop/core-site.xml

    Hadoop 설치 후 로그파일, 네트워크 튜닝, I/O튜닝, 파일 시스템 튜닝, 압축 등과 같이 기본적인 하부 시스템 설정 맵리듀스에서도 공통으로 사용


    $mkdir -p /home/bi/HA/repository/journal


    $vi etc/hadoop/hdfs-site.xml

    hdfs-site.xml은 네임노드, 보조 네임노드, 데이터 노드 등과 같은 HDFS 데몬을 위한 환경설정 구성한다.

    dfs.namenode.name.dir은 파일의 디렉토리 정보와 파일 정보 등을 저장하는 폴더이다.

    해당 저장위치는 hdfs가 아닌 로컬에 저장을 한다.

    dfs.datanode.name.dir은 하둡 파일 시스템에 저장되는 모든 파일이 저장되는 위치이다.


    $mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml


    $mkdir -p /home/bi/HA/repository/mapred/system /home/bi/HA/repository/mapred/local


    $vi etc/hadoop/mapred-site.xml

    mapred-site.xml은 JobTracker와 Task Track과 같이 맵 리듀스 데몬을 위한 환경설정 파일이다.


    $vi etc/hadoop/yarn-site.xml

    yarn과 관련된 데몬을 설정하는 파일이다.


    $vi etc/hadoop/slaves


    모든 클러스터 노드에서 journal node 실행 (bi-01, bi-02, bi-03)

    $hadoop-daemon.sh start journalnode


    Format Zookeeper file system

    bi-01:$hdfs zkfc -formatZK


    // 설정 초기화 확인을 위해 zookeeper 접속

    bi-01:$zkCli.sh


    // /hadoop-ha 아래에 dfs.nameservices 지정한 nameserviceID 노드가 있으면 성공.

    ls /hadoop-ha

    [hadoop-cluster]


    Format Hadoop namenode

    bi-01:$hdfs namenode -format


    bi-01:$hadoop-daemon.sh start namenode

    bi-02:$hdfs namenode -bootstrapStandby      (Deployment details)


    마스터 노드에서 하둡 재시작

    (/home/bi/HA/hadoop/sbin)

    bi-01:$stop-all.sh

    bi-01:$start-all.sh


    Yarn resource manager HA 구성을 위해서는 리소스 매니저를 수동으로 올려야 함.(why???....)

    bi-02:$yarn-daemon.sh start resourcemanager



    ++ jobHistoryServer 수행

    bi-01:$mr-jobhistory-daemon.sh start historyserver



    yarn manager의 동작 상태 확인.

    $yarn rmadmin -getServiceState rm1

    active

    $yarn rmadmin -getServiceState rm2

    standby


    namenode 동작 상태 확인.

    $hdfs haadmin -getServiceState nn1

    active

    $hdfs haadmin -getServiceState nn2

    standby



    namenode와 yarn resourcemanager의 failover 테스트를 위해 각 active 된 프로세스를 죽인 후

    위 상태확인 명령어를 통해 standby -> active로 변환 됬는지 확인.


    + failover가 안될경우 namenode/yarn resourcemanager 서버간 ssh 통신이 원할하게 되는지(설정해 놓은 호스트명으로 ex : bi-02:$ssh bi-01) 확인 한다.

    + hadoop 의 logs 의 hadoop-bi-zkfc-hostname.log 파일을 확인하여 오류가 발생하는지 체크 한다.




    4.SPARK 설치






    위와 같이 셋팅해 주고 다운로드~~~


    Spark는 마스터 노드에만 설치하면 됨.(bi-01)



    cd ~/HA


    $wget http://apache.mirror.cdnetworks.com/spark/spark-1.6.1/spark-1.6.1.tgz


    $tar zxf /spark-1.6.1.tgz


    $ln -s spark-1.6.1 spark


    $cd spark


    각 설정 파일에 아래의 내용을 추가.


    $mv conf/spark-env.sh.template conf/spark-env.sh


    $vi conf/spark-env.sh


    $mv conf/spark-default.conf.template conf/spark-default.conf


    $vi conf/spar-default.conf


    스파크 테스트(spark-shell)

    $spark-shell --master yarn-client


    실행 후 


    scala> 


    화면이 나올때까지 ERROR 로그가 없어야 정상적으로 뜬것임.



    프로세스 동작 설명

    • Zookeeper는 네임서비스별 active/standby NameNode의 정보를 저장.

    • DFSZKFailoverController는 NameNode를 모니터링 하고 있다가 active NameNode가 죽으면, standby NameNode를 active로 전환시키고 죽은 active NameNode를 클러스터에서 뽑아내고, Zookeeper에 정보를 갱신.

    • JournalNode는 namespace가 변경될 때 발생하는 edit log를 저장함.  최소 3대 이상 홀수로 실행되어야 하며, (N/2)+1 이상의 JournalNode가 살아있어야 정상동작이 보장됨.

    • NameNode(active)는 edit log를 JournalNode에 기록. (active만 기록 가능)

    • NameNode(standby)는 JournalNode에서 edit log를 읽어와 fsImage 갱신.

    • DataNode는 active/standby NameNode 모두에 Block 정보와 HeartBeat 보냄.



    이상 하둡 설치와 관련된 내용을 정리하였습니다.

    오타나 기타 설정 오류로 수행이 되지 않는다면 코멘트 남겨주세요.




    1. 가용성은 시스템 고장 발생 시 얼마나 빠른 시간내에 치료가 되어 다시 정상적으로 서비스할 수 있는 상태인지를 분석하는 척도 입니다. 따라서 HA 구성이란 이러한 가용성을 극대화 시키는 구성을 말하는 것으로서 '클러스터링, 이중화, LAID'는 범의로 보면 HA 를 이루기 위한 방식이라 볼 수 있습니다. 하나의 컴퓨터 시스템이나 네트워크는 전체의 운영을 위해 모두가 사용 가능한 상태로 있어야만 하는 수많은 부품으로 구성되어 있기 때문에 HA를 구성하기 위한 계획은 '백업'이나 '장애극복 처리' 및 '데이터 저장' 및 '엑세스'에 집중되어 있습니다. 저장 장치의 경우 RAID가 그 중 하나의 접근방법이며 SAN 같은 방법을 이용합니다. 고 가용성 전문가들은 만일 어떤 시스템에 HA가 요구된다면 그 시스템의 모든 부분이 잘 설계되고 실제 사용전에 완전하게 시험이 되어야 한다고 강조합니다. [본문으로]
Designed by Tistory.