정보공간_1

[2기 강북 이도광] Getting started with Hadoop 본문

IT 놀이터/Elite Member Tech & Talk

[2기 강북 이도광] Getting started with Hadoop

알 수 없는 사용자 2012. 11. 16. 14:27

최근들어 해외 뿐 아니라, 국내 많은 블로그 및 인터넷 자료들은 Hadoop 실 사례보다 구조와 이론에 대해 설명하고 있다.

하지만 실제로 Hadoop Test-Bed를 설치하고, Framework의 핵심인 Map-Reduce를 경험해 본다면. 이는 백문이 불여일견일 것이다.

따라서, 이번 Chapter부터는 Apache Hadoop을 설치하고, Hadoop Cluster가 구축되어 있는 환경에서 Map-Reduce 프로그래밍까지 설명하고자 한다.

Hadoop은 Linux 기반이다. Linux에 익숙하다면 다행이겠지만 이 글을 참고하는 사람 중 Linux 환경에 어려움을 느끼는 사람도 있을 듯 하여 가급적이면 자세한 설명과 절차를 넣어 기술하고자 한다.


  1. < 1. O/S  및 각 Util 설치>

하둡은 Linux 기반에서 사용 가능한 Framework이다.

현재 Linux 외에도 Windows Platform에서 Cygwin을 사용한 Hadoop(Standalone mode) Microsoft Azure, Amazon EC2에서도 Hadoop 지원 정책을 펴고 있지만, 자체적인 Hadoop Cluster 구축에 초점을 맞추어 본 자료를 기술한다.

1. 따라서, 가장 먼저 우선적으로 설치해야 하는 것은 Linux 일 것이다. XWindow가 지원되는 것도 좋겠지만 필자는 보편적으로 경량화된 서버를 선호하기 때문에 Ubuntu Server 11.10을 설치하였다.

Ubuntu 설치는 일반적으로 설치방식을 따르기 때문에 생략하겠다.

 

2.  Ubuntu 설치가 완료 되었다면 Hadoop을 사용하기 전에, O/S 상에서 몇 가지 환경설정이 필요하다.

본 자료에서는 총 4대의 노드를 사용하기로 한다. Master 1대 Slave 3대.

 

위 그림은 실제 필자가 소유한 4대의 노드이다.

 

이제부터 설명하는 내용은 각 4대의 노드에 동일하게 적용해야 한다는 점을 명심하길 바란다.

 

(1) 먼저,  각 Node에 대해 IP Configuration이 필요할 것이다. 외부와의 통신 이외에도 Master와 Slave들간 통신을 하기 때문에 네트워크 채널 확보는 필수 이겠으며 4개의 Node에 직접 키보드와 마우스를 설치하여 4대의 노드를 컨트롤 할 것이 아니라면 다른 PC에서 원격으로 접근하여 운영하는 것이 훨씬 편리하다.

먼저 Cluster를 위해 고정 IP를 설정하도록 한다.

$ sudo vi /etc/network/interfaces 를 실행.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address xxx.xxx.xxx.51(51~54)
netmask 255.255.255.0
network xxx.xx.xx.0
broadcast xxx.xxx.xxx.255
gateway xxx.xxx.xxx.1
# dns-* options are implemented by the resolvconf package, if installed
dns-search korea.ac.kr

 

필자는 총 4대의 Node 사용을 위해 IP를 51~54번 까지 사용한다. 따라서 각 IP에 맞게 4대의 노드에 설정해 준다.

이제 4대의 Node에 대해 고정 IP를 부여하였다면 Ping이 제대로 가는지 확인하여 보자.

 

(2)  다음으로 두번째 단계로 Hostname을 설정하는 단계이다. 이번 단계는 편리성을 위해 Hostname을 설정한다. 만약 이러한 Hostname 설정이 불필요 하다면 건너 뛰어도 무관하다.

$ sudo vi /etc/hosts를 실행.

127.0.0.1 localhost
xxx.xxx.xxx.51 clus11.clelab.org clus1

 

위와 같은 식으로 각 클러스터의 Hostname을 설정한다. 나머지 각 3대의 Node에도 52~54번 까지의 주소로 Hostname을 설정한다. 이는 이후에 사용할 ssh-shell이나 hadoop 설정에서 굳이 ip를 입력하지 않고서도 hostname만으로도 사용이 가능한 이점이 있다.

(3) Java 프로그래밍 환경이 가능하도록 JDK를 설치한다. 이는 Hadoop이 Java 기반으로 되어 있기 때문에 JDK는 필수이다.

필자는 OpenJDK 64-Bit를 설치하였다. JDK 설치에 대해서는 생략하겠다.

이후 Map-Reduce Programming 때  Javac를 사용한 컴파일은 필수적이다. 따라서 Java compile이 제대로 되는지 확인하도록 한다.

(4) Hadoop에서 Map-Reduce를 실행할 때 외에도 각 Node에 대해 환경설정 등을 위해 접근할 때 SSH 통신을 사용한다. 따라서 각 Node에는 SSH가 설치되어 있어야 하며, 빈번한 SSH 사용에 있어서 사전 암호에 대한 키를 생성하지 않는다면 매번 인증을 해주어야 하는 불편함이 있다. 따라서 아래와 같이 SSH를 설치한 후 Key를 생성하여 나머지 각 3대의 Slave에게 복사를 해야 한다.

$ sudo apt-get install ssh                                         // SSH 설치(4대의 모든 노드에 설치할 것)

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys     //Master가 될 노드(51번)에서 생성

이후,   ~/.ssh 폴더를 확인해보면 생성된 key 파일이 있을 것이다. 이를 나머지 세 대의 노드의 ~/.ssh 폴더에 복사한다. (SCP 등 다양한 전송 유틸을 사용해도 좋다)

노드간 SSH 통신이 원활히 설정되었는지 확인위해, 아래와 같이 테스트 한다.

$ ssh xxx.xxx.xxx.52~54  // 이와 같이 실행시켰을 때 암호를 묻지 않고 해당 Node로 접속되면 OK.

 

(5) 마지막으로, 위 글에서 기술했듯이 일일히 4대의 노드에 키보드를 연결하여 시스템을 관리하는 것은 매우 불편한 일이다. 가장 이상적인 것은 필자의 개인 PC에서 4대의 노드에 원격 접속하여 이들을 관리하는 것이다.

필자의 경우 SSH Secure Shell Client 라는 프로그램을 사용하여 4대의 Node를 관리한다. 또한 4대의 노드에 특정 소스나 레퍼런스등의 편리한 전송을 위해 WinSCP 라는 프로그램을 사용한다.

이에 대한 다운로드 및 사용법은 매우 간단하므로 본 Chapter에서는 생략하겠다.

Hadoop을 설치 및 운용하기 위한 준비는 끝났다.

이후 Chapter에서는 실제 Hadoop 설치 및 Map-Reduce 프로그래밍을 통한 관리 운용에 대해 이어나가도록 하겠다.