728x90
반응형

유데미에서 하둡 관련 강의를 듣는데 Cloudera Sandbox HDP 를 사용해서 하둡을 사용한다고 해서 설치 과정을 정리해봤다.

 

Cloudera Sandbox HDP 설치하기

Cloudera Sandbox HDP 설치는 아래의 사이트에서 진행할 수 있다.

https://www.cloudera.com/downloads/hortonworks-sandbox/hdp.html

 

Hortonworks Data Platform (HDP) on Sandbox

The HDP Sandbox makes it easy to get started with Apache Hadoop, Apache Spark, Apache Hive, Apache HBase, Druid and Data Analytics Studio (DAS).

www.cloudera.com

 

들어가면 다음과 같이 어떤 플랫폼을 통해 설치할 것인지 선택할 수 있다.

 

나는 도커로 설치할 예정이기 때문에 도커를 선택했다.

 

그리고 LET'S GO 를 누르면 정보를 입력하는 창이 나온다.

 

입력하고나면 다음과 같이 버전을 선택할 수 있는 화면이 나온다.

 

나는 2.6.5 버전을 선택해서 다운로드를 받았다.
다운로드 받은 파일의 압축을 풀어주고 폴더에 들어가보면 다음과 같은 파일을 확인할 수 있다.

 

이제 docker-deploy-hdp265.sh 라는 스크립트 파일을 실행해주면 된다.

sh docker-deploy-hdp265.sh

 

스크립트 파일을 실행했더니 다음과 같이 도커 컨테이너가 실행되었다.

sandbox-proxy 를 통해 여러 포트를 설정해준 것을 볼 수 있고 sandbox-hdp 컨테이너도 실행될 것을 확인할 수 있다.

 

그렇게 컨테이너를 실행하고 Ambari 웹에 접속하려고 보니 다음과 같이 502 Bad Gateway 에러가 발생했다.

 

내가 url 을 잘못 입력한 것 같아 다음과 같이 다른 방법으로도 접속을 시도해봤지만 접속이 되지 않았다.

http://sandbox-hdp.hortonworks.com:1080/
http://sandbox-hdp.hortonworks.com:8080/

127.0.0.1:1080
127.0.0.1:8080

생각해보니 1080 포트는 서비스하고 있지 않았고 8080 포트로 접속하는 것이 맞는 것 같은데... 되지 않았다.

 

Hosts 파일 수정하기

찾아보니 sandbox-hdp.hortonworks.com 또는 sandbox-hdf.hortonworks.com 에 접속하기 위해서는
아래와 같이 hosts 파일에 추가해주어야 했다.

127.0.0.1	localhost sandbox.hortonworks.com sandbox.hortonworks-hdp.com sandbox-hdf.hortonworks.com

 

운영체제마다 hosts 파일의 경로가 다르기 때문에 아래와 같이 경로를 참조해서 파일을 수정해주면 된다.

# 리눅스
/etc/hosts

# 윈도우
C:\Windows\system32\driver\etc\hosts

# MacOS
/private/etc/hosts

 

그래서 나도 다음과 같이 추가해주었다.

 

그리고 다시 접속을 시도해봤지만 여전히 똑같아서 다시 찾아봤다.

 

스크립트 실행 파일 수정하기

다른 블로그와 클라우데라 커뮤니티를 살펴보니 다음과 같이 스크립트 파일을 수정하라고 한다.
아래의 커뮤니티를 참고해서 수정을 진행해봤다.

https://community.cloudera.com/t5/Support-Questions/Bug-found-in-HDP-3-0-1-Docker-deployment-script/td-p/291369

 

Bug found in HDP 3.0.1 Docker deployment script

Hey everyone!  I recently identified a small bug in the deployment script for the Docker images used in version 3.0.1 of the HDP.   I couldn't find a way to officially report it, so I was hoping somebody could direct me to the proper channels here.  The

community.cloudera.com

 

먼저 스크립트 파일 내의 if 조건문의 === 으로 바꾸라고 한다. ( if 조건문 안의 == -> = 으로 수정 )
그래서 docker-deploy-hdp265.sh 파일의 내용을 수정했다.

# 수정 전 (27 ~ 32 번째 라인)
# start the docker container and proxy
if [ "$flavor" == "hdf" ]; then
 hostname="sandbox-hdf.hortonworks.com"
elif [ "$flavor" == "hdp" ]; then
 hostname="sandbox-hdp.hortonworks.com"
fi

# 수정 후 (27 ~ 32 번째 라인)
# start the docker container and proxy
if [ "$flavor" = "hdf" ]; then
 hostname="sandbox-hdf.hortonworks.com"
elif [ "$flavor" = "hdp" ]; then
 hostname="sandbox-hdp.hortonworks.com"
fi

 

변경 후에도 똑같이 접속이 되지 않았다... 다시 찾아봐야겠다.

 

설치 시 문제 확인

설치를 진행하면서 발생한 에러에 대해서 찾아보았다.

 

스크립트를 실행하게되면 스크립트의 실행 로그를 확인할 수 있다.

$ sh docker-deploy-hdp265.sh        
+ registry=hortonworks
+ name=sandbox-hdp
+ version=2.6.5
+ proxyName=sandbox-proxy
+ proxyVersion=1.0
+ flavor=hdp
+ echo hdp
+ mkdir -p sandbox/proxy/conf.d
+ mkdir -p sandbox/proxy/conf.stream.d
+ docker pull hortonworks/sandbox-hdp:2.6.5
2.6.5: Pulling from hortonworks/sandbox-hdp
Digest: sha256:0b34fa5cb197717828d6ffe547c23ad9b1c09f3b953e570e37f6f09809fbf3ba
Status: Image is up to date for hortonworks/sandbox-hdp:2.6.5
docker.io/hortonworks/sandbox-hdp:2.6.5
+ docker pull hortonworks/sandbox-proxy:1.0
1.0: Pulling from hortonworks/sandbox-proxy
Digest: sha256:42e4cfbcbb76af07e5d8f47a183a0d4105e65a1e7ef39fe37ab746e8b2523e9e
Status: Image is up to date for hortonworks/sandbox-proxy:1.0
docker.io/hortonworks/sandbox-proxy:1.0
+ '[' hdp = hdf ']'
+ '[' hdp = hdp ']'
+ hostname=sandbox-hdp.hortonworks.com
++ docker images
++ grep hortonworks/sandbox-hdp
++ awk '{print $2}'
+ version=2.6.5
+ docker network create cda
+ docker run --privileged --name sandbox-hdp -h sandbox-hdp.hortonworks.com --network=cda --network-alias=sandbox-hdp.hortonworks.com -d hortonworks/sandbox-hdp:2.6.5
a785dbb6783f69895ebe3c0c4dc8fc138569ce9522822b88523fcc004efe1fed
+ echo ' Remove existing postgres run files. Please wait'
 Remove existing postgres run files. Please wait
+ sleep 2
+ docker exec -t sandbox-hdp /bin/bash -c 'rm -rf /var/run/postgresql/*; systemctl restart postgresql;'
Failed to get D-Bus connection: No such file or directory
+ sed s/sandbox-hdp-security/sandbox-hdp/g assets/generate-proxy-deploy-script.sh
+ mv -f assets/generate-proxy-deploy-script.sh.new assets/generate-proxy-deploy-script.sh
+ chmod +x assets/generate-proxy-deploy-script.sh
+ assets/generate-proxy-deploy-script.sh
+ uname
+ grep MINGW
+ chmod +x sandbox/proxy/proxy-deploy.sh
+ sandbox/proxy/proxy-deploy.sh
df6eda83fdd666ec18a13d6b46307860c42a84d2615993d96a7dfe9f6437327a

 

로그에서 중간에 보면 에러 메시지를 찾을 수 있었다.

+ docker exec -t sandbox-hdp /bin/bash -c 'rm -rf /var/run/postgresql/*; systemctl restart postgresql;'
Failed to get D-Bus connection: No such file or directory

 

Failed to get D-Bus connection: No such file or directory 라고 하는 에러 메시지가 났는데 찾아보니 docker container 에서 centos 7 을 사용했을 경우에 cgroup 을 사용하지 못해 systemctl 명령어를 사용할 수 없어 발생하는 에러라고 한다.

 

해결 방법으로는 아래의 블로그들을 참고해서 docker run 할 때 --privileged 옵션을 통해 privileged 모드로 /usr/sbin/init 명령어를 통해 초기화한 후에 컨테이너를 실행하고나서 docker exec 명령어를 통해 실행해주면 된다고 하는데 여전히 같은 에러가 발생했다.

 

참고한 블로그들...

https://aimb.tistory.com/275

https://jenakim47.tistory.com/47

https://velog.io/@juhwannn/Docker-Centos-Failed-to-get-D-Bus-connection-Operation-not-permitted-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0

 

 

이 문제의 경우에는 centos 7 버전의 문제라서 centos 8 버전을 사용해주면 문제가 없다고해서 sandbox-hdp 의 OS 버전을 확인해보니 다음과 같이 centos 7.5 버전을 사용하고 있었다...

[root@sandbox-hdp /]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

 

혹시나 해서 하나의 블로그에서 도커 설정을 변경해보라고 해서 아래와 같이 변경해보았다.

// ~/Library/Group\ Containers/group.com.docker/settings.json
{
  ...
  "deprecatedCgroupv1": true
  ...
}

이렇게 cgorupv1 의 설정을 true 로 바꾸어주고 실행해보았지만 결과는 그대로였다.

참고 블로그 : https://bill1224.tistory.com/435

 

 

그러던 중 내가 찾는 문제에 대한 stack overflow 를 발견했다...

https://stackoverflow.com/questions/74905569/ubuntu-22-04-docker-install-hdp-2-6-5-with-error-failed-to-get-d-bus-connection

 

Ubuntu 22.04 docker install HDP 2.6.5 with error "failed to get D-BUS connection: No such file or directory

I've been downloaded and ran HDP 2.6.5 docker , But I've been struggling and received the following error for this line of command: docker exec -t sandbox-hdp sh -c rm -rf /var/run/postgresql/*;

stackoverflow.com

 

이 글의 답변으로 다음과 같이 쓰여있었다.

 

In my opinion, Ambari should run from the host, not in a Docker container

 

... 도커 컨테이너는 안되는 거였니..
몇 시간 동안 열심히 삽질하고 컨테이너를 수십번 껏다 켰는데.. ㅠㅠ

 

 

그래서 도커를 통해 열심히 해 본 결론은 도커 컨테이너를 사용하지 말고 VirtualBox 또는 Vmware 환경에서 하는 것을 추천한다. ㅎㅎ
일단은 VirtualBox 를 사용해서 해봐야겠다 ㅎㅎ
혹시라도 누군가가 안되는 문제를 해결해서 되었다고 한다면 그 방법 좀 알려줬으면 좋겠다... 🥲

 

 

추가) Virtualbox 실행 결과...

며칠 전 도커 환경에서 정상적으로 실행이 되지 않아 다시 virtualbox 를 사용해서 실행해봤다.
설치가 완료되고 실행이 된 화면을 보면 다음과 같다.
접속할 수 있는 URL 이 화면에 나오고 URL 을 통해 Ambari 웹 UI 에 접속할 수 있다. 


웹 사이트에 접속해보면 정상적으로 동작하고 있는 것을 확인해볼 수 있다.

 

캡처 화면에서 빨간 경고에 대한 내용은 왼쪽 리스트에 있는 서비스나 시스템이 설치가 다 되지 않아서 표시가 되어있다.

 

설치가 다 되고나서 보면 다 정상적으로 설치가 완료된 것을 확인할 수 있다.

설치 완료

 

드디어 Virtualbox 로 Cloudera Sandbox HDP 설치를 다했다!

728x90
반응형
복사했습니다!