Docker
내가 원하는 환경의 서버를 container라는 개념으로 쉽게 생성 및 삭제할 수 있는 플랫폼.
CDH ( Cloudera’s Distribution including Apache Hadoop )
Cloudera에서 hadoop eco system의 다양한 component들을 묶은 플랫폼 배포판
관련 글
[Docker] Docker로 CDH 배포판 설치하기 #1 - 기본 세팅 및 Cloudera Manager Installer 다운 받기
[Docker] Docker로 CDH 배포판 설치하기 #3 - Namenode와 Datanode 이미지 만들기 및 클러스터 재생성하기
이전 글에서 Cloudera Manager 설치까지 완료했습니다. 그러면 이번 글에서는 설치된 Cloudera Manager 를 이용해서 클러스터 구성을 진행하겠습니다. Cloudera Manager 에 접속하기 전, DataNode들을 생성하고 몇 가지 작업을 진행하겠습니다. 이전 글에서 언급을 했지만 DataNode들은 centos:base image로 container를 만들 예정입니다.
DataNode 생성 및 기본 세팅
DataNode의 경우에도 docker run을 통해서 container를 생성합니다. NameNode의 경우 Cloudera Manager 를 설치하는 과정에서 "Failed to get D-Bus connection: Operation not permitted" 에러가 발생하기 때문에 docker run 명령어 시 -v 옵션 등 여러가지 옵션을 줘야 한다고 했습니다. DataNode도 마찬가지입니다. 해당 옵션들을 주지 않는다면 클러스터 설치 과정 중 Cloudera Manager Agent를 설치하는 과정에서 같은 에러가 발생하게 됩니다. 이때 터미널 창을 각각 띄어 container 생성 및 접속을 진행합니다.
/* Terminal 1 - DN1 container */
$ docker run --privileged --name hadoop02 --link hadoop01:hadoop01 -itd -h hadoop02.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos:base /usr/sbin/init
$ docker exec -it hadoop02 /bin/bash
/* Terminal 2 - DN2 container */
$ docker run --privileged --name hadoop03 --link hadoop01:hadoop01 -itd -h hadoop03.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos:base /usr/sbin/init
$ docker exec -it hadoop03 /bin/bash
/* Terminal 3 - DN3 container */
$ docker run --privileged --name hadoop04 --link hadoop01:hadoop01 -itd -h hadoop04.hadoop.com -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos:base /usr/sbin/init
$ docker exec -it hadoop04 /bin/bash
DataNode들을 모두 생성했다면 이제 다시 NameNode인 haoop01에서 hosts 파일을 수정합니다. 참고로 docker 는 container를 생성하거나 재시작할 때마다 hosts 파일은 초기화되어 있습니다.
/* Hadoop01 Terminal */
$ vim /etc/hosts
172.17.0.2 hadoop01.hadoop.com hadoop01
172.17.0.3 hadoop02.hadoop.com hadoop02
172.17.0.4 hadoop03.hadoop.com hadoop03
172.17.0.5 hadoop04.hadoop.com hadoop04
다음으로 위의 4개 노드에서 동일하게 root 계정의 패스워드를 설정해줍니다. Cloudera Manager 에서 클러스터 설치 과정에서 프로그램들을 모든 노드에 설치하려면 root 계정의 접속 정보가 필요하기 때문입니다. 이 때 패스워드는 원하시는 것으로 설정하되 잊어버리면 안 됩니다. 저의 경우 admin으로 설정했습니다.
/* All Terminal */
$ passwd
마지막으로 docker 설정이 필요합니다. 이 부분은 뒤에 클러스터 설치 마지막 부분에서 계속 에러가 발생했었는데 그에 대한 해결 방법입니다. ( 원인을 알기까지 4번정도 클러스터 설치한 것 같습니다 ㅎㅎ... ) 클러스터 구성에 있어 우리는 NameNode 1개, DataNode 3개로 총 4개의 노드를 구성합니다. 그러다 보니 Cloudera Manager agent와 parcel 배포까지 하면 상당한 용량이 필요합니다. 그래서 docker 의 disk image size 설정이 필요합니다. docker dashboard에서 Disk image size를 넉넉하게 120GB까지 늘려줍니다.
클러스터 설치
이제부터는 Cloudera Manager web ui에서 클러스터 설치를 진행하겠습니다. Cloudera Manager server가 설치되어 있는 hadoop01 container는 이미 7180 port가 localhost에 연결되어 있기 때문에 localhost:7180을 웹 페이지에 입력해 접속하겠습니다. ID와 패스워드 모두 admin을 입력해 로그인하면 아래와 같이 나타납니다. 이전 글에서 설명했듯이 현재는 Cloudera에서 유료화를 진행하고 있기 때문에 우리는 무료 trial 버전을 이용하겠습니다.
다음으로는 host 등록입니다. "호스트 이름" 입력 란에 각 host의 FQDN 주소를 넣어줍니다. 참고로 FQDN( Fully Qualified Domain Name )은 아까 hadoop01 container에서 hosts 파일에 등록했던 각 host 정보에서 두번째로 있는 정보입니다.
host 등록 후에는 Cloudera Manager agent 및 기타 프로그램들을 설치하기 위해 repository와 parcel 주소를 설정합니다. 이 부분에서 기존의 Cloudera가 제공하던 주소들이 대부분 막히게되어 불가했지만 어렵게 찾은 오픈 주소를 입력합니다. "사용자 지정 레포지토리"를 선택하면 아마 기본 값으로 설정되어 있을 겁니다.
- Repository : https://archive.cloudera.com/cm7/7.1.4/
Pacel Repository의 경우 연결에 실패한 주소들은 모두 제거해주고 오픈되어 있는 주소를 새로 넣어줍니다.
- Parcel Repository : https://archive.cloudera.com/cdh7/7.1.4/parcels
Parcel 설정의 경우 다른 것들은 바꾸지 않아도 되지만 뒤에서 각 host에 배포하는 과정에서 시간이 오래걸립니다. 그래서 옵션 중에서 배포 속도를 늘려주시면 됩니다. 저의 경우 200MB으로 설정했습니다.
JDK 설정 단계입니다. 기존의 JDK를 설치했다면 그에 맞는 선택을 하면 되겠지만 제가 작성한 글을 그대로 따라오셨다면 "Install a Cloudera-provided version of OpenJDK" 를 선택하시면 자동으로 JDK 설치가 진행됩니다.
SSH 로그인 설정 단계입니다. 여러 패키지들을 다른 host에 설치를 하려면 SSH 접속을 필요로 합니다. root 계정으로 암호 허용 또는 개인 키 허용의 방법이 있지만 저의 경우 root 계정으로 암호 허용을 선택했습니다. 그리고 이때 입력하는 암호는 위에서 각 host container에 접속해 설정했던 패스워드를 입력해줍니다. 이때 "Exhausted available authentication methods" 에러가 나타난다면 root 비밀번호가 다르거나 위에서 root 계정 패스워드를 설정하지 않은 것이므로 다시 체크해줍니다.
Cloudera Manager agent 설치 단계입니다. 이부분은 자동으로 진행되며 시간이 오래 걸립니다. 저의 설치 과정을 그대로 따라왔다면 문제없겠지만 혹시라도 "Failed to get D-Bus connection: Operation not permitted" 에러가 발생한다면 docker run 옵션을 제대로 주지 않아서입니다. 위의 docker run 명령어를 다시 확인해주세요.
Agent가 각 host에 모두 설치 되었다면 다음 단계인 Install Parcels로 자동으로 넘어갑니다. 이 단계도 자동으로 다운로드 및 배포가 이루어지고 상당히 오랜 시간이 걸립니다. 위에 사전 단계에서 docker disk image size를 설정했다면 문제없겠지만 만약 설정하지 않았다면 오랜 시간 기다린 결과로 에러를 마주할 것입니다. 참고로 제가 말하는 에러는 두 번째 이미지처럼 나타납니다.
이로 인한 현상을 좀 더 보자면 host에 직접 접속해서 사용중인 디스크 용량을 보면 아래와 같이 100% 이용 중인 것을 확인할 수 있습니다. 그리고 cloudera-scm-agent 서비스 상태를 확인했을 때 inactive 상태이며 "No space left on device" 에러를 발견할 수 있습니다.
Parcel 다운로드 및 배포가 완료되었다면, 마지막으로 Inspect Cluster 단계입니다. 아래 그림에서 빨간 박스는 결과로써 나온 거지만 처음에는 저 자리에 host들을 검사하는 버튼이 있을 겁니다. 그 버튼을 클릭한 후 문제없으면 체크 후 설치를 종료합니다.
설치가 종료되었다면 우리는 Parcel을 다운로드 및 배포를 완료했기 때문에 빅데이터 플랫폼의 여러가지 component들을 사용할 수 있습니다. 이에 대한 예시로 노드 중 하나의 터미널에서 "spark-shell" 명령어를 입력해보면 Spark를 사용할 수 있다는 것을 확인할 수 있습니다.
이로써 클러스터 설치를 모두 완료했습니다. 다음 글로는 현재 클러스터가 구성된 상태의 container들을 image화 시켜 container 복제가 가능한 형태로 만드는 작업을 진행하겠습니다.
'BigData Engineering > CDH' 카테고리의 다른 글
[Docker] Docker로 CDH 배포판 설치하기 #3 - Namenode와 Datanode 이미지 만들기 및 클러스터 재생성하기 (0) | 2021.07.14 |
---|---|
[Docker] Docker로 CDH 배포판 설치하기 #1 - 기본 세팅 및 Cloudera Manager Installer 다운 받기 (1) | 2021.07.05 |