Notice
Recent Posts
Recent Comments
Today
Total
04-29 04:14
Archives
관리 메뉴

Jeongchul Kim

Docker Hadoop 클러스터 Hive 설치 본문

Google Cloud Platform

Docker Hadoop 클러스터 Hive 설치

김 정출 2018. 3. 28. 04:15


Docker Hadoop 클러스터 Hive 설치




Docker 설치가 완료된 가정 하에서 진행됩니다.


Multi Server -> Docker Swarm 생성

Docker swarm을 생성하기 위해서는 서버 중 마스터(master) 노드로 지정해야 합니다.

https://docs.docker.com/engine/swarm/manage-nodes/



하나의 서버에서 SWARM 마스터를 생성하는 docker swarm init 명령어를 실행합니다.

$ docker swarm  init --advertise-addr  [HOST-IP]


다음에서 나온 docker swarm join -- token [TOKEN값] [HOST-UP]:2377 을 복사하여 다른 서버에 붙여 넣습니다.


swarm에서의 Node 상태를 확인하기 위해서는 docker swarm node 명령어를 사용합니다.

$ sudo docker node ls


AVAILABILITY 에서는 스케줄러(scheduler)가 Node에게 task를 부여할 수 있는지 확인할 수 있습니다.

- Active : scheduler가 task 할당이 가능한 상태입니다.

- Pause : 이미 존재하는 task는 실행 중이지만, scheduler가 새로운 task에 대해서는 할당할 수 없습니다.

- Drain : 이미 존재하는 task도 shutdown되며, 사용가능한 node로 스케줄링하게 됩니다. scheduler가 새로운 task에 대해서는 할당할 수 없습니다.


MANAGER STATUS 에서는 Leader가 manager node임을 알려주면 모든 swarm 관리와 결정을 합니다.


개개인의 node에 대해서도 상태를 살펴보는 명령어는 다음과 같습니다.

$ sudo docker node inspect self --pretty


swarm의 토큰 값을 다시 확인하기 위해서는 다음의 명령어를 사용합니다.

$ sudo docker swarm join-token worker


swarm에서 Worker 노드에서 탈퇴하는 것은 docker swarm leave 명령어를 사용하면 됩니다.

$ sudo docker swarm leave


Overlay 네트워크 생성

https://docs.docker.com/network/overlay/

Overlay network는 여러 서버의 Docker daemon hosts 간의 분산 네트워크입니다.

Overlay 네트워크를 통해 각기 다른 서버의 IP 주소와 상관없이 같은 subnet mask의 내부 주소를 부여받게 되고, 이를 통해 쉽게 Hadoop 클러스터를 구성할 수 있습니다.


현재 docker의 네트워크 상태를 살펴보기 위해서는 docker network ls 명령어를 사용합니다.

$ sudo docker network ls


docker swarm 네트워크 망을 새로 생성합니다.

$ sudo docker network create -d overlay --attachable --subnet=[SUBNET_MASK] [NETWORK_NAME]


생성된 swarm 네트워크를 살펴보기 위해서는 docker network inspect 명령어를 사용합니다.

$ sudo docker network inspect [NETWORK_NAME]

subnet이 설정된 것을 확인할 수 있습니다.


자 이제 container를 실행하여 overlay network에 붙여봅시다.


overlay network를 지우기 위해서는 docker network rm 명령어를 사용합니다.

$ sudo docker network rm hadoop-net

Hadoop Dockerfile

저는 대학교에서 실습 진행을 위해 서버 5대에서 학생 40~50명에게 hadoop container 제공을 위해 Dockerfile을 작성하여 container를 실행하였고 2년 동안 진행하였습니다.

Dockerfile Registry 저장소인 DockerHub에서 확인할 수 있습니다.

https://hub.docker.com/

https://hub.docker.com/u/kmubigdata/dashboard/



hadoop은 2.8.0 버전을 사용하고 있습니다.


코드는 github에서 확인할 수 있습니다.

https://github.com/kmu-bigdata/ubuntu-hadoop/


Container 생성하기




Name Node와 Data Node 4개 에 해당하는 container를 5개 생성해봅시다.

[server1]name_node = 10.0.0.2

[server1]data-node1 = 10.0.0.3

[server1]data-node2 = 10.0.0.4

[server2]data-node3 = 10.0.0.5

[server3]data-node4 = 10.0.0.6


Hadoop Namenode container 생성

먼저 Hadoop Namenode를 생성하기 위해 Hadoop이나 YARN에서 사용하는 port를 열어 주기 위해 -p 옵션으로 host와 맵핑해야 합니다. 또한 --add-host로 슬레이브의 ip를 미리 알려주어야 합니다.


명령어를 실행하면, container가 생성됩니다.

$ sudo docker run -dit --name master --network hadoop-net --ip 10.0.0.2 -p 8088:8088 -p 8042:8042 -p 8085:8080 -p 4040:4040 -p 2122:22 --add-host=master:10.0.0.2 --add-host=slave1:10.0.0.3 --add-host=slave2:10.0.0.4 --add-host=slave3:10.0.0.5 --add-host=slave4:10.0.0.6 kmubigdata/ubuntu-hadoop /bin/bash


현재 실행 중인 container를 살펴봅시다.

$ sudo docker ps


name-node container bash로 접속합니다.

$ sudo docker exec -it master /bin/bash


우선 docker run 에서 add-host 옵션에서 들어간 것은 /etc/hosts 에서 살펴볼 수 있습니다.

$ cat /etc/hosts


다음은 기존의 slaves 파일들을 수정합니다.

$ vi $HADOOP_HOME/etc/hadoop/slaves


slave1

slave2

slave3

slave4


저장합니다.


Hadoop datanode container 생성

자 다음은 datanode들을 생성해봅시다.


$ sudo docker run -dit --name slave1 --network hadoop-net --ip 10.0.0.3 --add-host=master:10.0.0.2  --add-host=slave1:10.0.0.3 kmubigdata/ubuntu-hadoop /bin/bash

$ sudo docker run -dit --name slave2 --network hadoop-net --ip 10.0.0.4 --add-host=master:10.0.0.2 --add-host=slave1:10.0.0.4 kmubigdata/ubuntu-hadoop /bin/bash



이쯤에서 docker network inspect 명령어로 Overlay 네트워크를 확인해봅시다.


$ sudo docker network inspect hadoop-net


현재 Overlay 네트워크에 연결된 container를 살펴볼 수 있으며, container 목록에서 name-node, slave1, slave2의 IP를 확인할 수 있습니다.


자 다음으로 server2에서 slave3, 4 container를 생성합시다.

$ sudo docker run -dit --name slave3 --network hadoop-net --ip 10.0.0.5 --add-host=master:10.0.0.2  --add-host=slave3:10.0.0.5 kmubigdata/ubuntu-hadoop /bin/bash
$ sudo docker run -dit --name slave4 --network hadoop-net --ip 10.0.0.6 --add-host=master:10.0.0.2 --add-host=slave4:10.0.0.6 kmubigdata/ubuntu-hadoop /bin/bash


실행 중인 container 목록을 살펴봅시다.

$ sudo docker ps


$ sudo docker network inspect hadoop-net

네트워크 상태를 살펴봅시다.

server2에서도 Overlay Network에게 연결을 하게되면, Peers 에서 연결된 Server를 확인할 수 있습니다.


Hadoop 시작

server1으로 돌아와 다시 name-node container로 접속합니다.

$ sudo docker exec -it master /bin/bash

자 이제 start-all 을 이용해 hadoop을 시작해봅시다.

$ start-all.sh
$ jps


jps 목록에서 NameNode, ResourceManager, SecondaryNameNode가 실행되어야 합니다.


이번에 slave들 중 하나의 container로 들어가 jps로 확인해봅시다.

$ sudo docker exec -it slave4 /bin/bash
$ jps


Hadoop 클러스터가 생성되었습니다. 좋습니다.


웹 UI를 확인하기 위해

http://[SERVER_IP]:8088로 접속해봅시다.


Hive 설치

$ wget http://mirror.navercorp.com/apache/hive/stable-2/apache-hive-2.3.2-bin.tar.gz


$ tar -xzvf apache-hive-2.3.2-bin.tar.gz


$ cd apache-hive-2.3.2-bin/conf
$ cp hive-env.sh.template hive-env.sh
$ cp hive-default.xml.template hive-default.xml’


$ vi hive-env.sh

HADOOP_HOME=/usr/local/hadoop



$ hdfs dfs -mkdir /tmp

$ hdfs dfs -mkdir /tmp/hive

$ hdfs dfs -mkdir /user

$ hdfs dfs -mkdir /user/hive

$ hdfs dfs -mkdir /user/hive/warehouse

$ hdfs dfs -chmod g+w /tmp

$ hdfs dfs -chmod g+w /user/hive/warehouse

$ hdfs dfs -chmod 777 /tmp/hive



$ cd /apache-hive-2.3.2-bin/bin/

$ ./schematool -initSchema -dbType


$ ./hive




Comments