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
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
텍스트 편집기의 줄 번호가 표시되도록 설정