Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

Hadoop 설치

하둡은 3가지 설치모드가 있다.
  1. Standalone : 단일 노드에서 실행한다. 테스트 및 디버깅 용도로 사용 할 수 있다.
  2. Pseudo distributed : 단일 노드에서 클러스터를 구성 할 수 있다.
  3. Full distributed : 두대 이상의 노드를 클러스터로 묶는다. 실제 운영에서 사용하는 모드다.
버츄얼박스(VirtualBox)를 이용해서 Full distirubed 모드로 설치하기로 했다.

하둡 설치환경은 아래와 같다.
  • 호스트 운영체제 : Ubuntu 16.10
  • VirtualBox 5.1.6
  • 게스트 운영체제 : Ubuntu 16.04 server (하둡 올라가는 VM)

JDK 설치

$ sudo apt-get install default-jdk
$ javac -version

기타 패키지 설치

ssh와 rsync를 설치한다.
$ sudo apt-get install ssh rsync

Hadoop 설치

hadoop.apache.org/release.html에서 2.7.3을 다운로드 했다.

링크를 클릭하면 다운로드 사이트 목록이 나온다. wget을 이용해서 다운로드 했다. 하둡은 /usr/local/haddop 디렉토리에 설치하기로 했다.
$ wget http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz 
$ tar -xvzf hadoop-2.7.3.tar.gz
$ mv hadoop-2.7.3 /usr/local/hadoop

설정 파일을 열어서 JAVA_HOME 경로를 설정한다.
$ cat /usr/local/hadoop/etc/hadoop/hadoop-env.sh
......
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
......
hadoop-env.sh 파일을 수정하는 대신 /etc/profile 이나 유저 프로파일에 JAVA_HOME 환경변수를 설정하는 방법도 있다.

클러스터 구성

아래와 같이 하둡 클러스터를 구성하기로 했다.

 하둡 클러스터 구성

hadoop01, hadoop02, hadoop03 세 대의 노드로 구성한다. 이 중 hadoop01을 마스터노드(Master node)로 설정하기로 했다. 나머지 노드들은 슬레이브 노드(Slave node)가 된다. 하둡 클러스터에서 마스터 노드는 Name node, checkpoint node, Journal node, Resource manager, JobTracker 등의 클러스터 정보를 관리한다.

 Hadoop master and slave node

위 그림에서 볼 수 있듯이 마스터 노드는 name node, secondary name node, jobtracker 데몬(마스터 데몬이라고 부르기도 한다.)으로 구성된다. 슬레이브 노드는 tasktrackerdatanode로 구성이 된다. 마스터와 슬레이브의 주요 차이점은 마스터 노드가 하둡 클러스터를 관리하기 위한 기능들을 가지는 반면, 슬레이브 노드는 HDFS(하둡파일 시스템)과 맵리듀스(MapReduce)등 데이터를 저장하고 처리하기 위한 기능을 가지고 있다는 점이다.

/etc/hosts 구성

호스트 이름으로 노드들을 찾을 수 있도록 /etc/hosts 파일을 구성한다. 모든 노드들에 아래의 설정을 추가했다.
192.168.56.100 hadoop01
192.168.56.101 hadoop02
192.168.56.102 hadoop03

하둡 유저

루트(root)계정이 아닌 일반 계정 yundream으로 하둡을 실행하기로 했다. 모든 하둡 노드에 yundream 계정을 만들었다.

ssh key 설정

마스터 노드와 슬레이브 노드는 ssh 로 통신을 한다. 마스터 노드에서 ssh key를 만들어서 슬레이브 노드에 등록하자.
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yundream/.ssh/id_rsa): 
Created directory '/home/yundream/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/yundream/.ssh/id_rsa.
Your public key has been saved in /home/yundream/.ssh/id_rsa.pub.
id_rsa.pub를 슬레이브 노드의 .ssh/autorized_keys에 등록한다.
$ cat id_rsa.pub >> $HOME/.ssh/autorized_keys
ssh public key는 슬레이브 노드들 뿐만 아니라 마스터 노드의 autorized_keys에도 등록한다. 마스터 노드에서 슬레이브 노드로 ssh 연결을 확인해 보자. 참고로 마스
$ ssh yundream@hadoop01
$ ssh yundream@hadoop02
$ ssh yundream@hadoop03

하둡 설정

하둡의 설정 파일 디렉토리는 /usr/local/hadoop/etc/hadoop다.

master (마스터노드 설정)
하둡이 멀티 노드 클러스터 환경에서 작동 할 때 2차 네임노드를 실행할 노드를 설정한다. 이 설정은 마스터 노드만 하면 된다. masters파일을 열어서(없다면 만든다) 마스터노드의 이름을 설정하자.
hadoop01

slaves (마스터노드 설정)
멀티 노드 클러스터에서 관리할 슬레이브 노드들을 설정한다. 하둡 슬레이브 노드들은 DatanodeTaskTracker 데몬이 실행된다. 이 설정은 마스터 노드만 가진다.
hadoop01
hadoop02
hadoop03
새로운 슬레이브 노드가 추가되면 여기에 호스트이름을 추가하면 된다.

*-site.xml (모든 노드)
core-site.xml, mapred-site.xml 파일을 설정한다.
  • core-site.xml
  • mapred-site.xml
이제 HDFS의 복제(리플리카) 갯수를 설정한다. 보통 3보다 크지 않게 잡는다. 이 경우 데이터 노드가 2개 이므로 2로 잡았다. hdfs-site.xml 파일을 수정하자.
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
    <description>Default block replication</description>
  </property>
</configuration>

다음으로 mapred-site.xml을 수정한다. 여기에 JobTracker(맵리듀스 마스터)의 호스트와 포트번호를 설정한다. 이 경우 마스터노드는 hadoop01일 것이다.
<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>hadoop01:54311</value>
        <description>Map Reduce jobtracker</description>
    </property>
</configuration>

마지막으로 dfs.replication 파라메터를 변경한다. 이 파라메터로 블럭들에 대한 복제(리플리카)의 갯수를 설정할 수 있다. 복제가 많을 수록 데이터를 더 안전하게 보관 할 수 있다. dfs.replication의 기본 값은 3인데, 지금 테스트 환경은 2개의 노드만 사용 하고 있으므로 dfs.replication의 값은 2로 설정한다.
<configuration>
   <property>
      <name>dfs.data.dir</name>
      <value>/opt/hadoop/hadoop/dfs/name/data</value>
      <final>true</final>
   </property>

   <property>
      <name>dfs.name.dir</name>
      <value>/opt/hadoop/hadoop/dfs/name</value>
      <final>true</final>
   </property>

   <property>
      <name>dfs.replication</name>
      <value>2</value>
   </property>
</configuration>

하둡 실행

마스터 노드에서 /usr/local/hadoop/sbin/start-all.sh 를 실행하면 된다. start-all.sh는 아래 두 개의 스크립트를 실행한다.
  1. start-dfs.sh : hdfs 데몬.
  2. start-yarn.sh : yarn 데몬. yarn 데몬은 MR을 실행한다.
start-all.sh를 실행해 보자.
$ start-all.sh 
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [hadoop01]
hadoop01: starting namenode, logging to /usr/local/hadoop/logs/hadoop-yundream-namenode-hadoop01.out
hadoop03: starting datanode, logging to /usr/local/hadoop/logs/hadoop-yundream-datanode-hadoop03.out
hadoop01: starting datanode, logging to /usr/local/hadoop/logs/hadoop-yundream-datanode-hadoop01.out
hadoop02: starting datanode, logging to /usr/local/hadoop/logs/hadoop-yundream-datanode-hadoop02.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-yundream-secondarynamenode-hadoop01.out
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-yundream-resourcemanager-hadoop01.out
hadoop02: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-yundream-nodemanager-hadoop02.out
hadoop03: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-yundream-nodemanager-hadoop03.out
hadoop01: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-yundream-nodemanager-hadoop01.out
yundream@hadoop01:/usr/local/hadoop/bin$ 
하둡 유틸리티인 jps로 실행중인 데몬을 확인 할 수 있다. 아래는 마스터 노드의 상태다.
$ jps
23848 ResourceManager
24282 Jps
23979 NodeManager
23356 NameNode
23693 SecondaryNameNode
아래는 슬레이드 노드의 상태다.
$ jps
8039 DataNode
8172 NodeManager
8287 Jps

테스트

제대로 실행 됐는지 확인해 보기로 했다. HDFS 파일 시스템의 크기를 확인해 보자.
$ hadoop fs -df -h
Filesystem             Size   Used       Available  Use%
hdfs://hadoop01:54310  10.6 G  56 K      6.1 G      0%
데이터 노드들의 상태를 확인해 봤다.
$ hadoop dfsadmin -report
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

Configured Capacity: 11398373376 (10.62 GB)
Present Capacity: 6599680000 (6.15 GB)
DFS Remaining: 6599622656 (6.15 GB)
DFS Used: 57344 (56 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0

-------------------------------------------------
Live datanodes (2):

Name: 192.168.56.102:50010 (hadoop03)
Hostname: hadoop03
Decommission Status : Normal
Configured Capacity: 5699186688 (5.31 GB)
DFS Used: 28672 (28 KB)
Non DFS Used: 2398453760 (2.23 GB)
DFS Remaining: 3300704256 (3.07 GB)
DFS Used%: 0.00%
DFS Remaining%: 57.92%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Sat Mar 11 02:44:32 KST 2017


Name: 192.168.56.101:50010 (hadoop02)
Hostname: hadoop02
Decommission Status : Normal
Configured Capacity: 5699186688 (5.31 GB)
DFS Used: 28672 (28 KB)
Non DFS Used: 2400239616 (2.24 GB)
DFS Remaining: 3298918400 (3.07 GB)
DFS Used%: 0.00%
DFS Remaining%: 57.88%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Sat Mar 11 02:44:32 KST 2017

웹 브라우저를 이용해서 하둡 상태를 모니터링 할 수도 있다.

참고