March 21st, 2020
centos 운영체제 위에 Hadoop cluster를 올리는 실습이다. 1개 PC에 여러 노드를 올려서 각 노드간 통신이 원활하게 이루어지는지 파악해보려고 한다.
궁극적으로는 아래 저장소의 하둡 클러스터를 가상 centos 운영체제에 올리는 것이 목표이다
아래 링크를 참조하여 VirtualBox에 Centos 이미지를 설치하자
설치 :
네트워크 설정 :
설치를 완료했으면 운영체제로 접근하여 docker를 설치 해보자. 아래 링크를 참고하여 진행하였다
일단 가상 OS 내에서 도커를 설치한다.
centos7 은 다음처럼 설치한다.
# yum 업데이트
yum -y update
# 도커 및 도커 레지스트리 설치
yum -y install docker docker-registry
# docker service 부팅시 시작하도록 등록
systemctl enable docker.service
# docker service 시작
systemctl start docker.service
centos8 인 경우는 다음처럼 설치한다.
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf install docker-ce --nobest -y
# docker service 부팅시 시작하도록 등록
systemctl enable docker
# docker service 시작
systemctl start docker
docker 명령어를 입력해서 정상 설치되었는지 확인해보자
[root@localhost ~]# docker --version
Docker version 19.03.8, build afacb8b
아래 저장소를 이용하였고 저장소의 README문서를 참조하였다.
근데 centos 이미지에 git이 없다.. 설치하자-_-;;
# centos7
yum -y install git
# centos8
dnf -y install git
이제 저장소를 클론받자. 필자는 /home 폴더에 받았다.
cd /home
git clone https://github.com/kiwenlau/hadoop-cluster-docker
하둡 이미지를 받아주자
docker pull kiwenlau/hadoop:1.0
하둡 끼리 통신이 가능하도록 브리지 네트워크를 생성하자
docker network create --driver=bridge hadoop
클러스터 컨테이너를 시작해보자
cd hadoop-cluster-docker
./start-container.sh
------------------------------
start hadoop-master container...
start hadoop-slave1 container...
start hadoop-slave2 container...
root@hadoop-master:~#
1개의 마스터와 2개의 슬레이브가 올라오고 나서 hadoop-master 노드로 진입한 것을 확인할 수 있다. 예제를 실행해보자.
# 하둡 실행
./start-hadoop.sh
----------------------------
Starting namenodes on [hadoop-master]
hadoop-master: Warning: Permanently added 'hadoop-master,172.18.0.2' (ECDSA) to the list of known hosts.
hadoop-master: namenode running as process 177. Stop it first.
hadoop-slave2: Warning: Permanently added 'hadoop-slave2,172.18.0.4' (ECDSA) to the list of known hosts.
hadoop-slave1: Warning: Permanently added 'hadoop-slave1,172.18.0.3' (ECDSA) to the list of known hosts.
hadoop-slave1: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-hadoop-slave1.out
hadoop-slave2: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-hadoop-slave2.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-hadoop-master.out
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn--resourcemanager-hadoop-master.out
hadoop-slave2: Warning: Permanently added 'hadoop-slave2,172.18.0.4' (ECDSA) to the list of known hosts.
hadoop-slave1: Warning: Permanently added 'hadoop-slave1,172.18.0.3' (ECDSA) to the list of known hosts.
hadoop-slave2: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-hadoop-slave2.out
hadoop-slave1: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-hadoop-slave1.out
혹시 slave와 연결시 no route to host 22 에러가 뜬다면 centos의 방화벽이 docker의 필터리스트를 제대로 처리해주지 못해서이다. 필자는 그냥 방화벽을 꺼버렸다. 링크 참조
예제를 이어서 실행해보자
./run-wordcount.sh
--------------------------------
....
input file1.txt:
Hello Hadoop
input file2.txt:
Hello Docker
wordcount output:
Docker 1
Hadoop 1
Hello 2
일단 이렇게 하둡 마스터/슬레이브 노드 연결까지 성공했다. 깃허브 예제에는 resize 예제로 slave 노드 개수를 조절할 수 있으니 이것도 해볼 사람은 해보자.