programming/hadoop

[Hadoop] 하둡 설치

2. 하둡 설치

 

2.1 VMPlayer 설치

VMPlayer에는 Hadoop Multi Cluster 구축 실습에 필요한 네트워크 설정 기능이 없으므로 VMware workstation Pro의 30일 평가판을 다운로드받아 실습

 

VMware workstation Pro(정식버전)을 설치하면 기존에 설치한 VMPlayer는 삭제됨(VMPlayer가 포함되어 있음)

 

멀티 클러스터를 구축해야 하므로 에러가 나거나 가상머신을 복제하여 작업해야 할 경우가 생기므로 Centos를 설치한 후 백업본을 만들어둘 것

 

 

2.2 하둡 개발 환경 설정

2.2.1 VMWare player를 이용하여 가상머신에 Centos 7 설치

 

2.2.2 Multi Cluster를 구성하기 위해 가상머신 복제

CPU i5, RAM 16GB 기준

master 1대 - 메모리 4GB, HDD 50GB

slave 3대 - 메모리 1GB, HDD 50GB

 

CPU i5, RAM 8GB 기준

master 1대 - 메모리 1GB, HDD 40GB

slave 3대 - 메모리 512MB, HDD 40GB

 

가상머신이 설치된 원본 디렉토리를 복사하여 만든다.

D:\Centos\backup - Centos 7 백업용 디렉토리(리눅스 설정에 에러가 있을 경우에 대비한 백업 디렉토리)

D:\Centos\Master - 네임노드

D:\Centos\Slave1 - 데이터노드1

D:\Centos\Slave2 - 데이터노드2

D:\Centos\Slave3 - 데이터노드3

VMware Player에서 로딩한 후 세팅에 들어가서 이름을 바꾼다.

 

최초 로딩할 때 copied it를 클릭한다.

 

2.2.3 JDK 설치

 

2.2.4 하둡 설치

2018. 12월 현재 하둡 최신 버전은 3.1.1 이며 여기서는 2.9.0으로 실습

 

https://hadoop.apache.org 사이트에서 hadoop-2.9.0.tar.gz 다운로드(binary 버전)

 

https://apache.tt.co.kr/hadoop/common/hadoop-2.9.0/hadoop-2.9.0-src.tar.gz

 

압축을 풀어서 /home/centos/hadoop-2.9.0 로 옮김

 

2.2.5 하둡 환경설정

HADOOP_HOME을 환경변수에 추가

gedit /etc/profile

 

하둡 관련 설정을 추가한다.
export JAVA_HOME=/usr/local/jdk1.8
export JAVA_OPTS="-Dfile.encoding=UTF-8"
export CLASSPATH="."
export HADOOP_HOME=/home/centos/hadoop-2.9.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"

 

변경된 설정을 시스템에 적용시킨 후 재부팅

source /etc/profile

reboot

 

 

2.3 실습1 - Single Node(단독모드)

하둡의 설정을 변경하지 않은 상태에서 하둡에 내장된 예제 jar 파일을 이용한 테스트

 

하둡 설정 파일들을 input 디렉토리로 복사

mkdir /home/centos/hadoop_test
cd /home/centos/hadoop_test
mkdir input
cp $HADOOP_HOME/etc/hadoop/*.xml input

 

wordcount 프로그램을 실행하여 hadoop-env.sh 파일의 단어 갯수 분석

hadoop jar

$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar wordcount $HADOOP_HOME/etc/hadoop/hadoop-env.sh wordcount_output

 

실행결과 파일 목록 확인

ls -la wordcount_output/*

 

실행결과 확인

cat wordcount_ouput/part-r-00000
# or
cat wordcount_output/*

 

다시 한번 실행하면 에러가 발생함(output 디렉토리가 중복되면 안됨)

다시 실행하려면 wordcount_output 디렉토리 삭제 후 재실행

rm -rf wordcount_output

 

 

2.4 실습2 - Single Node Cluster(모조 분산 모드)

2.4.1 ssh 설치

ssh 설치

yum -y install openssh-server

 

비밀번호를 생략한 ssh 로그인 설정

공개키와 비밀키 생성

ssh-keygen -t rsa -P ""

 

공개키를 ssh의 인증키로 등록

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

 

인증키의 permission 설정(생략 가능)

chmod 600 ~/.ssh/authorized_keys

 

ssh 접속 확인

ssh localhost

 

2.4.2 hadoop-env.sh 수정

gedit $HADOOP_HOME/etc/hadoop/hadoop-env.sh

 

25번 라인 JDK 경로 수정: export JAVA_HOME=/usr/local/jdk1.8

텍스트 편집기의 줄 번호가 표시되도록 설정(텍스트 편집기 - 기본 설정 - 줄 번호 표시 체크)

 

2.4.3 core-site.xml 수정(네임노드를 설정하는 파일)

gedit $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://localhost:9000</value>
    </property>
</configuration>

 

2.4.4 hdfs-site.xml 수정(파일 복제 옵션)

gedit $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
	<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>
</configuration>

 

2.4.5 네임노드 포맷

hdfs namenode -format

 

2.4.6 하둡 클러스터 시작

start-dfs.sh

 

2.4.7 프로세스 확인

 

2.4.8 웹브라우저에서 확인

http://localhost:50070/

 

2.4.9 ResourceManager와 NodeManager 시작

start-yarn.sh

 

2.4.10 웹브라우저에서 ResourceManager 실행 확인

http://localhost:8088

 

2.4.11 분석 프로그램 실행(wordcount)

hadoop-env.sh 파일의 단어 갯수 분석

 

맵리듀스 job을 실행하기 위해서는 HDFS 디렉토리를 만들어야 함

hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/root
hdfs dfs -mkdir /user/root/conf
hdfs dfs -mkdir /input

hdfs dfs -copyFromLocal /home/centos/hadoop-2.9.0/README.txt /input

hdfs dfs -ls /input

rm -rf wordcount_output

hadoop jar
$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar wordcount /input/README.txt ~/wordcount-output

hdfs dfs -ls ~/wordcount-output

 

실행결과 확인

hdfs dfs -cat ~/wordcount-output/part-r-00000

 

다시 실행하게 되면 에러가 발생하므로 output directory를 삭제한 후 실행해야 함

 

 

2.5 실습3 - Multi Node Cluster(완전분산모드)

2.5.1 VMplayer의 경우 복제 기능이 없으므로 가상머신이 설치된 디렉토리를 복사하여 아래와 같이 디렉토리 구성

D:\centos\backup

D:\centos\master

D:\centos\slave1

D:\centos\slave2

 

2.5.2 가상머신을 복사할 경우 반드시 디렉토리 전체를 모두 복사해야 함

 

2.5.3 VMware Workstation(정식버전)의 가상머신 복제 방법

1대를 설치한 후 vmware에서 clone 복제

Manage - Clone

 

2.5.4 네트워크 설정 작업

Edit] - [Virtual Network Editor]

 

VMnet8 - NAT를 선택한 후

Subnet IP: 192.168.10.0으로 변경

 

2.5.5 호스트 설정(모든 노드에서 실행)

gedit /etc/hosts

 

127.0.0.1 localhost
192.168.10.1 master
192.168.10.2 slave1
192.168.10.3 slave2
192.168.10.4 slave3

 

hosts와 hostname을 일치시키는 작업

master에서 실행

gedit /etc/hostname

 

master

 

slave1에서 실행

gedit /etc/hostname

 

slave1

 

slave2에서 실행

gedit /etc/hostname

 

slave2

 

slave3에서 실행

gedit /etc/hostname

 

slave3

 

모든 노드에서 실행

/bin/hostname -F /etc/hostname

 

터미널을 닫았다가 다시 열면 hostname이 변경됨

 

재부팅(모든 노드에서 실행)

reboot

 

재부팅 후 hostname이 변경되었는지 확인(모든 노드)

hostname

 

ping 테스트

master에서 실행

ping slave1
ping slave2
ping slave3

 

slave1에서 실행

ping master
ping slave2
ping slave3

 

slave2에서 실행

ping master
ping slave1
ping slave3

 

slave3에서 실행

ping master
ping slave1
ping slave2

 

2.5.6 SSH 공개키 복사

로컬 서버 → 원격 서버로 파일 전송

scp [옵션] [원본 경로 및 파일] [계정명]@[원격지IP주소]:[전송할 경로]

scp /home/me/wow.html abc@111.222.333.444:/home/abc/

 

- master에서 생성한 공개 키를 모든 datanode로 복사(master에서 실행)

scp -rp ~/.ssh/authorized_keys root@slave1:~/.ssh/authorized_keys
scp -rp ~/.ssh/authorized_keys root@slave2:~/.ssh/authorized_keys
scp -rp ~/.ssh/authorized_keys root@slave3:~/.ssh/authorized_keys

 

2.5.7 노드들간의 SSH 접속 설정

namenode에서 실행

ssh master

exit

ssh slave1

exit

ssh slave2

exit

ssh slave3

exit

 

yes를 입력

 

slave1, slave2, slave3에서도 반복 작업

 

2.5.8 hadoop-env.sh 수정(master에서 실행)

gedit $HADOOP_HOME/etc/hadoop/hadoop-env.sh

 

텍스트 편집기의 줄 번호가 표시되도록 설정