Bigdata

하둡 완전분산 환경 설치 및 설정 (hadoop cluster setup)

안녕하세요, (주)씨앤텍시스템즈 신윤중입니다. 본 포스팅에선 하둡 완전분산환경(hadoop cluster setup)을 구축하는 방법과 간단하게 운영환경을 테스트 하는 과정을 소개하겠습니다. 

 

글의 구성은 다음과 같습니다.

1. Hadoop 소개

2. virtualbox 가상 머신에 centos 7 설치 및 기본 환경 설정

3. hadoop설정 및 hdfs, yarn운영 환경 구축

 


1. Hadoop 소개

하둡은 기존 RDB(관계형데이터베이스)로는 대용량 비정형 데이터를 처리하는데 발생하는 한계를 극복하고자 탄생했습니다. 구글에서 발표한 구글파일시스템(Google filesystem: GFS)과 MapReduce논문을 참고하여 개발되었고 현재 Apache재단의 오픈소스 프로젝트로 개발되고 있습니다.

하둡은 다수의 머신들을 클러스터로 구성해서 구축됩니다. 단일 하이엔드 서버를 이용하는 대신 다중 서버를 사용하고 다중 서버에서 대용량 데이터를 병렬 프로세스로 분산하여 처리합니다. 즉, 하나의 고성능 시스템 대신 일반성능의 머신들로 구축하고 대형 규모의 작업을 분산하여 처리하는 것입니다.

아래 표로 하둡의 버전 업그레이드 기간동안 주목할만한 기능의 추가 및 변화를 정리하였습니다.

Hadoop v1 기본 아키텍처 정립
분산저장(HDFS) - NameNode, DataNode
병렬처리(MapReduce) - Job Tracker, Task Tracker
JobTracker의 병목현상 발생(자원관리, 작업할당, 작업관리의 역할)
클러스터당 최대 4000개의 노드 구축 가능
Hadoop v2 병목현상 해소를 위한 YARN도입
다양한 분산 컴퓨팅 환경/서비스 지원
클러스터당 1만개 이상의 노드 구축 가능
Hadoop v3 erasure coding도입으로 데이터 저장의 효율성 증가
YARN 타임라인 v2개선으로 기존보다 많은 정보 확인 가능
2개 이상의 NameNode 지원
(High Availability, NameNode장애시 클러스터의 안정성 증가)

 

2. virtualbox 가상 머신에 centos 7 설치 및 기본 환경 설정

분산환경 구축을 위한 머신은 virtualbox에서 centos 7을 설치한 가상머신 5개로 진행하도록 하겠습니다. 자세한 설치 및 환경설정 과정은 아래에서 계속됩니다. 또한 아래 내용은 특별한 언급이 없다면 5개 머신 모두 동일하게 수행합니다.

 

아래 링크에서 필요한 설치파일을 다운로드 합니다.

Centos 7: www.centos.org/download/

 

Download

As you download and use CentOS Linux, the CentOS Project invites you to be a part of the community as a contributor. There are many ways to contribute to the project, from documentation, QA, and testing to coding changes for SIGs, providing mirroring or ho

www.centos.org

Virtualbox: www.virtualbox.org/wiki/Downloads

 

Downloads – Oracle VM VirtualBox

Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By downloading, you agree to the terms and conditions of the respective license. If you're looking for the latest VirtualBox 6.0 packages, see Virt

www.virtualbox.org

 

virtualbox를 설치하고 가상머신을 생성합니다. 

가상머신 만들기 설정

생성된 가상머신의 설정에서 저장소 탭에 centos 7 설치를 위한 디스크 iso파일을 삽입하고 부팅해서 운영체제를 설치합니다.

운영체제 설치를 위한 디스크 삽입

centos 7 minimal은 최초설치시 편의를 위한 도구나 환경세팅이 안되어있습니다. 아래 내용은 관련 사항들을 설치하거나 설정하는 과정이므로 선택적으로 수행하셔도 됩니다. 

  • 네트워크 설정

더보기

# ip addr 명령어로 본인 머신의 네트워크 id확인

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 네트워크 설정파일 아래와 같이 수정

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=00b1b9d2-a5f2-4a80-86e9-cf7a658920e0
DEVICE=enp0s3
ONBOOT=yes

# systemctl restart network 명령어로 네트워크 재시작 및 네트워크 연결 확인

 

  • 하둡환경 구축을 위한 사용자/디렉토리 생성

더보기

사용자 생성

디렉토리 생성 및 권한 변경

사용자 생성

# useradd hadoop	사용자 'hadoop' 추가
# passwd hadoop 	사용자 'hadoop'의 password설정
# groupadd hadoop 	그룹 'hadoop' 추가
# usermod -G hadoop hadoop 	사용자 'hadoop'을 그룹 'hadoop'에 추가
# id hadoop 	사용자 'hadoop' 정보 확인

디렉토리 생성 및 권한 변경

# mkdir -p /opt/jdk/	추후 java 심볼릭 링크 및 홈, PATH 설정을 위해 생성
# mkdir -p /opt/hadoop/ 	하둡 홈 디렉토리
# mkdir -p /data/tmp 	추후 하둡 환경에서 발생하는 로그 등의 파일 저장

# chown -R hadoop:hadoop /opt/jdk 	소유자/소유그룹 변경, 옵션 -R으로 하위 디렉토리/파일까지 모두 적용
# chown -R hadoop:hadoop /opt/hadoop
# chown -R hadoop:hadoop /data/tmp

 

  • 필요 패키지 설치 및 설정

더보기

필요 패키지 설치

# yum install -y net-tools
# yum install -y vim-enhanced
# yum install -y wget
# yum install -y openssh-server openssh-clients openssh-askpass

# yum update -y

~/.bash_profile파일에 vim편집기 alias변수 추가

$ vi ~/.bash_profile

아래 내용 추가
# alias setting
alias vi='vim'
alias ll='ls -al'

 

자바 설치 및 심볼릭 링크 설정

# yum install java-1.8.0-openjdk-devel.x86_64	javac 설치
# which javac 	javac 위치 확인
 # readlink -f /usr/bin/javac	jdk 실제경로 확인

위에서 생성한 /opt/jdk에 링크 설정

# ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64 /opt/jdk/current로 심볼릭 링크 설정

 자바 환경변수 정의

~/.bash_profile파일에 아래 변수 추가

$ vi ~/.bash_profile

아래 내용 추가
export JAVA_HOME=/opt/jdk/current
export PATH=$PATH:$JAVA_HOME/bin

 

하둡 설치

# cd /opt/hadoop/ 	하둡 설치를 위해 상단에서 생성한 하둡 홈 디렉토리로 이동
# wget http://apache.mirror.cdnetworks.com/hadoop/common/stable/hadoop-3.2.1.tar.gz 	하둡설치
# tar xvzf hadoop-3.2.1.tar.gz	설치한 하둡 압축풀기
# ln -s /opt/hadoop/hadoop-3.2.1 /opt/hadoop/current	경로 설정 용이성을 위해 심볼링 링크 설정

~/.bash_profile파일에 하둡 환경변수 설정

$ vi ~/.bash_profile

아래 내용 추가
export HADOOP_HOME=/opt/hadoop/current
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

여기까지 모든 머신(5개)에 대해 동일하게 수행합니다.

 

3. hadoop설정 및 hdfs, yarn운영 환경 구축

1장에서는 가상머신의 생성, centos 7 설치, 기본 패키지 설치에 대한 내용을 다뤘습니다. 본 장에서는 설치한 hadoop의 설정파일을 수정하고 실제 hdfs운영 환경을 구축하는 내용을 다루겠습니다. 우선 클러스터내 머신들의 네트워크 환경 구축을 위해 호스트명 정의, ssh통신을 위한 설정을 수행하겠습니다.

 

호스트 명명

각 머신에서 아래 명령어로 hostname을 명명합니다.

$ hostnamectl set-hostname [호스트명]

그리고 /etc/hosts파일에 모든 머신에서 클러스터에 포함된 머신들의 IP주소 hostname을 정의해줍니다. 제 클러스터 환경에선 아래 그림과같이 master01 ~ slave03으로 정의했습니다.

vi /etc/hosts

 

ssh키 등록

master노드에서 ssh키를 생성하고 slave에 접근할 수 있는 환경을 만듭니다. 본 포스팅에서 구축하려는 master-slave 아키텍처는 아래 그림과 같습니다. 따라서 master01과 master02에서 각키를 생성하고 slave01~03에 등록을 해줘야합니다.

NameNode(master01-02)에서 ssh키 생성
master01 $ ssh-keygen -t rsa -P ""
master01 $ ssh-copy-id master02
master01 $ ssh-copy-id slave01
master01 $ ssh-copy-id slave02
master01 $ ssh-copy-id slave03

master02 $ ssh-keygen -t rsa -P ""
master02 $ ssh-copy-id slave01
master02 $ ssh-copy-id slave02
master02 $ ssh-copy-id slave03

아래 그림은 slave노드중 하나인 slave01머신을 예시로 보이며, authorized_keys파일 내에 명시된 목록입니다. 자신에게 접근하는 것을 허락한 머신들을 보입니다. master01머신의 hadoop계정, master02머신의 hadoop계정의 접근을 허용합니다.

 

하둡 설정파일 편집

$HADOOP_HOME/etc/hadoop디렉토리에 포함된 설정파일들 중에 본 포스팅에서 수정할 파일들은 총 5개 입니다. 

- hadoop-env.sh

- core-site.xml

- hdfs-site.xml

- yarn-site.xml

- mapred-site.xml

각 머신별로 /opt/hadoop/current/etc/hadoop/ 경로 내의 설정파일을 아래와 같이 편집합니다.

 

모든 노드  core-site.xml  
NameNode hdfs-site.xml  
SecondaryNameNode hdfs-site.xml  
ResourceManager  yarn-site.xml  
NodeManager  yarn-site.xml  
ResourceManager(NameNode)  mapred-site.xml  
NodeManager(DataNode)  mapred-site.xml  

 

하둡 실행

아래 명령어로 하둡을 실행하고 report태그로 구축한 하둡 파일시스템의 기본적인 정보와 통계를 출력 합니다.

start-dfs.sh
start-yarn.sh
hdfs dfsadmin -report

파일시스템 사용량, 저장된 데이터블럭의 상태(under replicated, corrupt block) 데이터노드 상태 등의 정보를 파악할 수 있습니다. 또한 web에서 master 머신(NameNode)의 9870포트로 접속하면 아래와 같이 GUI 인터페이스로 하둡의 상태를 확인할 수 있습니다. 

[master host name or IP]:9870

 

728x90