먼저저 하둡 클러스터의 핵심인 마스터 노드(Master Node)와 슬레이브 노드(Slave Node)가 하둡 분산 시스템(HDFS)에서 어떤 의미와 역할을 갖는지 알아보자.
마스터와 슬레이브의 역할
하둡은 거대한 데이터를 한 대의 컴퓨터가 아닌, 여러 대의 컴퓨터에 나누어 저장하고 처리하는 기술이다. 이를 효율적으로 관리하기 위해 시스템을 지시하는 관리자(Master)와 일꾼(Slave)으로 역할을 철저히 구분한다.
1. 마스터 노드 (Master Node) - 네임노드 (NameNode)
클러스터 전체를 관리하고 통제하는 '두뇌' 역할을 한다.
- 메타데이터 관리: 사용자가 업로드한 실제 파일 데이터는 저장하지 않는다. 대신, 그 파일이 '어떤 슬레이브 노드의 어느 위치에 저장되어 있는지'에 대한 정보(메타데이터)를 관리한다.
- 작업 분배 및 상태 감시: 어떤 슬레이브에게 일을 시킬지 결정하고, 슬레이브들이 정상적으로 작동하고 있는지 끊임없이 감시한다. 마스터 노드가 고장 나면 슬레이브 노드들이 멀쩡해도 데이터를 찾을 수 없게 된다.
2. 슬레이브 노드 (Slave Node) - 데이터노드 (DataNode)
실질적인 데이터를 저장하고 계산을 수행하는 '일꾼'이면서 동시에 '창고' 역할을 한다.
- 실제 데이터 저장: 사용자가 파일을 올리면 하둡은 이를 일정한 크기(블록)로 쪼개는데, 이 조각들이 실제로 저장되는 곳이 바로 슬레이브 노드의 하드 디스크다.
- 명령 수행 및 보고: 마스터 노드가 "데이터를 저장해라" 혹은 "읽어와라"라고 명령하면 그대로 수행한다. 또한, 주기적으로 마스터 노드에게 신호를 보내 자신의 상태를 보고한다.
이처럼 마스터 노드는 슬레이브 노드들을 수시로 제어하고 데이터를 복사해 넣어야 한다. 그렇기 때문에 매번 비밀번호를 입력하지 않고도 마스터가 슬레이브에 자유롭게 드나들 수 있도록 SSH 무암호 접속을 설정하는 것이며, 모든 노드가 같은 규칙으로 움직이도록 설정 파일을 배포할 필요가 있는 것이다.
SSH 연결 - 마스터와 슬레이브 간 통신 연결
1. 마스터 노드의 SSH 키 생성 및 등록
username@master:~$ ssh-keygen -t rsa -P ""
username@master:~$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
username@master:~$ chmod +x .ssh/authorized_keys
마스터 노드가 슬레이브들을 제어하기 위해 사용할 RSA 키(key)을 만들고, 자기 자신에게도 암호 없이 접속할 수 있도록 설정한다.
- ssh-keygen -t rsa -P "" : SSH Key Generator은 SSH 프로토콜로 접속할 때 신원 확인용으로 쓸 암호화 키를 생성하는 프로그램으로, 이걸 실행하면 개인키(Private Key)와 공개키(Public Key) 한 쌍이 만들어진다. 비밀번호(Passphrase) 없는 RSA 암호화 키 쌍(공개키, 비밀키)을 생성한다. 하둡 데몬 간 자동 통신을 위해 비밀번호가 없어야 한다.
- -t rsa : Type = RSA
- -P "" : Passphrase(암호 문구) = "" (빈 문자열). 개인키(Private Key)를 사용할 때 물어볼 비밀번호를 '없음'으로 설정하는 옵션
- cat .ssh/id_rsa.pub >> .ssh/authorized_keys : 생성한 공개키를 '인증된 키 목록'에 등록하여, 자기 자신(localhost)에 접속할 때 암호를 묻지 않게 한다.
- chmod +x .ssh/authorized_keys : authorized_keys 파일에 실행 권한을 부여한다.
2. 마스터 노드의 공개키를 슬레이브 노드에 배포 (Master → Slave)
마스터 노드가 슬레이브 노드(slave1, slave2...)에 접속할 때 암호를 묻지 않도록, 마스터의 공개키를 각 슬레이브 노드에 복사해 넣는다.
username@master:~$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub username@slave1
username@master:~$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub username@slave2
- ssh-copy-id -i $HOME/.ssh/id_rsa.pub username@slave1
- ssh-copy-id (도구 이름) : SSH Key Copy Identity의 약자
- 단순히 파일을 복사(scp)하는 것과는 다르다. 이 명령어는 원격 서버에 접속해서, 가져간 공개키 내용을 상대방의 authorized_keys 파일 끝에 '이어 붙이기(Append)' 해준다.
- 또한, 파일 권한(Permission) 설정까지 자동으로 안전하게 처리해 준다.
- -i (옵션) : Identity file을 지정한다는 뜻이다. ("내가 가진 열쇠가 여러 개일 수 있는데, 그중에서 이 특정 열쇠를 복사해서 넘겨라" 라는 )
- $HOME/.ssh/id_rsa.pub : ssh-keygen으로 만든 공개키(Public key) 파일 위치. (개인키(id_rsa)를 보내는 것이 아니라 공개키를 보내야 한다는 것에 주의)
- username@slave1 : 수신자 지정. slave1이라는 컴퓨터(호스트)의 username이라는 사용자 계정으로 접속하겠다는 뜻. 이 주소로 찾아가서 위에 지정한 공개키를 등록함.
2. 슬레이브 노드 SSH 키 생성 및 마스터 노드에 등 ( Slave → Master )
같은 방법으로 이번에는 슬레이브 노드들도 각자의 키를 만들어 마스터 노드에 등록한다.
username@slave1:~$ ssh-keygen -t rsa -P ""
username@slave1:~$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub username@master
- 각 slave 노드에서 ssh-keygen 후 ssh-copy-id ... master를 수행한다.
- 이렇게 하면 마스터와 슬레이브는 서로에게 비밀번호 없이 자유롭게 접속할 수 있게 된다.
4. SSH 접속 테스트
설정이 제대로 되었는지 실제로 마스터 → 슬레이브, 슬레이브 → 마스터로 접속해 본다.
hduser@master:~$ ssh slave1
hduser@slave1:~$ exit
hduser@slave1:~$ ssh master
hduser@master:~$ exit
위와 같이 각 노드의 터미널에서 명령어를 입력했을 때 비밀번호 입력 창 없이 바로 접속되는 것을 확인하면 네트워크 준비가 완료되었다고 볼 수 있다.
5. 하둡 환경 설정 파일 수정 (마스터 노드)
하둡이 어떻게 동작할지 정의하는 설정 파일(conf 폴더 내 xml 파일들)을 마스터 노드에서 작성한다.
username@master:~$ cd /usr/local/hadoop/conf/ && ls
username@master:/usr/local/hadoop/conf$ nano masters
username@master:/usr/local/hadoop/conf$ nano slaves
username@master:/usr/local/hadoop/conf$ nano core-site.xml
username@master:/usr/local/hadoop/conf$ nano mapred-site.xml
username@master:/usr/local/hadoop/conf$ nano hdfs-site.xml
- masters, slaves 파일 편집: 누가 보조 마스터 역할을 하고, 누가 데이터 저장 노드(Slave1, Slave2)인지 명시한다.
- core-site.xml, mapred-site.xml 편집: 하둡 시스템의 주소를 localhost에서 master로 변경하여 모든 노드가 마스터를 바라보게 설정했다.
- hdfs-site.xml 편집: dfs.replication 값을 3으로 설정. 이는 데이터 블록 하나를 저장할 때 3개의 복사본을 만들어 저장하겠다는 뜻으로, 데이터 유실을 방지하는 핵심 설정이다.
6. 설정 파일 일괄 배포 (Master → Slaves)
마스터 노드에서 작성한 설정 파일들을 슬레이브 노드들에게 똑같이 복사해준다.
username@master:/usr/local/hadoop/conf$ sudo chown -R username:username /etc/hosts && sudo chown -R username:username $HADOOP_HOME/conf
username@master:/usr/local/hadoop/conf$ scp $HADOOP_HOME/conf/* username@slave1:$HADOOP_HOME/conf/
username@master:/usr/local/hadoop/conf$ scp $HADOOP_HOME/conf/* username@slave2:$HADOOP_HOME/conf/
- sudo chown -R username:username /etc/hosts && sudo chown -R username:username $HADOOP_HOME/conf :
하둡을 실행할 계정(username)이 설정 파일과 네트워크 파일을 자유롭게 수정할 수 있도록 소유을 변경- username:username : 소유자를 username(사용자)으로, 그룹을 username(그룹)으로 설정
- /etc/hosts : IP 주소와 컴퓨터 이름(master, slave1 등)을 연결해 주는 파일
- $HADOOP_HOME/conf: 하둡의 환경 설정 파일(core-site.xml 등)이 모여 있는 디렉토리
- scp $HADOOP_HOME/conf/* username@slave1:$HADOOP_HOME/conf/ : Secure Copy 명령어를 이용해 마스터의 설정 파일 전체를 Slave1, Slave2로 전송한다.
- scp : Secure Copy. SSH 프로토콜을 기반으로 하는 보안 파일 복사 명령어. cp (copy)와 비슷하지만, 내 컴퓨터 안에서만 복사하는 게 아니라 다른 노드로 파일을 보낼 때 씀. 전송되는 모든 데이터는 암호화됨.
- $HADOOP_HOME/conf/* : $HADOOP_HOME/conf 이하 모든 파일을 통째로 보냄
- [받는 쪽 컴퓨터의 로그인 ID]@[받는 노드의 이름(호스트명)] : 호스트명은 /etc/hosts 파일에 등록해 두었으면 IP 주소 대신 이름으로 찾을 수 있음.
- : (구분자) : 컴퓨터 주소(slave1)와 그 컴퓨터 내부의 폴더 경로(/conf)를 나누는 경계로 빼먹으면 파일이 전송되지 않고, 그냥 컴퓨터에 username@slave1...이라는 이상한 이름의 파일이 복사되어 생김. 반드시 찍어야 함.
- $HADOOP_HOME/conf/ : 받을 위치는 마스터 노드와 똑같은 경로($HADOOP_HOME/conf/)를 지정. 이렇게 하면 마스터의 설정 파일들이 슬레이브의 기존 설정 파일 위로 덮어쓰기(Overwrite) 된다.
이 과정이 끝나야 모든 노드가 동일한 하둡 설정을 공유하게 되며, 클러스터로서 동작할 준비가 된 것이다.
'AI Journey > 클라우드' 카테고리의 다른 글
| 도커(Docker)와 컨테이너 기술의 개념 이해하기 (2) | 2025.12.24 |
|---|---|
| Hadoop 클러스터 구축하기 part.3 - 멀티 노드 띄우고 파일 업로드하기 (0) | 2025.12.23 |
| 가상환경에서 Hadoop 클러스터 구축하기 part.1 - 호스트네임, 네트워크 설정 (0) | 2025.12.22 |
| [VMware] 가상머신 안에서 가상화를 할 때 반드시 필요한 설정 (0) | 2025.12.18 |
| 분산 파일 시스템(DFS)의 개념과 하둡(Hadoop)의 원리 (0) | 2025.12.17 |