완전 분산 모드

이전 글에서 만든 싱글 노드는 실습용이었고, 실제로는 싱글 노드로는 사용하지 않고 분산으로 만들어 쓰는 것이 일반적입니다. 이번에는 다음의 스펙으로 분산 모드로 만들어보도록 하겠습니다.

공통 설치 파일

우분투 설치 : 랩 2GB, 하드디스크 30GB

기타 util 설치 : SSH, Vim

네트워크 설정 / 호스트 파일 수정

자바설치 : JDK 11.x

하둡설치 : 2.9.x


그룹 및 계정 생성

  - group : Hadoop

  - account : manager

하둡 폴더 소유자 변경

Master Slave1 Slave2 Slave3
(JobTracker,
NameNode)
(SecondaryNameNode,
DataNode)
(DataNode) (DataNode)

하둡 초기화

완전 분산 모드로 바꾸기 위해 master에 namenode를, slave에 datanode를 두기 위해 master에서 datanode를 제거하였습니다.

shop-dfs.sh
sudo rm -rf /usr/local/hadoop/hdfs/datanode/
sudo rm -rf /usr/local/hadoop/hdfs/namenode/*

datanode가 master에서 지워졌는지 확인해보고 다음으로 넘어갑니다.

ls /usr/local/hadoop/hdfs
> namenode


master 설정

슬레이브(slave)를 만들기 전에 마스터의 기본 설정을 합니다.


host 파일 (/etc/hosts) : ip 대신에 이름으로 접속할 수 있도록 하는 파일. 아래 내용을 입력합시다.

예시

192.168.56.101 master
192.168.56.102 slave1
192.168.56.103 slave2
192.168.56.104 slave3


core-site 수정

localhost로 된 부분을 master로 바꿉니다.

sudo vim /usr/local/hadoop/etc/hadoop/core-site.xml


mapred-site 수정 (/etc/hosts)

localhost로 된 부분을 master로 바꿉니다.

sudo vim /usr/local/hadoop/etc/hadoop/mapred-site.xml


하둡 설정파일 저장

지금까지 만든 하둡 설정을 저장합니다. /usr/local/hadoop 안에 있는 모든 파일을 hadoop.tar이라는 이름으로 압축합니다.

tar -cvf hadoop.tar /usr/local/hadoop


프롬프트 이름 변경[hostname (/etc/hostname)]

vim 편집기로 접속 후 기존 값 대신에 master를 입력하고 종료합니다. 재시작 이후에 적용됩니다.

sudo vim /etc/hostname
sudo /bin/hostname -F /etc/hostname
sudo reboot



슬레이브 생성 및 설정하기

이전 글에서 우분투 설치 직후 내보내기로 만든 파일(.ova)을 가져오기를 통해 불러옵니다. putty에서의 접속을 위해 불러온 후 설정에서 네트워크 설정을 아래와 같이 바꿉니다.

image

접속후 ssh, vim, jdk를 설치합시다. host 파일도 바꿔줍니다.

인터페이스 파일(/etc/network/interfaces): 슬레이브의 ip를 고정하기 위해 설정합니다. 기존에 있는 address에서 뒷자리만 수정 후 재부팅하면 적용됩니다.

그룹 생성 및 사용자 등록후 우분투를 종료하고 내보내기로 ova파일 생성후 다시 불러오는 방식으로 동일한 슬레이브 3개를 만듭니다.



마스터 설정하기(2)

마스터로 다시 돌아와서 슬레이브의 이름을 적습니다.

sudo vim /usr/local/hadoop/etc/slaves

slave1
slave2
slave3

hdfs-site 파일도 수정합니다. 마스터에 네임노드를, slave1에 세컨더리 노드를 주도록 설정하기 위해서입니다.


<configuration>
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>file:/usr/local/hadoop/hdfs/namenode</value>
	</property>
	<property>
		<name>dfs.http.address</name>
		<value>master:50070</value>
	</property>
	<property>
		<name>dfs.secondary.http.address</name>
		<value>slave1:50090</value>
	</property>
</configuration>

slave에 인증키 배포

인증키를 배포하게 되면 마스터에서 슬레이브에 접속 시 혹은 명령을 줄 때마다 비밀번호를 일일히 입력하지 않아도 됩니다.

ssh-copy-id -i .ssh/id_rsa.pub manager@slave1

슬레이브에 하둡 설정 배포

위에서 압축한 hadoop.tar를 슬레이브로 보냅니다. 슬레이브마다 각각 압축을 해제 후 tar 파일을 지우는 명령어를 보냅니다. 슬레이브는 총 3개이므로 manager@slave 뒤 숫자만 바꾸셔서 하면 되겠습니다.

scp hadoop.tar manager@slave1:/home/manager
ssh manager@slave1 "cd /home/manager;tar xf hadoop.tar;rm hadoop.tar"

이번에는 각 슬레이브에 들어가서 하둡에 대한 폴더를 만들고 압축을 푼 폴더내용을 이동시키겠습니다. 마찬가지로 파일 이동 후 manager에 폴더 권한을 줍니다.

sudo mkdir /usr/local/hadoop
cd usr/local/hadoop
sudo mv * /usr/local/hadoop/
sudo chown -R manager:hadoop /usr/local/hadoop/

각 슬레이브의 .bashrc에서도 하둡 관련 export 내용을 맨 밑에 추가합니다.

sudo vim .bashrc

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME

그리고 datanode 폴더를 만들고 권한 부여 후 hdfs-site.xml를 수정합니다.

sudo mkdir /usr/local/hadoop/hdfs/datanode
sudo chown -R manager:hadoop /usr/local/hadoop/hdfs/
sudo mv * /usr/local/hadoop/etc/hadoop/hdfs-site.xml


<configuration>
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:/usr/local/hadoop/hdfs/datanode</value>
	</property>
</configuration>

분산 노드 실행

이제 master로 돌아와서 아래 명령어들을 실행합니다.

hadoop namenode -format
start-all.sh

그 다음에 master와 slave1, 2, 3에서 jps를 실행합시다. 정상적으로 작동하면 기본적인 설정은 완료됩니다.

image