본문 바로가기

Hadoop

Hadoop 구축 & YARN 구동




1. 전체적인 구성 


   아래와 같은 사양으로 리눅스설치, 파티셔닝, 서비스를 구축하였습니다.


모든 서버 (hadoop1~3) 동일

version

CentOS 6.8 (64bit)

memory

4GB

CPU core

2core

Hardware

VirtualBox

partition

Disk(30GB)

/boot

1GB

LVM (vg00)

29GB

swap (lv_swap)

2GB

/ (lv_root)

27GB

package

Dasktop mode (GUI 환경)

JAVA version

1.8.0_121

Hadoop version

hadoop-2.7.4

Spark version

spark-2.4.0-bin-hadoop2.7

Python version

python 3.6.6 (pyspark 사용)



2. Hadoop  & YARN 


아파치 하둡(Apache Hadoop, High-Availability Distributed Object-Oriented Platform)은 대량의 자료를 처리할 수 있는 큰 컴퓨터 클러스터에서 동작하는 분산 응용 프로그램을 지원하는 프리웨어 자바 소프트웨어 프레임워크입니다.

 

오류발생 시 자동으로 복구하는 기능이 있으며 시스템 작동을 멈추지 않아 전체 시스템 사용성에 영향이 적습니다. 한번 저장된 데이터는 수정할 수 없고 스트리밍 방식으로 접근하여 읽기만 가능하여 데이터 무결성을 유지합니다. 또한 마스터서버에서 데이터의 메타데이터를 저장하고 다수의 슬레이브 노드에 복제 데이터도 함께 저장해서 데이터 유실을 방지할 수 있습니다.

 

하둡은 3가지로 구성되어 있습니다.


1. Hadoop Commo: 다른 하둡 하위 프로젝트들에서 공통으로 사용되는 유틸리티들을 포함

2. Hadoop Distributed File System (HDFS : 하둡 분산 파일 시스템): 애플리케이션 데이터에 접근할 때 높은 처리량을 지원하는 분산 파일

3. Hadoop MapReduce(하둡 맵리듀스): 컴퓨터 클러스터에서 대용량 데이터의 분산 처리를 위한 프로그래밍 모델로 작은 단위의 작업을 엄청나게 많이 해야 할 때 사용할 수 있는 programming model

 

리눅스 기반에서 하둡 시스템을 사용하는 것은 구축비용이 저렴하고 웹 로그나 웹 크롤러에 의해 발생한 예측 불가능한 데이터를 다중 작업으로 저장하고 분산처리 하는 것에 용이하며 3가지 모드가 있습니다.

 

1. Standalone 모드 (독립실행)

기본 모드로 로컬 머신에서만 실행된다. 다른 노드와 통신할 필요가 없기 때문에 standalone 모드에서는 HDFS를 사용하지 않고 다른 데몬들도 실행시키지 않는다. 독립적으로 MapReduce 프로그램의 로직을 개발하고 디버깅합니다.

2. Pseudo-distributed 모드 (가상분산)

클러스터가 한 대로 구성되어 있고, 모든 데몬 역시 이 한 대의 컴퓨터에서 실행된다. 이 모드는 코드 디버깅 시 standalone 모드에서의 기능을 보완할 수 있는데, 메모리 사용정도, HDFS 입출력 관련 문제, 다른 데몬과의 상호작용에서 발생하는 일을 검사할 수 있습니다.

3. Fully distributed 모드 (완전분산)

모든 기능이 갖추어진 클러스터 구성이며 namenode(master)datanode(slave) 서버로 나뉘며 분산 저장과 분산 연산의 장점을 누릴 수 있습니다.


테스트로는 3번째인 완전분산을 구축할 것입니다. 

 

YARN(Yet Another Resource Nagotiator)은 하둡 2.0부터 제공되는 리소스 관리 플랫폼으로 어플리케이션에 필요한 리소스(CPU, 메모리, 디스크 등)를 할당하고 모니터링 하는 업무이며 MapReduce의 단점을 극복하기 위해 개발되었습니다.



3. Hadoop & YARN 구축



 1. 하둡 계정 생성 & 패스워드 설정


#useradd hadoop

#passwd hadoop

 

2. SSH 설정 (추후 hadoop 서버 끼리 통신 할 때 사용)


#su - hadoop

$ssh-keygen -t rsa

$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

>> 자신의 공개키를 다른 서버에게 공유하기 위해 별도의 파일을 만듦

$ssh-copy-id -i [hadoop계정]@[hadoop 서버 호스트명 & IP주소]

>> 각 노드로 배포

 

3. 하둡 설치 및 설정파일(.xml) 수정


#su - hadoop

$tar zxvf hadoop-2.7.4.tar.bz

$ln -s hadoop-2.7.4 hadoop

$mkdir ./hdfs

$mkdir /apps/hadoop/hdfs/namenode (데이터를 저장하는 master)

$mkdir /apps/hadoop/hdfs/datanode (데이터를 저장하는 slave)

$mkdir /apps/hadoop/hdfs/pids (임시로 데이터를 저장하는 경로)

$cd /home/hadoop/apps/hadoop/etc/hadoop >> 이동하여 아래 파일 수정


hadoop-env.sh

Hadoop 실행하는 쉘스크립트 파일 (JDK Path, Classpath, 데몬 옵션 등을 설정)

masters

namenode 서버 설정

slaves

datanode 서버 설정

core-site.xml

HDFSMapReduce에서 공통적으로 사용할 정보 설정(hdfs-sitemapred-site의 공통 설정)

hdfs-site.xml

HDFS에서 사용할 환경 정보를 설정

mapred-site.xml

MapReduce에서 사용할 환경 정보를 설정

yarn-site.xml

맵 과정에서 각 서버에게 작업을 리듀스 하고 데이터를 합칠 때 사용할 로직 설정 (클러스터 분배)

 

>> 각 파일의 자세한 설정은 첨부 파일 참고하시면 됩니다.

Hadoop&YARN 파일 설정.txt



4. JAVA & 하둡 환경변수 설정

#vi /etc/profile

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

export JAVA_HOME=/usr/local/java

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.4

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

 

#source /etc/profile

>> 자바, 하둡의 명령어를 쓸 수 있도록 설치된 경로 설정 & 적용



5. 하둡 배포,포맷,실행


$ pwd

/home/hadoop/apps

$scp -rp hadoop [hadoop계정]@[각서버IP&호스트네임]:/home/hadoop/apps

$ ./bin/hadoop namenode -format

$ ./bin/start-all.sh

 

6. 확인


# jps


[hadoop1]                                       [hadoop3]

2256 ResourceManager                      9879 Jps

1913 NameNode                              1722 DataNode

14702 Jps                                     3856 NodeManager



[hadoop2]

1921 DataNode

2771 NodeManager

4756 Jps

2443 SecondaryNameNode


 >> JobTracker는 클러스터 전체의 리소스 관리 및 작업 스케쥴링과 모니터링을 하는 기능이고 

      TaskTrackerslave node에서 mapreduce작업을 수행합니다.


>> YARN(하둡 2.0)에서는JobTracker의 기능은 ResourceManager 프로세스로 TaskTracker의 기능은 NodeManager가 대신합니다. 

 

   # yarn node list


18/10/17 20:43:33 INFO client.RMProxy: Connecting to ResourceManager at hadoop1/192.168.217.11:8032

Total Nodes:2

Node-Id Node-State Node-Http-Address Number-of-Running-Containers

hadoop2:35562 RUNNING hadoop2:8042 0

hadoop3:40275 RUNNING hadoop3:8042 0

 

>> 웹으로 확인가능

 

http://hadoop1:50090 (master server)

http://hadoop2:50070 (secondary server)

http://hadoop1:8088 (yarn cluster)




>> active 서버를 확인 할 수 있으며 아래와 같이 노드 2개가 붙어 있습니다.



>> YARN으로 클러스터링 되어 active 서버에 node가 두개 붙어 있는 것을 확인 할 수 있습니다.






여기까지 hadoop 설치 및 yarn 구동 방법이였습니다.





'Hadoop' 카테고리의 다른 글

Spark standlone 모드 설정  (0) 2018.12.18
Spark 설치 & YARN과 연동  (1) 2018.12.17