2010. 11. 29. 18:37

hadoop의 정의 및 설치

1장 Hadoop

1.1 Hadoop의 정의
Hadoop : 분산컴퓨팅 지원 프레임웤으로 아래와 같은 서브프로젝트로 구성되어있음.

  Hadoop core : 
하둡의 주력 프레임웍 
HDFS, MapReduce Distribute Computing Framework 지원

  Chukwa 
큰 분산환경에서 데이터를 분석 및 모니터링하기 위한 오픈소스 데이터 수집시스템

  HBase
Hadoop의 HDFS를 지원하기 위한 구글의 BigTable 구현체

  Hive
Hadoop File에 저장된 큰 데이터셋의 통계 및 질의를 쉽게 사용할수 있는 유틸리티를 제공하는 
        데이터 웨어하우징의 구현체
배치프로세싱 시스템에 기반을 두었기 때문에 쿼리의 짧은 응답시간을 약속할 수 없고 RDBMS의 
        realtime query와는 반대되는 개념이라 RDBMS와 비교는 불가능

  Pig
병렬컴퓨팅을 위한 High-level-data-flow 언어

  Zookeeper 
분산환경에서 노드들간의 정보공유, 락, 이벤트등 다양한 용도로 사용되는 프레임웍

1.2 HDFS 설치하기

1.2.1 설치서버 환경
  OS : centOs5.3 
  Master Domain : hadoop1.xener.com 
  Slave  Domain : hadoop2.xener.com 

1.2.2 Java 버전 및 설치 경로
  Version : 1.6.0_14 
  설치경로 : /usr/local/java

1.2.3 Hadoop data 및 name 노드 폴더
  /hdfs/data
  /hdfs/name
  /hdfs/mapred/system
  /hdfs/mapred/local

1.2.4 Hadoop 설치 폴더
임의의 폴더에 hadoop의 압축을 풉니다. (테스트 서버는 /usr/local/hadoop 에 설치되어있습니다.)
  /home/hadoop/hadoop_0.20

1.2.5 HDFS 설치방식

  Standalone 방식
  Pseudo-Distributed 방식
  Fully-Distributed 방식 

1.2.5.1 Pseudo-Distributed 방식

        단일노드에서 Hadoop Daemon이 분리된 Java Process로 수행되는 방식

i. 아래 명령을 이용하여 ssh 와 rsync 를 설치. ssh와 rsync 를 설치하는 이유는 hadoop 내부에서 
        데이터 리플리케이션에 rsync를 사용하고 슬래이브서버와의 통신에 ssh를 사용하기 때문임.
$ sudo apt-get install ssh 
$ sudo apt-get install rsync
% 위 명령어는 ubuntu Linux환경에서 사용하는 명령임. 
   각 리눅스 배포버전에 맞는 설치 및 확인 방법으로 ssh와 rsync의 설치 유무
   를 판단하고 설치되어있지 않을시에 위 프로그램들을 설치해주시기 바랍니다.

ii. conf/core-site.xml 파일을 아래와 같이 수정.
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://hadoop1.xener.com:9000</value>
  </property>
</configuration>

iii. conf/hdfs-site.xml 파일을 아래와 같이 수정.
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>

iv. conf/mapred-site.xml 파일을 아래와 같이 수정.
<configuration> 
  <property> 
    <name>mapred.job.tracker</name> 
    <value>hadoop1.xener.com:9001</value> 
  </property> 
</configuration>

v. 아래의 명령어를 입력하여 localhost 를 신뢰관계로 세팅.
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

vi. 방화벽 설정을 변경.
# System-config-securitylevel 명령어로 아래와 같은 포트를 열어둡니다.
(WEB 에서 HDFS상태를 확인하는데 사용하는 포트들입니다)
9000, 9001, 50010, 50020, 50030, 50060, 50070, 50075, 50090, 50470, 50475 

vii. HDFS를 사용하기 위해 namenode를 포맷하고 실행
$ bin/hadoop namenode -format 
$ bin/start-all.sh

viii. Jps 명령으로 hadoop 데몬이 정상적으로 로딩되어있는지 확인.
아래와 같은 데몬들이 동작하고 있으면 정상동작하고 있는것임.
7365 Jps
6828 NameNode
7030 SecondaryNameNode
7228 TaskTracker
7099 JobTracker
6925 DataNode

1.2.5.2 Fully-Distributed 방식
여러대의 컴퓨터를 클러스터로 묶는 방식으로 여기서는 master를 hadoop1.xener.com, 
슬레이브를 hadoop2.xener.com으로 가정하고 진행.
각 설정파일의 자세한 설명은 오른쪽 링크에서 확인 가능함 click

i. Hadoop의 설정파일에는 두종류가 있음
A. Read-only default Configuration : 
src/core/core-default.xml, 
src/hdfs/hdfs-default.xml, 
src/mapred/mapred-default.xml.


B. Site-specific Configuration : 
conf/core-site.xml 
conf/hdfs-site.xml
conf/mapred-site.xml

ii. Master를 아래와 같이 세팅.
A. conf/core-site.xml 
<configuration>
<property>
        <name>fs.default.name</name>
        <value>hdfs://hadoop1.xener.com:9000</value>
</property>
</configuration>

B. conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.name.dir</name><value>/hdfs/name</value>
        </property>
        <property>
                 <name>dfs.data.dir</name><value>/hdfs/data</value>
        </property>
        <property>
                <name>dfs.replication</name><value>2</value>
        </property>
        <property>
                <name>dfs.block.size</name><value>1048576</value>
</property>
</configuration>

C. conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://hadoop1.xener.com:9001</value>
        </property>
<property>
        <name>mapred.system.dir</name>
        <value>/hdfs/mapreduce/system</value>
</property>
<property>
        <name>mapred.local.dir</name>
        <value>/hdfs/mapreduce/local</value>
</property>
</configuration>

D. Conf/slaves
hadoop1.xener.com
hadoop2.xener.com

E. Conf/masters
hadoop1.xener.com

iii. 슬레이브를 아래와 같이 세팅합니다.
A. conf/core-site.xml
<configuration>
<property>
        <name>fs.default.name</name>
        <value>hdfs://hadoop1.xener.com:9000</value>
</property>
</configuration>

B. conf/hdfs-site.xml
<configuration>
<property>
                <name>dfs.name.dir</name>
                <value>/hdfs/name</value>
         </property>
         <property>
                 <name>dfs.data.dir</name>
                 <value>/hdfs/data</value>
         </property>
         <property>
                <name>dfs.replication</name>
                <value>2</value>
         </property>
         <property>
                <name>dfs.block.size</name>
                <value>1048576</value>
</property>
</configuration>

C. conf/mapred-site.xml
<configuration>
<property>
        <name>mapred.job.tracker </name>
        <value>hdfs://slave 주소:9001</value>
</property>
<property>
        <name>mapred.system.dir</name>
        <value>/hdfs/mapreduce/system</value>
</property>
<property>
        <name>mapred.local.dir</name>
        <value>/hdfs/mapreduce/local</value>
</property>
</configuration>
iv. Hadoop1.xener.com과 hadoop2.xener.com을 신뢰관계로 등록
Hadoop1.xener.com ~/.ssh/authorized_keys에 
Hadoop2.xener.com 의 id_dsa.pub파일의 내용을 넣어주고
Hadoop2.xener.com 의 ~/.ssh/authorized_keys에 
Hadoop1.xener.com 의 id_dsa.pub파일의 내용을 넣어줍니다.

v. 양 서버간에 ssh 통신에 이상이 없는지 테스트.
Hadoop1.xener.com 에서 
$ ssh hadoop2.xener.com
Hadoop2.xener.com 에서 
$ ssh hadoop1.xener.com

vi. Master에서 아래 명령을 수행하여 namenode를 format하고 hadoop을 실행
        (슬레이브에서는 수행시키시면 안됩니다.)
$ bin/hadoop namenode -format 
$ bin/start-all.sh



vii. %JAVA_HOME%/bin/jps를 실행하여 아래와같이 잘 수행되는지 확인
마스터 실행상황  
32740 JobTracker
32647 SecondaryNameNode
32492 DataNode
32343 NameNode
22255 Jps
388 TaskTracker

슬레이브 실행상황
29270 Jps
30595 DataNode
31425 TaskTracker