본문으로 바로가기



오늘은 지난 블로깅에 이어 Ambari로 빅데이터 플랫폼을 구축하는 것을 공유할까 한다.

Ambari에 대한 설치는 이전 블로깅을 확인바란다.

▶http://datacookbook.co.kr/32


그럼 이제 Ambari를 통해 설치해보자


[들어가기 전에]

만약 전체 진행 중에

Ambari 설치후 최초 hostname 등록까지는 진행되나 confirm hosts에서 filed되는 등의 오류가 나올 경우

http://datacookbook.kr/46

글을 참고하기 바란다.



| SSH key 복사

Ambari 설치 전에 대상 서버에 SSH key를 복사해 놔야 한다.

SSH 가 필요한 이유는 각 서버끼리 ssh 통신으로 모두 접근이 되어야 하는데 이때 Password를 생략하고 접근 할 수 있도록 해야 하기 때문이다.

SSH에 대한 Key 생성은 Ambari가 설치되어 있는 서버에서 생성후 전 서버에 배포하면 된다.

SSH Key 생성 및 배포 방법은 다음과 같다.

   1) ssh-keygen (이후는 모두 엔터)

      

   2) cd ~/.ssh 

   3) cat id_rsa.pub >> authorized_keys

   4) chmod 700 ~/.ssh

   5) chmod 600 ~/.ssh/authorized_keys

   6) 전체 서버에 ssk-key 복사

      ssh-copy-id root@ubuntu-02

      ssh-copy-id root@ubuntu-03

      root는 계정명이고 뒤 부분이 배포 하려는 서버명이다.

   7) ssh 접근 테스트

      ssh ubuntu-02

      ssh ubuntu-03 

      각 서버에 접근시 password를 물어보지 않고 바로 접근 된다면 성공이다.



| Ambari로 플랫폼 구축

1. Ambari에 로그인 한다. (admin / admin)


2. Launch Install Wizard를 선택한다

    


3. cluster 이름을 부여하고 nexf를 선택한다.

    

   

4. 설치하고자 하는 버전을 선택한다. 필자는 현재 가장 최신 버전은 HDP-2.5를 선택했다.

   Repository는 Public을 할 것인지 Local을 할것인지 선택하라고 나와 있는데 참고로 폐쇄망에서는 외부 Repository로의 접근이 안되기 때문에 

   내부 repository서버를 구축하고 해당 위치로 설치 버전을 다운 받아와야 한다.  본 블로깅은 Public을 활용하는 것으로 한다.

   Local Repository에 대한 설치 과정은 HDP 설치 가이드에 잘 나와 있다.

    


5. Target Host명을 이력한다. 여기서의 Harget Host는 플랫폼을 설치하려는 대상 서버를 모두 넣어주면 되는데 필자의 환경에서는 ubuntu-01,ubuntu-02,ubuntu-03 이다

   만약 대상 호스트가 많다면 Pattern Expression으로 몇 줄로 수백대를 지정할 수 도 있다.

    


6. SSH Private Key를 복사 붙여 넣기 한다.

   cat ~/.ssh/id_rsa 후 출력된 내용을 복사 붙여 넣기 한다.

    

    


7. Confirm host를 통해 정상적으로 서버들이 등록되었는지 확인한다.

   만약 Failed가 되었다면 원인이 뭔지 확인해서 retry 하면 된다. 모두 Success가 뜬 것을 확인하고 Next로 넘어간다.

    


8. Choose Service에서 설치하려는 서비스를 선택한다. 

   여기서 선택하지 않았다 하더라도 나중에 추가로 얼마든지 설치가 가능하다. 

   필자는 현재 필요로 하는 것만 선택했다.

    


9. Assign Masters 에서 어느 서버에 어떤 서비스를 추가할지 선택한다. 

   여기서는 Master 성격의 서비스만 선택이 가능하다.

   3대로만 한 상황이기 때문에 너무 한 쪽 서버에 많은 서비스가 몰리지 않도록 조정해 주는것도 필요하다.

    


10. Slave와 Clients를 할당한다.

     Master를 이전 단계에서 선택했다면 여기는 Slave 또는 Client 성격의 서비스를 선택할 수 있다.

    


11. 각 서비스에 대한 설정을 추가해야 하는데 빨간색으로 표시된 부분들이 현재 설정이 아직 끝나지 않았다는 표시다.

     Alert이 떠 있는 서비스를 눌러 필요한 설정을 추가해준다.

     각 서비스 별로 요구하는 것들이 다양한데 실제 warning 등이 많이 뜨기 때문에 꼼꼼하게 확인해서 설정해야 한다.

     참고로 hive 의 meta store를 기존에 설치되어 있는 mysql로 할 경우 

        1) ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar  명령어로 jdbc connector 위치를 알려줘야하고

        2) database를 미리 생성해야 한다.  

     이 두 가지 이외의 오류도 Test Connection으로 확인할 수 있으니 설치 Fail 이 될 경우 원인을 확인해서 조치 해야한다.

    


12. Review를 확인한다.

    


13. Install, Start and Test를 진행한다.

    실제 전체 서버에 설치가 진행되기 때문에 시간이 올래 걸린다.

    


    만약 다음과 같이 오류가 나온다면 원인을 확인해서 조치후에 retry 한다. 

    사실 원인들은 너무 다양하다 때로는 다운로드 시간이 오래 걸려 timeout이 나오는 경우도 있다.

    timeout은 네트워크 원인일 수 있으니 일부는 그냥 다시 시도해서 넘어가는 경우도 있다. ;; 

    


    설치가 완료되었다고 하더라도 아래와 같이 warning이 뜨는 경우가 있는데 일부 서비스가 start 되지 않았을 뿐 설치는 정상이다.

    

    


14. 최종 설치 완료 확인

    최종적으로 설치가 완료되면 다음과 같이 서비스가 어떻게 기동되어 있는지 모니터링 화면을 제공한다.

    


| 정리

  지금까지 Ambari를 통해 빅데이터 플랫폼을 설치하는 과정을 해봤다. 

  과정이 많이 간소화 된 것은 맞지만 워낙에 서비스가 많아서 한번에 설치되는 경우가 생각보다 많지는 않다.

  하나하나 원인을 확인해 해결하는 모든 과정이 개인의 Know-how 이기 때문에 많은 경험을 해보는 것이 중요하겠다.

  필자의 경우도 하둡을 수년간 운영했었는데, Ambari가 있다고 해서 모든 장애상황이 판단되는 것은 아니다. 

  오픈소스인 만큼 수시로 모니터링 하고 bug report를 확인해 조치하는 노력들이 필요하다.





댓글을 달아 주세요

  1. saicham 2017.09.02 00:00

    따라하기 중 궁금한 사항이 있어 문의합니다.
    ssh 패스워드 입력없이 목적지서버 연결하는 부분에서요.
    출발지에 user1,user2가 있고 목적지에 user1,user2가 있다면 ssh 암호입력없이 접속 하는것을
    각각 만들어 줄 수 있나요?
    기존에 출발지 root계정에 ssh-copy-id를 해서 암호입력없이 목적지서버 접속이 되는데
    출발지에 ubuntu1601 사용자계정이 있어서 그 계정에서 ssh-keygen를 하고 공개키를 목적지에 ssh-copy-id를
    하는데 패스워드를 3회 물어보고 접속 deny가 되서요 ^^

  2. BlogIcon 쿡북 쿡북 2017.09.02 00:50 신고

    각 계정별로 접근을 말씀 하시는건가요?? 잘 이해한건지 모르겠네요. 만약 그렇다면 각각 만들수 있습니다. 원래는 계정별로 접근 지정 되도록 되어 있습니다. 지정하지 않으면 명령어 친 계정을 자동으로 지정합니다. 제가 pc를 쓸 환경이 아니라 정확하게 예시를 적어드리지 못하겠네요^^; 참고로 authorized 파일이 꼬이면 수작업으로 해당 계정 부분 지우고 하셔야 할거예요. 근데 각 계정별로 하셔야 할 이유가 따로 있으신가요? 참고로 운영 서버에서는 보안상 ssh 직접 접속을 권장하지는 않습니다.

  3. saicham 2017.09.04 22:38

    아~~ 쉽지 않네요 ^^;;;
    궁금사항이 있어 또 글 올립니다.
    12.Review까지 특이사항없이 왔고 내용은 아래와 같습니다.
    참고로 호스트명은 ubuntu1601,ubuntu1602,ubuntu1603입니다.

    ========= Review =============
    Admin Name : admin

    Cluster Name : dataworld

    Total Hosts : 3 (3 new)

    Repositories:

    ubuntu14 (HDP-2.5):
    http://public-repo-1.hortonworks.com/HDP/ubuntu14/2.x/updates/2.5.0.0

    ubuntu14 (HDP-UTILS-1.1.0.21):
    http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.21/repos/ubuntu12

    Services:

    HDFS
    DataNode : 3 hosts
    NameNode : ubuntu1601
    NFSGateway : 0 host
    SNameNode : ubuntu1602
    YARN + MapReduce2
    App Timeline Server : ubuntu1602
    NodeManager : 3 hosts
    ResourceManager : ubuntu1602
    Tez
    Clients : 2 hosts
    Hive
    Metastore : ubuntu1602
    HiveServer2 : ubuntu1602
    WebHCat Server : ubuntu1602
    Database : New MySQL Database
    Pig
    Clients : 2 hosts
    Sqoop
    Clients : 2 hosts
    Oozie
    Server : ubuntu1602
    Database : New Derby Database
    ZooKeeper
    Server : 3 hosts
    Falcon
    Server : ubuntu1602
    Storm
    DRPC Server : ubuntu1602
    Nimbus : ubuntu1602
    UI Server : ubuntu1602
    Supervisor : 3 hosts
    Flume
    Flume : 3 hosts
    Ambari Infra
    Infra Solr Instance : ubuntu1601
    Ambari Metrics
    Metrics Collector : ubuntu1603
    Grafana : ubuntu1601
    Kafka
    Broker : ubuntu1601
    Knox
    Gateway : ubuntu1601
    SmartSense
    Activity Analyzer : ubuntu1601
    Activity Explorer : ubuntu1601
    HST Server : ubuntu1601
    Spark
    Livy Server : 0 host
    History Server : ubuntu1601
    Thrift Server : 0 host
    Zeppelin Notebook
    Notebook : ubuntu1601
    Slider
    Clients : 2 hosts

    ============================

    이 상태에서 deploy버튼을 누르면 진행중에 아래와 같은 error창이 뜹니다.

    (error내용)
    An internal system exception occurred: Trying to map host to cluster where stack does not support host's os type, clusterName=dataworld, clusterStackId=HDP-2.5, hostname=ubuntu1601, hostOsFamily=ubuntu16

    error내용을 무시하고 확인 버튼을 누르고 /var/log/ambari-agent/로 이동해 tail –f ambari-agent.log를 보면
    아래와 같은 로그가 뜨면서 무한루프에 걸리네요

    ======= ambari-agent.log 내용 ========
    INFO 2017-09-04 22:28:28,461 logger.py:71 - call[['test', '-w', '/media/ubuntu16-01/VBOXADDITIONS_5.1.26_117224']] {'sudo': True, 'timeout': 5}
    INFO 2017-09-04 22:28:28,475 logger.py:71 - call returned (1, '')
    INFO 2017-09-04 22:29:37,815 Controller.py:277 - Heartbeat with server is running...
    INFO 2017-09-04 22:29:37,815 Heartbeat.py:90 - Adding host info/state to heartbeat message.
    INFO 2017-09-04 22:29:37,916 logger.py:71 - call[['test', '-w', '/dev']] {'sudo': True, 'timeout': 5}
    INFO 2017-09-04 22:29:37,920 logger.py:71 - call returned (0, '')
    INFO 2017-09-04 22:29:37,921 logger.py:71 - call[['test', '-w', '/run']] {'sudo': True, 'timeout': 5}
    INFO 2017-09-04 22:29:37,925 logger.py:71 - call returned (0, '')
    INFO 2017-09-04 22:29:37,925 logger.py:71 - call[['test', '-w', '/']] {'sudo': True, 'timeout': 5}
    INFO 2017-09-04 22:29:37,930 logger.py:71 - call returned (0, '')
    INFO 2017-09-04 22:29:37,930 logger.py:71 - call[['test', '-w', '/dev/shm']] {'sudo': True, 'timeout': 5}
    INFO 2017-09-04 22:29:37,935 logger.py:71 - call returned (0, '')
    INFO 2017-09-04 22:29:37,936 logger.py:71 - call[['test', '-w', '/run/lock']] {'sudo': True, 'timeout': 5}
    INFO 2017-09-04 22:29:37,940 logger.py:71 - call returned (0, '')
    INFO 2017-09-04 22:29:37,940 logger.py:71 - call[['test', '-w', '/sys/fs/cgroup']] {'sudo': True, 'timeout': 5}
    INFO 2017-09-04 22:29:37,945 logger.py:71 - call returned (1, '')
    INFO 2017-09-04 22:29:37,946 logger.py:71 - call[['test', '-w', '/run/user/1000']] {'sudo': True, 'timeout': 5}
    INFO 2017-09-04 22:29:37,950 logger.py:71 - call returned (0, '')
    INFO 2017-09-04 22:29:37,950 logger.py:71 - call[['test', '-w', '/media/ubuntu16-01/VBOXADDITIONS_5.1.26_117224']] {'sudo': True, 'timeout': 5}
    INFO 2017-09-04 22:29:37,954 logger.py:71 - call returned (1, '')

    • BlogIcon 쿡북 쿡북 2017.09.04 23:01 신고

      네 추측인데 1601로 명명하신것으로 보아 os가 ubuntu16 인듯 한데 repository는 ubuntu14로 하셨네요 repository url 확인해주세요 16과 14는 repository가 다릅니다. 아래 참고 하시면 될것 같습니다
      https://docs.hortonworks.com/HDPDocuments/Ambari-2.5.1.0/bk_ambari-installation/content/hdp_26_repositories.html

  4. saicham 2017.11.20 12:43

    ambari 설정후 잘 공부하고 있습니다.
    문의사항이 있어 글 올립니다.
    hadoop 2.7.3.2.6.2.0.-205버전에서 hadoop fs -put aa.csv /hadoop/csv 명령어로 파일을 올리고
    hadoop fs -cat /hadoop/csv 조회해 보니 한글자료가 깨져 보입니다.
    이런 경우 어디에서 한글 인코딩을 해줘야 하는지 궁금합니다. ^^

  5. BlogIcon 쿡북 쿡북 2017.11.20 12:45 신고

    몇가지 확인하셔야 하는데 첫번째가 putty 자체 인코딩 확인하시고요 다음은 리눅스 os 인코딩 확인 하시면 됩니다 utf8인지 확인해보세요 감사합니다

  6. yoni 2017.12.29 11:00

    안녕하세요, 쿡북님 블로그로 많이 배우고 있습니다.
    한가지 궁금한 점이 있어 질문드립니다.
    설정은 다 에러 없이 끝난것 같은데 ambari UI에 접속하려고 하면 응답하는데 시간이 오래걸린다고 뜨는데 어째서 그런걸까요?

    • BlogIcon 쿡북 쿡북 2017.12.29 23:03 신고

      port 는 정상적으로 떠 있는데 응답 시간이 오래걸리면 다른쪽 문제로 보이는데 혹시 방화벽 off 시키셨는지요?? 환경을 정확하게 모르겠는데 만약 접근이 막힌게 아니라 접속까지거 오래 걸리는거라면 DNS 쪽이거나 route table 에서 늦게 포워딩 하는 문제 일 수 있을것 같습니다. 암바리 설정 문제는 아닐듯 하네요

  7. fireblade 2018.07.20 15:55

    감사한 정보 항상 잘보고있습니다.
    한가지 문의사항이 있어 댓글드립니다.
    ambari UI -> CLUSTER INSTALL WIZARD -> Confirm Hosts 진행중 failed 가 발생하는데 에러 내역은 다음과 같습니다.
    ============================================================
    INFO 2018-07-20 16:11:00,384 NetUtil.py:62 - Connecting to https://centos6.10-01:8440/ca
    ERROR 2018-07-20 16:11:00,390 NetUtil.py:88 - [Errno 8] _ssl.c:492: EOF occurred in violation of protocol
    ERROR 2018-07-20 16:11:00,390 NetUtil.py:89 - SSLError: Failed to connect. Please check openssl library versions.
    Refer to: https://bugzilla.redhat.com/show_bug.cgi?id=1022468 for more details.
    WARNING 2018-07-20 16:11:00,393 NetUtil.py:116 - Server at https://centos6.10-01:8440 is not reachable, sleeping for 10 seconds...
    ', None)

    Connection to centos6.10-01 closed.
    SSH command execution finished
    host=centos6.10-01, exitcode=0
    Command end time 2018-07-20 16:11:03

    Registering with the server...
    Registration with the server failed.

    (8440 포트는 외부에 열려있는 상태입니다.)
    ============================================================
    ubuntu14, centos6.10 혹시나 하여 두버전 진행해보았는데 마찬가지였습니다.
    검색된 몇가지의 구글링 내용대로 진행하여도 잘 해결되지 않는것 같습니다.
    해당 내용관련 조언해주실 내용 있으시면 말씀부탁드립니다.
    감사합니다.

  8. BlogIcon ㅈㅇㅈ 2018.12.21 17:44

    여기서 CUSTOMIZE SERVICE에서 HIVE DATABASE연결하는 것은 EXISTING MYSQL로 할 시 앞에서 만든 MYSQL DB를 가리키면 되나요?