하둡을 이용한 첫 번째 예제 프로그램



하둡에서는 MapRudece 를 이용한 예제로 단어의 겟수를 세는 셈플 예제 소스가 들어있다. wordcount java 프로그램은 txt 파일을 입력으로 받고 결과로는 단어의 겟수를 저장한 파일을 저장한다.


아무런 인수 없이 그냥 wordcount 예제를 실행시켜 본다.


[root@master hadoop-1.0.3]# hadoop jar hadoop-examples-1.0.3.jar wordcount

Usage: wordcount <in> <out>


인수를 지정하라고 메세지가 뜬다. 이제 입력으로 사용할 txt 파일을 하나 만든다.

[root@master hadoop-1.0.3]# cat input  // "hello" 단어가 4개 들어있는 input 파일 생성
hello
hello
hello
hello


[root@master hadoop-1.0.3]# hadoop jar hadoop-examples-1.0.3.jar wordcount input output
12/08/31 00:53:39 INFO util.NativeCodeLoader: Loaded the native-hadoop library // 이러한 메세지들이 쭈욱 뜨면서 실행된다.
12/08/31 00:53:39 INFO input.FileInputFormat: Total input paths to process : 1
12/08/31 00:53:39 WARN snappy.LoadSnappy: Snapnative library not loaded
12/08/31 00:53:39 INFO mapred.JobClient: Running job: job_local_0001
12/08/31 00:53:39 INFO util.ProcessTree: setsid exited with exit code 0

실행이 완료되면 output 디렉토리에 있는 결과파일을 출력해보자!!


[root@master hadoop-1.0.3]# cat output/*

hello   4        // 완료



 hadoop 에서는 독립실행모드 (Standalone) , 가상분산모드 (Pseudo-distributed) , 완전분산모드 (Fully distributed) 이렇게 3가지 모드가 존재한다.


현재 wordcount 예제까지 따라 하셨다면 독립실행모드는 끝난것이다. 독립실행모드는 단일로컬머신에서만 실행되는 환경을 말한다.

따라서 다른 분산된 컴퓨터와 서로 주고 받는 부가 작업이 필요 없으며 이 모드의 목적은 독립적으로 MapReduce 프로그램의 로직을 개발하고 디버깅 하는데 있다.


다음 포스팅 부터는 가상분산모드를 뛰어넘고 완전분산모드로 실행할게요 ^^

완전분산모드가 실제적으로  hadoop 이 동작하는 기능을 모두 갖추고 있기 때문에 가상분산모드는 따로 하지 않아도 된다고 생각함 ^^;;



저작자 표시
신고

PREPARATION OF OS ENVIRONMENTS

 

 

hadoop 의 공식적인 개발환경은 linux 이다. linux를 모르기 때문에 hadoop 에 접근하기가 너무 어려웠음....ㅜ

linnux 설치하기 위해 가상머신을 다운 받았고 가상머신으로 linux 설치

 

 

가상머신 - VMware 7.0 을 설치  

download - http://utilpam.com/bbs/download_p.php?bo_table=pds06&wr_id=496&pshow=kp1/

linux - CentOS-5.8-i386 을 설치      

download - http://ftp.daum.net/centos/5.8/isos/i386/

CD 2장 짜리로 다운!!

 

 

VMware 설정 부분과 CentOS 설치 부분은 다른 blog를 이용해 주세요 ^^;


CentOS 설치 완료하였으면 여기서 부터 CentOS 상에서 모든 작업 시행


jdk 와 hadoop 다운로드

 

 

저는 java 파일과 hadoop 파일 모두 컴퓨터/파일시스템/tmp 폴더 안에 다운 받고 압축을 풀었습니다.

 메뉴얼에는  /usr/local 에 위치하는 것을 권장!! 



여기까지 hadoop 실행을 하기전까지 준비 완료!!

 



CentOS 환경 설정

 


이젠 CentOS 환경 변수 설정!  참고로 계정은 root 로 사용하였습니다 ^^

메뉴얼에는 루트 말고 사용자 계정을 추가하여 사용하는것 을 권장 !! (linux 초보자로써 폴더 접근권한 등 설정이 아직 어려줘 root로 하였음 ㅠㅠ)


java 와 hadoop 사용하기 위해 path 설정

[root@master ~]# vi .bashrc    // .bashrc 파일을 편집기로 열어 편집

// JAVA_HOME 과 HADOOP_INSTALL 을 추가한다.

export JAVA_HOME=/tmp/jdk1.7.0_06

export HADOOP_INSTALL=/tmp/hadoop-1.0.3

// PATH에 각 bin디렉토리를 추가한다.

export PATH=$PATH:$HADOOP_INSTALL/bin:$JAVA_HOME/bin:$PATH


[root@master ~]# source .bashrc    //설정 바꾼후 re컴파일


path 설정후 올바르게 인식되는지 javac 와 javac version을 확인!!

[root@master ~]# java -version

java version "1.7.0_06"  // 다운 받은 jdk 버전 올바르게 인식

Java(TM) SE Runtime Environment (build 1.7.0_06-b24)

Java HotSpot(TM) Client VM (build 23.2-b09, mixed mode)

[root@master ~]# javac -version

javac 1.7.0_06     //  컴파일러도 올바르게 인식



만약 올바르게 버전이 인식이 안된다면 alternatives --config 로 현재 리눅스가 가리키는 jdk 경로를 확인한다.
[root@master ~]# alternatives --config java
3 개의 프로그램이 'java'를 제공합니다.
  선택    명령                                                 // tmp폴더안에 다운받은 jdk 버전이 추가되어 있지 않다.
-----------------------------------------------
*  +1           /usr/lib/jvm/jre-1.6.0-openjdk/bin/java    
     2           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
현재 선택[+]을 유지하시려면 엔터키를 누르십시오. 그렇지 않으면,  선택 번호를 입력해 주십시오: 1

// 환경설정에 jdk 추가
[root@master ~]# alternatives --install  /usr/bin/java  java  /tmp/jdk1.7.0_06/bin/java  3
[root@master ~]# alternatives --config  java
3 개의 프로그램이 'java'를 제공합니다.
  선택    명령                                                // tmp폴더안에 다운받은 jdk 버전이 추가 되었다.
-----------------------------------------------
*  1           /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
   2           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
 + 3           /tmp/jdk1.7.0_06/bin/java
현재 선택[+]을 유지하시려면 엔터키를 누르십시오. 그렇지 않으면,  선택 번호를 입력해 주십시오: 3  // 3번 선택



만약 javac 버전에도 이상이 있다면 위와 동일하게 "alternatives --config javac" 으로 확인해보고 추가하면 된다.


이번엔 hadoop version 확인!!


[root@master ~]# hadoop version

Hadoop 1.0.3        // hadoop 1.0.3 올바르게 인식

Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1335192

Compiled by hortonfo on Tue May  8 20:31:25 UTC 2012

From source with checksum e6b0c1e23dcf76907c5fecb4b832f3be



여기까지 완료되면 hadoop 실행을 위한 준비가 완료되었다 생각합니다 ^^

다음엔 hadoop sample 예제 중에 wordcount 예제 실행 을 포스팅 할게요 ^^

 

저작자 표시
신고



ps. programming begginer 로써 초급자에 관점에서 앞으로 hadoop 포스팅 해볼 생각입니다^^

 

 

What is Hadoop?

 

 

대용량 데이터를 처리하는 분산 응용 프로그램을 작성하고 실행시키기 위한 오픈 소스 프레임워크(framework)이다.

 

 

- Hadoop simbol - 

 

 

Appearance of Hadoop

 

 

 

오늘날, 고용량의 멀티미디어 데이터 와 페이스북같은 SNS 의 등장으로 인해 데이터는 폭발적으로 으로 증가하고 있고 Big Data, Cloud 등과 같은 대용량의 데이터를 사용하고 관리하는 기술들이 개발되어 지고 있다. 이렇게 방대하게 커져버린 데이터를 현존하는 방식으로 처리하기란 많은 무리가 있다.

 

이런 문제점을 해결하기 위해 구글에서 먼저 MadpReduce를 공개 했는데, Mapreduce는 구굴의 데이터 처리량을 확장하기 위해 사용되는 시스템이다. Doug Cutting은 구글에서 발표한 MapReduce의 논문을 바탕으로 '하둡(Hadoop)'이라는MadpReduce의 오픈 소스 버전을 개발하게 되었고 야후와 다른 기업들의 동참으로 오늘날 하둡은 야후, 페이스북, 링크드인, 트위터와 같은 웹 기반의 회사에서 연산처리를 위한 인프라의 핵심 부분으로 사용되고 있다.

 

 

 

*MapReduce : 다수의 컴퓨터에서 데이터를 분산처리하여, 그 결과를 추려내는 데이터 프로세싱 기법

 

Advantage of Hadoop

 

 


초당 100MB 를 처리할수 있는 값비싼 컴퓨터 한대가 4TB의 데이터를 처리한다고 하였을때 대략 세 시간 정도가 소요된다. 하지만 하둡은 4TB의 데이터를 분산된 여러 컴퓨터가 병렬로 나누어서 동시에 처리하기 때문에 훨씬 빠른 속도로 데이터를 처리 할수 있다. 또 이런한 값싼 범융 컴퓨터들로 이루어진 클러스트를 구축하는것이 비용면에서 성능 좋은 컴퓨터보다 저렴하다.

 

클라이언트는 연산할 데이터를 보내는 대신 연산할 식(MapReduce)을 데이타가 존재 하는 클러스트에 보내는 방식이다. 클라이언트에서 보내는 MapReduce프로그램은 크기가 KB 단위로 매우 작기 때문에 전송이 빠르다. 처리될 데이타는 클러스트에 저장되어 있고 하둡클러스는 클라이언트에서 보낸 작은 코드를 읽어 데이터 연산을 처리한다. 



저작자 표시
신고