Taaewoo
Data Engineering Blog
Taaewoo
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Computer Science (16)
      • Algorithm (6)
      • OS (1)
      • Java (2)
      • C++ (6)
      • Python (1)
    • Hadoop Ecosystem (27)
      • Hadoop (6)
      • Spark (5)
      • NiFi (6)
      • Hive (9)
      • Kafka (1)
    • BigData Engineering (14)
      • Jupyter (1)
      • Docker (3)
      • CDH (3)
      • Riot Data Pipeline (7)
    • Back-end 개발 (0)
      • Spring (0)
    • Algorithm 문제 풀이 (9)
      • 백준 (5)
      • LeetCode (4)
    • Conference (1)
      • LINE DEVELOPER DAY 2021 (1)
      • if(kakao) 2021 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • BigData
  • C++
  • 알고리즘
  • metastore
  • Hive
  • kafka
  • sort
  • 코딩
  • NiFi
  • java
  • hadoop
  • algorithm
  • spark
  • 정렬
  • 프로그래밍
  • Coding
  • hdfs
  • docker
  • 빅데이터
  • CS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Taaewoo

Data Engineering Blog

[Docker] Docker로 CDH 배포판 설치하기 #3 - Namenode와 Datanode 이미지 만들기 및 클러스터 재생성하기
BigData Engineering/CDH

[Docker] Docker로 CDH 배포판 설치하기 #3 - Namenode와 Datanode 이미지 만들기 및 클러스터 재생성하기

2021. 7. 14. 02:26

Docker

 내가 원하는 환경의 서버를 container라는 개념으로 쉽게 생성 및 삭제할 수 있는 플랫폼.

 

CDH ( Cloudera’s Distribution including Apache Hadoop )

 Cloudera에서 hadoop eco system의 다양한 component들을 묶은 플랫폼 배포판

 

관련 글

[Docker] Docker로 CDH 배포판 설치하기 #1 - 기본 세팅 및 Cloudera Manager Installer 다운 받기

[Docker] Docker로 CDH 배포판 설치하기 #2 - Cloudera Manager로 클러스터 구성하기


 

 이전 글에서  docker 로 클러스터를 구성 및 설치 작업을 진행했었습니다. 그렇다면 이렇게 많은 설치 작업을 진행한 지금 현재의 클러스터 상태를 이미지화시킬 수 없을까요? 이번 글에서 NameNode와 DataNode를 이미지화시키고 클러스터를 재생성시키는 작업을 진행하도록 하겠습니다.

 

 

모든 노드 이미지 만들기

 

 지금 현재 클러스터 구성이 되고 있는 노드는 hadoop01, hadoop02, hadoop03, hadoop04로 NameNode 1개, DataNode 3개입니다. 그럼 모든 노드를 각각 이미지 생성하겠습니다. 이미지 생성 전 모든 컨테이너들을 종료시키거나 stop 시켜주세요. 참고로 이미지 생성하는데 시간이 조금 걸립니다.

/* Local PC */
$ docker commit hadoop01 cdh_nn1
$ docker commit hadoop02 cdh_dn1
$ docker commit hadoop03 cdh_dn2
$ docker commit hadoop04 cdh_dn3

 

 위의 명령어대로 이미지를 생성했다면 아래와 같이 나타납니다. 여러 가지 패키지들과 프로그램들을 설치하다 보니 용량이 상당히 크게 잡혔습니다. 4개 이미지의 총합 용량이 약 100기가인데 이 용량을 줄일 수 있는 방법으로써는 뒤에서 다시 설명하겠습니다.

 

 

노드 이미지로 클러스터 생성

 

 이제부터는 위에서 만든 이미지로 클러스터 생성을 진행하겠습니다. 작업은 간단합니다. 위에서 만든 이미지당 container 1개씩 각각  docker  run을 진행해주면 됩니다. 

/* hadoop01 - NN1 */
$ docker run --privileged --name hadoop01 -p 7180:7180 -itd -h hadoop01.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro cdh_nn1 /usr/sbin/init

/* hadoop02 - DN1 */
$ docker run --privileged --name hadoop02 --link hadoop01:hadoop01 -itd -h hadoop02.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro cdh_dn1 /usr/sbin/init

/* hadoop03 - DN2 */
$ docker run --privileged --name hadoop03 --link hadoop01:hadoop01 -itd -h hadoop03.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro cdh_dn2 /usr/sbin/init

/* hadoop04 - DN3 */
$ docker run --privileged --name hadoop04 --link hadoop01:hadoop01 -itd -h hadoop04.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro cdh_dn3 /usr/sbin/init

 

 4개 container가 모두 실행되었다면 7180 port(localhost:7180)를 통해 Cloudera Manager server에 접속해봅니다. 이때 Cloudera Manager server 웹페이지가 올라오는데 몇분의 시간이 걸릴 수 있는 점 참고바랍니다. 아마 정상적으로 실행이 되던 클러스터의 모든 노드를 그대로 이미지화 시켰고 다시 container로 생성했기 때문에 문제 없이 클러스터 구성이 되어있을 겁니다. 

( Cloudera Manager server 페이지에 접속했을 때 클러스터 설치 UI가 나타난다면 좌측 상단 홈 버튼을 누르면 됩니다. )

 

 

NameNode, DataNode 이미지만으로 클러스터 생성

 

 위에서 보았듯이 4개 노드의 경우 이미지를 만들었을 때 총 100GB라는 거대한 용량을 가지게 됩니다. 하지만 이 때  DataNode의 경우에는 이미지 1개만 만들어놓고 이 이미지를 가지고 모든 container를 생성하면 되지 않을까? 라는 생각을 하게 됩니다. 만약 이 가정이 성립된다면 우리는 50GB의 용량만으로 클러스터를 다시 생성할 수 있게 됩니다. 심지어 DateNode의 수가 많으면 많을수록 더욱 효율적인 container 생성을 할 수 있습니다.

 

 기존의 container들은 모두 삭제하고 새롭게 만들겠습니다. 명령어는 이전과 모두 동일하지만 hadoop03, hadoop04 container의 경우 dn1 이미지로 생성합니다.

/* hadoop01 - NN1 */
$ docker run --privileged --name hadoop01 -p 7180:7180 -itd -h hadoop01.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro cdh_nn1 /usr/sbin/init

/* hadoop02 - DN1 */
$ docker run --privileged --name hadoop02 --link hadoop01:hadoop01 -itd -h hadoop02.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro cdh_dn1 /usr/sbin/init

/* hadoop03 - DN2 */
$ docker run --privileged --name hadoop03 --link hadoop01:hadoop01 -itd -h hadoop03.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro cdh_dn1 /usr/sbin/init

/* hadoop04 - DN3 */
$ docker run --privileged --name hadoop04 --link hadoop01:hadoop01 -itd -h hadoop04.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro cdh_dn1 /usr/sbin/init

 

 container들이 모두 생성되고 Cloudera Manager server 페이지를 확인합니다. 클러스터의 모든 호스트를 보았을 때 아쉽게도 hadoop03, hadoop04의 heartbeat는 서버와 통신이 되지 않고 있습니다. 이미지는 동일하게 하고 host 이름만 바꿨다고 서버가 인식할 수 없다는 걸 알게 되었습니다. 그렇다면 여기서 생각해볼 수 있는 건 Cloudera Manager agent의 설정 값이 각 이미지마다 다르다는 것입니다.

 

 중간에 여러 가지 시행착오가 있었지만 결과적으로 agent마다 고유한 ID 값이 있다는 것을 알게 되었습니다. agent 서버에 접속해 특정 경로에 접근하면 "uuid"라는 값을 볼 수 있습니다. 이 값이 agent마다 가지고 있는 고유한 ID입니다. 그리고 이 값은 Cloudera Manager server 페이지에서도 확인할 수 있었습니다. 아래 그림에서 "호스트 ID" 값이 현재 server가 클러스터를 설치하면서 등록해놓은 고유한 ID입니다.

- Directory : /var/lib/cloudera-agent/

- File : uuid

 

 그렇다면 우리는 각 agent가 가지고 있는 uuid 값을 복사해 바꿔주면 문제를 해결할 수 있습니다. 간편하게 아래 명령어를 사용해 uuid 값을 바꿔주고 Cloudera Manager agent 서비스를 restart 해주면 됩니다. service 명령어를 사용할 수 없다면 "yum install -y initscripts"를 통해 설치가 완료된 후 실행하시기 바랍니다.

/* hadoop03 Terminal */
$ echo -n 5c691675-491c-4d08-9ba3-76455fe95c49 > /var/lib/cloudera-scm-agent/uuid
$ service cloudera-scm-agent restart

/* hadoop04 Terminal */
$ echo -n b144314d-7ff1-4e5e-9e61-e97d84a76de3 > /var/lib/cloudera-scm-agent/uuid
$ service cloudera-scm-agent restart

 

 uuid 변경 및 service restart를 진행했다면 아래와 같이 모든 agent로부터 server와 heartbeat를 주고받는 것을 확인할 수 있습니다.

 

 이를 통해 Cloudera Manager server는 agent로부터 heartbeat를 받지만, uuid를 통해 agent를 판단한다는 것을 알 수 있었습니다.

저작자표시 비영리 (새창열림)

'BigData Engineering > CDH' 카테고리의 다른 글

[Docker] Docker로 CDH 배포판 설치하기 #2 - Cloudera Manager로 클러스터 구성하기  (2) 2021.07.10
[Docker] Docker로 CDH 배포판 설치하기 #1 - 기본 세팅 및 Cloudera Manager Installer 다운 받기  (2) 2021.07.05
    'BigData Engineering/CDH' 카테고리의 다른 글
    • [Docker] Docker로 CDH 배포판 설치하기 #2 - Cloudera Manager로 클러스터 구성하기
    • [Docker] Docker로 CDH 배포판 설치하기 #1 - 기본 세팅 및 Cloudera Manager Installer 다운 받기
    Taaewoo
    Taaewoo

    티스토리툴바