티스토리 뷰

[hadoop] 설치 및 clustering 셋팅

이번주에는 Cloud Distribute File System으로 각광을 받고있는 Hadoop에 대해 알아보고 설치 및 분산 저장을 해보려고 합니다.

Hadoop은 크게 총 두가지의 요소로 나누어져 있습니다.

1. HDFS

2. Map Reduce

입력한 데이터를 지정한 DataNode에 Distribution 및 Replication을 수행합니다. ( HDFS )

 

[ 그림1 ] HDFS Architecture    ( http://hadoop.apache.org 참조 )

HDFS로 분산하여 저장하였다면 이제 데이터를 가져오기 위하여 데이터를 조회하고 원하는 데이터를 가져오기 위한 연산을 처리하는 과정을 MapReduce라고 합니다.

 

[ 그림2 ] MapReduce architecture ( http://hadoop.apache.org 참조 )

 

그럼 이제부터 개발환경을 셋팅해 보도록 하겠습니다. 개발 환경은 아래와 같습니다.

Server1

OS : Ubuntu11_10 x64 ( x2 )

CPU : Intel(R) Pentium(R) Dual CPU T2410 @ 2.00GHz

Memory : 2GB

JAVA : JDK 1.6.0_29

Hadoop : hadoop-1.0.1.tar.gz

Server2 ( VM OS )

OS : Ubuntu11_10 x64 ( x2 )

CPU : Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz ( X2 )

Memory : 2GB

JAVA : JDK 1.6.0_29

Hadoop : hadoop-1.0.1.tar.gz

 

 

1. Hadoop 설치

step 1. Hadoop Download 및 설치

Download URL : http://ftp.daum.net/apache/hadoop/core/stable/ 

위의 URL에 접속하여 현재 안정화 버전인 hadoop-1.0.1.tar.gz 파일을 다운 받습니다.

$ wget 'http://ftp.daum.net/apache/hadoop/core/stable/hadoop-1.0.1.tar.gz

$ mkdir ~/work 

$ tar xvfz hadoop-.0.1.tar.gz -C ~/work 

 

step 2. 환경변수 설정

자바와 hadoop path를 환경변수로 등록합니다.

~/.bash_profile

export JAVA_HOME="/usr/local/jdk1.6.0_29"

export HADOOP_HOME="/home/rocksea/work/hadoop-1.0.1"

$ source ~/.bash_profile

conf/hadoop-env.sh

export JAVA_HOME="/usr/local/jdk1.6.0_29"

 

step 3. 설치 TEST

간단하게 설치 후 MapReduce TEST를 진행합니다.

$ cd $HADOOP_HOME   

$ mkdir input

$ cp conf/*.xml input

$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'

$ cat output/*

 

2. Psuedo Distribution (가분산) 설정

stpe 1. 네임노드 설정

로컬서버에 가분산을 위한 네임노드를 설정합니다.

conf/core-site.xml:

<configuration>
     <property>
         <name>fs.default.name</name>
         <value>hdfs://localhost:9000</value>
     </property>
</configuration>

 

step 2. Replication 설정

Replication갯수 및 디렉토리를 설정합니다.

conf/hdfs-site.xml

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

     <property>
         <name>dfs.name.dir</name>
         <value>/home/rocksea/work/hadoop-1.0.1/name</value> //name 디렉토리 생성한다 ( 없을시 오류 )
     </property>



     <property>
         <name>dfs.data.dir</name>
         <value>/home/rocksea/work/hadoop-1.0.1/data</value>
     </property>

</configuration>

 

step 3. MapReduce 설정

MapReduce를 위한 jobtracker를 설정합니다.

conf/mapred-site.xml:

<configuration>
     <property>
         <name>mapred.job.tracker</name>
         <value>localhost:9001</value>
     </property>
</configuration>

 

step 4. ssh dsa key 등록

dsa key 생성 ( Server1, Server2 )

server1 $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

server1 $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

상대의 서버에있는 ~/.ssh/authorized_keys에 현재 생성된 id_dsa.pub 키값 추가 (server1  -> server2, server2 -> server1)

이제 localhost로 접속하게 되면 비밀번호 입력 없이 로그인이 가능합니다.

server1 $ ssh localhost

Welcome to Ubuntu 11.10 (GNU/Linux 3.0.0-12-generic i686)

 * Documentation:  https://help.ubuntu.com/

397 packages can be updated.
124 updates are security updates.

 

step 5. namenode

 $HADOOP_HOME 으로 이동해서 distributed-filesystem 을 포맷합니다.

server1 $ bin/hadoop namenode -format

 

step 6. process 실행

namenode, jobtracker, datanode 등을 실행합니다.

$ bin/start-all.sh

$ jps     

16374 NameNode
16621 DataNode
17232 TaskTracker
17328 Jps
16869 SecondaryNameNode
16968 JobTracker

 

- NameNode : 분산 파일 시스템에 위치한 파일들에 대한 위치정보를 포함하는 정보. 일반적으로 파일시스템 에서 표현되는 파일명과 디렉토리 위치에 해당한다고 보면 이해가 빠를 것입니다.

- SecondaryNameNode : NameNode 의 slave 

- JobTracker : 분산 환경에서 작업을 분산시키는 스케쥴 작업을 하는 부분.

 -DataNode : 분산파일을 저장하는 노드 

 

3. Psuedo Distribution
(가분산) 테스트

설정이 끝났다면 아래의 URL로 접속하여 확인한다. 


위와 같이 제공됩니다. 페이지들이 정상적으로 뜬다면 하둡-분산 파일 시스템이 잘 동작하고 있다는 증거입니다.

step 1. 가분산을 위한 테스트를 진행

hdfs 안으로 conf directory 내용을 input으로 저장 후 간단한 map reduce 테스트를 진행합니다. ( 시간소요가 있음 )

server1 $ bin/hadoop fs -put conf input

server1 $ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 

 

step 2. HDFS 파일 꺼내기 

하둡-파일 시스템 안에 있는 실행결과를 밖으로 꺼내 오는 것입니다. 하둡-파일시스템 안으로 넣을때는 -put , 꺼낼때는 -get 을 쓰는 것에 유의 하시면 됩니다. 
 

server1 $ bin/hadoop fs -get output output
server1 $ cat output/* 

step 3. 기타 

cat을 이용하여 파일내용을 출력합니다. 

 server1 $ bin/hadoop fs -cat output/*

실행종료 Script를 실행합니다.
server1 $ bin/stop-all.sh

위와 같은 명령으로 하둡 파일 시스템을 내릴 수 있습니다. 마치 웹서버 구동과 정지와 비슷합니다. (start-all , stop-all)

 

4. Full Distribution (분산) 셋팅 

 가분산까지 성공하였다면 이제 진짜 분산환경인 Full Distribution 환경에 대하여 설정 해 보도록 하겠습니다.

아래의 설정파일 수정 후 다른 서버에 rsync를 이용한 전체 동기화를 시킬 것 이므로 NameNode가 되는 Server1번에

설정을 합니다.

step 1. core-site 설정

conf/core-site.xml

<configuration>
     <property>
         <name>fs.default.name</name>
         <value>hdfs://server1:9000</value>
     </property>
</configuration>

fs.default.name

네임노드를 설정합니다.

 

step 2. hdfs-site 설정

conf/hdfs-site.xml

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

     <property>
         <name>dfs.name.dir</name>
         <value>/home/rocksea/work/hadoop-1.0.1/name</value>
     </property>

     <property>
         <name>dfs.data.dir</name>
         <value>/home/rocksea/work/hadoop-1.0.1/data</value>
     </property>

     <property>
        <name>dfs.support.append</name>
        <value>true</value>
     </property>

     <property>
        <name>dfs.datanode.max.xcievers</name>
        <value>4096</value>
     </property>

</configuration>
 

dfs.replication (복제셋)

시스템이 다운됐을 때의 Fail Over 나 한 서버에 몰리는 부하를 나누어 주는 역할을 합니다. 2 이라고 하면 같은 데이타를 2곳으로 나누어서 (같은 데이타 2번)저장하라는 것입니다.

dfs.name.dir(네임 노드)

네임노드의 정보를 저장하는 곳입니다.

dfs.data.dir(데이터 노드)

데이타노드의 정보를 저장하는 곳입니다.

 

step 3. mapred-site 설정

conf/mapred-site.xml

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>server1:9001</value>
    </property>
    <property>
        <name>mapred.system.dir</name>
        <value>/home/rocksea/work/hadoop-1.0.1/mapred/system</value>
    </property>
</configuration>

mapred.job.tracker

현재 맵-리듀스 작업을 할 때 그 작업을 각 테스크별로 분배해주는 기능을 하는 서버의 위치를 지정하게 되어 있습니다 . 네임노드가 위치한 곳과 같은 곳을 지정하게 해줍니다.

 

step 4. masters 설정

conf/masters

server2

masters 파일은 네임노드의 위치를 적어주는 부분이 아닌. secondary name-node 의 위치를 저장하는 파일입니다. secondary name-node 는 네임노드 (name-node) 가 죽었을 경우 동작하는 네임노드 입니다.

step 5. slaves 설정

conf/slaves

server1

server2 

slaves 파일은 데이터노드 (datan-node) 가 저장될 서버들을 추가합니다.

step 6. 서버 동기화

모든 hadoop서버는 설정이 같으므로 동기화를 합니다. 서버가 10대이든 100대이든 설정이 모두 같으므로  rsync를 이용하여 동기화를 합니다.

server1 $ cd ~/work/hadoop-1.0.1
server1 $ rsync -av . hadoop@server2:/home/rocksea/work/hadoop-1.0.1/

step 7. 실행 및 Test

아래의 script를 실행한다.

server1 $ bin/start-all.sh

 

server 1

sever1 $ jps
16997 NameNode
18021 Jps
17244 DataNode
17382 JobTracker
17629 TaskTracker

server 2

server2 $ jps

13527 Jps
13199 SecondaryNameNode
13387 TaskTracker
13004 DataNode

 

아래의 url로 접속하여 확인한다.

http://server1:50070

 

[ 그림 3 ] NameNode 정보

 

아무 파일을 HDFS에 넣어 Replication 테스트를 한다.

bin/hadoop fs -put ~/src/hadoop-1.0.1.tar.gz tar

 

[ 그림 4 ] 데이타 노드정보

 현재 2개의 서버의 데이터 노드가 떠있는 것을 확인 할 수 있다.

 

[ 그림5 ] 디렉토리 확인

tar라는 디렉토리가 생성된 것을 확인 할 수 있다

 

이상으로 hadoop Full Distribution 에 대한 포스팅을 마치도록 하겠습니다.

참고  blog URL : http://crazia.tistory.com/

by rocksea.


'Developer' 카테고리의 다른 글

[ VMware ] kernel 3.2 patch  (0) 2012.05.02
[ inode ] inode 관련자료  (0) 2012.04.24
[installation guid] nginx installatation guide  (0) 2012.04.19
SSH Local Tunneling  (0) 2012.04.18
redmine1.3.2 mylyn-connector 설치  (0) 2012.04.17
댓글