본문 바로가기
Server-side 개발 & 트러블 슈팅/🐘 Hadoop (하둡)

[Hadoop] 하둡 HDFS 실습 환경 설정 (Fully Distributed 모드)

by 코딩하는 동현 2025. 4. 14.

Hadoop Fully Distributed Mode + HDFS Setup 가이드

1. Hadoop 실행 모드 소개

Standalone Mode

  • 모든 프로세스를 단일 JVM에서 실행하며, HDFS를 사용하지 않음
  • 개발 및 테스트에 적합
  • core-site.xml, mapred-site.xml, hdfs-site.xml 등에 설정 없음 → 로컬 파일 시스템 사용

Fully Distributed Mode

  • 여러 노드에 Hadoop 구성요소를 분산 설치하여 운영하는 방식
  • 대규모 데이터 처리 환경에 적합
  • 장점:
    • 고가용성: 일부 노드 장애 시에도 시스템 운영 가능
    • 확장성: 노드 추가로 시스템 확장 가능
    • 병렬 처리 효율: 분산 저장과 MapReduce 기반 동시 처리

2. Hadoop 주요 모듈 구조

HDFS (Hadoop Distributed File System)

  • NameNode: 메타데이터 관리 (파일 위치, 구조 등)
  • DataNode: 실제 데이터 저장 및 입출력
  • Secondary NameNode: NameNode 보조, 메타데이터 주기적 백업

YARN (Yet Another Resource Negotiator)

  • ResourceManager: 자원 할당 및 작업 스케줄링 총괄
  • NodeManager: 개별 노드의 자원 상태 모니터링

MapReduce

  • Map: 데이터를 조각내 병렬 처리하여 중간 결과 생성
  • Reduce: 중간 결과를 취합하여 최종 결과 생성

Hadoop Common

  • 공통 유틸리티, 라이브러리 제공

3. 환경 변수 설정

/etc/environment 수정

/etc/environment란?

  • /etc/environment로그인 세션이 시작될 때 로드되는 환경 설정 파일이다.
  • 일반적으로 PATH, JAVA_HOME, LANG 등의 전역 환경 변수(global environment variable)를 설정하는 데 사용된다.
  • 이 파일은 bashrc, profile과 달리 쉘 스크립트가 아닌 key=value 형식의 단순한 설정만을 지원한다.

Hadoop이나 Java 같은 프로그램을 실행하기 위해서는, 시스템이 해당 프로그램의 설치 경로를 알아야 한다.

이때 /etc/environment에 환경 변수를 추가해주면 시스템 전체에서 해당 프로그램을 사용할 수 있게 된다.

sudo vi /etc/environment

내용 추가:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-arm64" # 맥일 경우
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" # 윈도우일 경우

적용:

source /etc/environment

 

~/.bashrc 수정

vi ~/.bashrc

내용 추가:

# java env
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-arm64" # 맥일 경우
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" # 윈도우일 경우
export JRE_HOME=${JAVA_HOME}/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

# hadoop env
export HADOOP_HOME=/home/{your_id}/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar

적용:

source ~/.bashrc

Hadoop 내부 java 설정

sudo vi /home/{your_id}/hadoop/etc/hadoop/hadoop-env.sh

내용:

export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-arm64" # 맥일 경우
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" # 윈도우일 경우

4. SSH 설정

OpenSSH 설치

sudo apt install openssh-server

RSA 키 생성 (모든 노드)

ssh-keygen -t rsa

공개키를 Slave에 전송 (Master 기준)

scp ~/.ssh/id_rsa.pub {your_id}@slave:~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub {your_id}@slave2:~/.ssh/authorized_keys

5. /etc/hosts 설정 (모든 노드에서)

/etc/hosts 파일이란?

  • 도메인 이름을 IP 주소와 매핑해주는 시스템 내부 DNS 역할
  • IP 주소를 사용하지 않고도 master, slave 이름으로 노드를 식별할 수 있도록 설정함

편집

sudo vi /etc/hosts

예시:

192.168.56.101 master
192.168.56.102 slave
192.168.56.103 slave2

적용 후 재부팅:

reboot

6. Hadoop 클러스터 설정

workers 파일 설정 (Master 노드)

cd ~/hadoop/etc/hadoop/
sudo vi workers

내용:

slave
slave2

 

core-site.xml 설정

core-site.xml이란?

  • Hadoop의 공통 설정 정보를 담고 있는 XML 형식의 설정 파일
  • 모든 Hadoop 컴포넌트(NameNode, DataNode, YARN 등)가 공통으로 사용하는 설정을 포함한다
  • 예: 기본 파일 시스템 위치, I/O 설정, 로그 경로, RPC 포트, 버퍼 크기

파일 위치:$HADOOP_HOME/etc/hadoop/core-site.xml

✅ HDFS 기본 파일 시스템 지정

vi core-site.xml
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
  </property>
</configuration>
  • fs.defaultFS: 기본 파일 시스템의 주소를 지정
  • 보통 NameNode가 실행 중인 호스트:포트 형태
  • 예: hdfs://master:9000master라는 노드에서 NameNode가 9000 포트로 실행 중이라는 뜻

 

hdfs-site.xml 설정

hdfs-site.xml이란?

  • Hadoop에서 HDFS 기능에 한정된 설정을 담당하는 XML 구성 파일
  • HDFS는 데이터를 여러 DataNode에 분산 저장하고 복제하는데, 이러한 동작 방식에 필요한 세부 설정이 이 파일에 포함된다

파일 위치:$HADOOP_HOME/etc/hadoop/hdfs-site.xml

vi hdfs-site.xml
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/{your_id}/hadoop/hdfs/namenode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/{your_id}/hadoop/hdfs/datanode</value>
  </property>
</configuration>

 

  • NameNode가 파일 시스템의 메타데이터(파일 이름, 블록 정보 등)를 저장하는 디렉토리 경로
  • 반드시 로컬 디렉토리 경로여야 하며, 사전에 디렉토리를 생성해 두는 것이 좋다
  • 실제 HDFS 데이터를 저장할 DataNode의 경로
  • 마찬가지로 로컬 디렉토리를 생성해 두어야 한다

 

디렉토리 권한 변경 (모든 노드)

chown -R {your_id}:{your_id} /home/{your_id}/hadoop

 

설정 파일 복사 (Master → Slave)

scp -r /home/{your_id}/hadoop/etc/hadoop/* {your_id}@slave:/home/{your_id}/hadoop/etc/hadoop/
scp -r /home/{your_id}/hadoop/etc/hadoop/* {your_id}@slave2:/home/{your_id}/hadoop/etc/hadoop/

 

yarn-site.xml 설정 (Slave 노드)

yarn-site.xml이란?

  • Hadoop 클러스터의 자원 관리 계층인 YARN의 설정 파일
  • ResourceManager와 NodeManager가 어디서 실행되고, 어떻게 통신할지를 지정함
  • 주로 ResourceManager의 호스트 위치와 NodeManager의 리소스 제한을 설정

파일 위치: $HADOOP_HOME/etc/hadoop/yarn-site.xml

vi yarn-site.xml
<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>master</value>
</property>
  • ResourceManager가 실행되는 호스트의 이름
  • /etc/hosts 파일에서 설정한 별칭과 일치해야 함
  • 보통 master 노드에 ResourceManager가 배치된다

7. Hadoop 시작 및 종료

NameNode 포맷 (Master에서 최초 1회)

hdfs namenode -format

클러스터 시작

start-dfs.sh
start-yarn.sh

정상 실행 확인 (모든 노드)

jps

클러스터 종료

stop-dfs.sh
stop-yarn.sh

8. HDFS 실습 명령어

디렉토리 생성

hdfs dfs -mkdir /temp

로컬 → HDFS 업로드

hdfs dfs -put /home/{your_id}/hadoop/input/test1.txt /temp/
hdfs dfs -put /home/{your_id}/hadoop/input/test2.txt /temp/

저장된 파일 확인

hdfs dfs -ls /

이 문서는 VM 기반의 Ubuntu 환경에서 Fully Distributed Hadoop 및 HDFS 클러스터를 구축하고 운영하기 위한 전체 과정을 정리한 것이다.

오류 없이 구축되었는지 확인하려면 각 단계에서 jps, hdfs dfs -ls / 등의 명령어로 상태 점검을 병행하는 것이 좋다.

반응형

댓글