::: 데이터 분석 :::

설정 변경한 HDP Sandbox 2.6.5의 Docker 이미지 배포

곰탱이푸우 2021. 9. 27. 08:20
참고사항

본 글은 2018년에 기술 조사를 진행하면서 확인한 내용으로, 최신 상황에 맞게 업데이트 하였으나 일부 부족한 내용이 있을 수 있습니다.
빅데이터나 하둡 관련 전문가가 아니기 때문에 셋팅과 기본적인 사용 외에, 하둡과 하둡 생태계 운영의 트러블 슈팅은 잘 모릅니다.
오픈소스 특성상 직접 조사하고 해결해야 하는 부분이 많습니다.  기본 셋팅 관련해서 참고만 부탁 드립니다.

 

HDP Sandbox의 기본 설정 변경과 테스트 환경 구성이 완료되면 향후 재사용을 위해 Docker 이미지를 배포해야 한다.

HDP Sandbox의 설치와 환경 설정을 변경한 Docker 컨테이너를 별도 저장소에 Docker 이미지로 배포하는 절차와 방법에 대해 정리한다.

 

HDP Sandbox에 대한 소개와 설치 스크립트 다운로드는 다음 포스팅을 참고한다.

 

HDP Sandbox 소개와 Docker 셋팅 파일 다운로드

참고사항 본 글은 2018년에 기술 조사를 진행하면서 확인한 내용으로, 최신 상황에 맞게 업데이트 하였으나 일부 부족한 내용이 있을 수 있습니다. 빅데이터나 하둡 관련 전문가가 아니기 때문에

www.bearpooh.com

 

HDP Sandbox 2.6.5 버전을 Docker로 설치하는 방법은 다음 포스팅을 참고한다.

 

HDP Sandbox 2.6.5 Docker 설정과 Ambari 로그인하기

참고사항 본 글은 2018년에 기술 조사를 진행하면서 확인한 내용으로, 최신 상황에 맞게 업데이트 하였으나 일부 부족한 내용이 있을 수 있습니다. 빅데이터나 하둡 관련 전문가가 아니기 때문에

www.bearpooh.com

 

HDP Sandbox 2.6.5 Docker 컨테이너의 HDFS에 데이터 파일 업로드 방법은 다음 포스팅을 참고한다.

 

HDP Sandbox 2.6.5 HDFS에 데이터 업로드 하기

참고사항 본 글은 2018년에 기술 조사를 진행하면서 확인한 내용으로, 최신 상황에 맞게 업데이트 하였으나 일부 부족한 내용이 있을 수 있습니다. 빅데이터나 하둡 관련 전문가가 아니기 때문에

www.bearpooh.com

 

 

HDP Sandbox Custom Docker 이미지의 버전 관리

Hortonworks에서 배포하는 HDP Sandbox 버전을 이미지명에 포함한다. 메이저/마이너 버전을 구분하는 .은 사용하지 않는다.

 

자체적으로 사용할 버전은 다음과 같이 3자리를 사용한다. (ex. 1.1.1)

  • 앞 - Major 버전을 의미한다. 새로운 프로그램을 추가로 설치한 경우 사용한다.
  • 중간 - Minor 버전을 의미한다. 새로운 Mock 서비스나 테스트 데이터를 추가한 경우 사용한다.
  • 끝 - Maintenance를 의미한다. 기존 설치 된 서비스의 설정을 변경했거나, 테스트 데이터의 위치나 구성을 변경한 경우 사용한다.

 

사설 Docker 저장소 업로드를 위한 Docker Image 제작

테스트 환경 구축을 위한 테스트 데이터 구성, 필요한 어플리케이션 설치, Mock 서비스 설정 등을 마치면 배포할 Docker 이미지를 생성해야 한다.

 

필요한 환경이 설정 된 Docker 이미지를 배포하면 HDP Sandbox 설치부터 테스트 환경 구축까지 번거로운 과정 없이 바로 사용할 수 있어 편리하다.

 

HDP Sandbox Proxy

HDP Sandbox Proxy 이미지는 2.6.5 버전에 새롭게 추가되었고, nginx를 사용하여 HDP Sandbox 컨테이너와 Host PC간의 포트 연결을 담당하는 기능만 수행한다.

 

해당 이미지는 배포용 이미지를 생성하지 않고, Hortonworks의 배포 이미지를 그대로 사용한다.

  • 프로그램을 추가로 설치하거나 테스트 데이터를 셋팅하는 과정이 없다.
  • 사용할 포트만 지정해서 컨테이너를 실행하면 된다.

 

 

HDP Sandbox

HDP Sandbox 이미지에 필요한 프로그램들은 대부분 설치 되어 있다.

 

그러나 아래와 같은 설정을 적용한 경우 별도의 이미지를 생성해야 한다.

  • Sandbox 컨테이너 내부의 hosts에 자체 서비스 주소를 추가한 경우
  • 쉘의 root 계정 비밀번호와 Ambari의 admin 계정 비밀번호를 변경한 경우
  • 테스트에 사용하기 위한 미니 데이터를 추가한 경우
  • 테스트에 사용하는 Mock 서비스를 위해 프로그램을 추가하고 설정을 변경한 경우
  • 테스트를 위해 기본 설치 된 Apache 프로젝트의 설정을 변경한 경우
$ docker commit -m "Password changed. Test data imported." -a "bearpooh02" \
  sandbox-hdp hdp-265-srteam:0.0.1
  
# 사용하는 옵션은 다음과 같다.
# -m : 메시지
# -a : 작성자
# sandbox-hdp : 이미지를 생성하려는 컨테이너 이름 (또는 컨테이너 ID)
# hdp-265-srteam:0.0.1 : 생성하려는 이미지의 이름과 버전 (이름:버전)

 

생성하는 Docker 이미지 이름의 명명 규칙은 다음과 같다.

  • sandbox-hdp : Hortonworks에서 제공하는 기본 이름과 동일하게 사용한다.
  • 265 - 2.6.5와 같은 배포 이미지의 버전을 하나의 숫자로 사용한다. 베이스 이미지로 사용할 HDP Sandbox 배포 버전을 관리하기 위함이다.
  • srteam - 사용할 조건에 맞게 설정을 변경한 것이므로 Postfix로 별도의 이름을 붙인다.
  • 0.0.1 - 자체적으로 사용할 버전을 부여한다.
docker commit으로 이미지를 생성 할 때 주의 사항

현재 컨테이너를 삭제하고 새로운 컨테이너를 생성하는 경우, 변경했던 환경 설정은 모두 초기화되어 처음부터 다시 설정해야 한다. docker commit 명령은 이러한 번거로움을 줄이기 위해 docker 컨테이너의 현재 상태를 이미지로 저장한다.

참고로 docker commit 명령은 docker 이미지로 생성한 컨테이너의 현재 상태를 다시 docker 이미지로 저장하는 명령이다.

그러나 컨테이너의 상태가 변경될 때마다 docker 이미지를 생성하면 버전 관리나 상태 추적이 어렵다.
따라서 docker commit을 사용하는 경우는 다음 경우로 제한하는 것을 추천한다.
- HDP Sandbox를 처음 설정하여 설정을 변경하는 경우
- HDP Sandbox의 배포 버전이 변경 된 경우 (2.6.5 → 3.0.1)
- HDP Sandbox 컨테이너의 런타임 (실행 중) 설정 변경만 가능한 경우

나머지 경우에 대한 변경 사항은 가급적 최초 생성한 이미지를 베이스로 하여 Dockerfile을 통해 빌드하는 형태를 권장한다. 예를 들면 다음과 같다.
- HDP Sandbox 2.6.5를 설치하고 기본 설정을 변경
- docker commit으로 이미지 생성 (265-0.0.1 버전)
- 이후 변경은 265-0.0.1 베이스의 Dockerfile을 작성하고 이미지 빌드 (265-0.0.2 ~)

 

 

사설 Docker 저장소 업로드

사설 저장소에 Docker 이미지를 배포하는 방법은 아래 포스팅을 참고한다.

 

시놀로지 NAS에 설치한 Nexus에 Docker 이미지 Push 하기

예전 포스팅에서 시놀로지 NAS에 Docker를 이용하여 Nexus를 구축하고, Docker 사설 저장소 구축까지 완료했다. 이 정도만 설정해도 사설 저장소를 통한 Docker 이미지를 일반적인 개발 PC나 서버에서 사

www.bearpooh.com

 

사설 Docker 저장소 로그인

아래 명령어를 사용하여 docker에 로그인한다.

$ docker login Docker저장소URL:포트
Username:
Password:
Login Succeeded

 

생성한 이미지에 업로드를 위한 태그 부여

생성한 이미지에 태그를 부여한다.

Docker 이미지 목록을 확인해보면 동일한 IMAGE ID를 가지는 이미지가 생성 된 것을 확인할 수 있다.

$ docker tag hdp-265-srteam:0.0.1 Docker저장소URL:포트/hdp-265-srteam:0.0.1
$ docker image list
REPOSITORY                            TAG     IMAGE ID       CREATED            SIZE
Docker저장소URL:포트/hdp-265-srteam   0.0.1   1462a38c76cf   About an hour ago  24.7GB
hdp-265-srteam                        0.0.1   1462a38c76cf   About an hour ago  24.7GB

 

동일한 방법으로 lastest 태그를 부여한다.

Docker 이미지 목록을 확인해보면 동일한 IMAGE ID를 가지는 latest 태그가 생성 된 것을 확인할 수 있다.

$ docker tag hdp-265-srteam:0.0.1 Docker저장소URL:포트/hdp-265-srteam:latest
$ docker image list
REPOSITORY                           TAG      IMAGE ID       CREATED             SIZE
Docker저장소URL:포트/hdp-265-srteam  0.0.1    1462a38c76cf   About an hour ago   24.7GB
Docker저장소URL:포트/hdp-265-srteam  latest   1462a38c76cf   About an hour ago   24.7GB
hdp-265-srteam                       0.0.1    1462a38c76cf   About an hour ago   24.7GB

 

 

생성한 이미지를 Docker 사설 저장소로 업로드

태그를 부여한 이미지를 사설 Docker 저장소에 업로드한다.

$ docker push Docker저장소URL:포트/hdp-265-srteam:0.0.1
The push refers to repository [Docker저장소URL:포트/hdp-265-srteam]
950c378abf94: Preparing
ecb0c51e548b: Preparing
2fe87af2c02b: Preparing
e636814f9d96: Preparing
f8298be6c185: Preparing
6b4bf7368bf2: Preparing
950c378abf94: Pushed
4366c525e733: Pushed
7d7bae732507: Pushed
e080d5bf9396: Pushed
... 중략 ...
7de498deb60f: Pushed
5d01fe42e1ab: Pushed
43e653f84b79: Pushed
0.0.1: digest: sha256:8cc59096a3286843f98c4fb5f90f5ecbf667b365d54ffc9af84f32963f4c77cf size: 7010

 

latest 태그를 부여한 이미지도 사설 Docker 저장소에 업로드한다.

이미 업로드 되어 있어 Layer already exists  메시지가 출력된다.

$ docker push Docker저장소URL:포트/hdp-265-srteam:latest
The push refers to repository [Docker저장소URL:포트/hdp-265-srteam]
950c378abf94: Preparing
ecb0c51e548b: Preparing
2fe87af2c02b: Preparing
e636814f9d96: Preparing
f8298be6c185: Preparing
6b4bf7368bf2: Preparing
950c378abf94: Pushed
4366c525e733: Layer already exists
7d7bae732507: Layer already exists
e080d5bf9396: Layer already exists
... 중략 ...
7de498deb60f: Layer already exists
5d01fe42e1ab: Layer already exists
43e653f84b79: Layer already exists
0.0.1: digest: sha256:8cc59096a3286843f98c4fb5f90f5ecbf667b365d54ffc9af84f32963f4c77cf size: 7010

 

사설 Docker 저장소에 업로드 한 이미지가 존재하는지 확인한다.