0. 설치 버전

Hadoop 1.0.4

ZooKeeper 3.4.5

HBase 0.94.6




1. Hadoop 먼저 설치 하기


1) 구성


** 특징별 구분 

1번 서버 (Master, 1.1.1.1): NameNode, Job Tracker 

2번 서버 (Slave, 1.1.1.2) : Secondary Name Node, DataNode, TaskTracker

3번 서버 (Slave, 1.1.1.3) : DataNode, TaskTracker


 

2) bashrc 설정 수정 


$ vi .bashrc


export JAVA_HOME=/app/jdk

export HADOOP_HOME=/app/hadoop

HADOOP_HOME_WARN_SUPPRESS=1

export HADOOP_HOME_WARN_SUPPRESS

PATH=$PATH:$HADOOP_HOME/bin



HADOOP_HOME_WARN_SUPPRESS 의 값이 지정되어야 HADOOP_HOME이 deprecated가 되지 않았다고 뜸

(Warning: $HADOOP_HOME is deprecated.)




3) java 설치

알아서..


4) ssh 연동 설정

ssh 기반으로 hadoop을 운영한다. 


* 1번서버


$ ssh-keygen -t rsa -f ~/.ssh/id_rsa

Generating public/private rsa key pair.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/www/.ssh/id_rsa.

Your public key has been saved in /home/www/.ssh/id_rsa.pub.

The key fingerprint is:

87:39:e8:fd:87:05:96:48:e5:02:a3:4c:19:51:6e:c9 www@HBASEtest-dev1

The key's randomart image is:

+--[ RSA 2048]----+

|    +=+  ..      |

|   o.+ +..       |

|    o E.....     |

|     . ..++      |

|      . S...     |

|     . . o  .    |

|      . .  o     |

|         .. .    |

|          ..     |

+-----------------+



* 2, 3번 서버에서 작업



ssh key generation후 authorized keys에 복사


$ ssh-keygen -t rsa -f ~/.ssh/id_rsa


$ cat ~/.ssh/id_rsa.pub  >> ~/.ssh/authorized_keys





2,3번 서버의 공개키를 1번 서버의 authorized_keys로 복사


www@HBASEtest-dev1:/home/www>$ ssh www@1.1.1.2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys


www@HBASEtest-dev1:/home/www>$ ssh www@1.1.1.2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys






1번서버의 authorized_keys를 2,3번 slave에 복사


$ scp .ssh/authorized_keys  www@1.1.1.2:~/.ssh/authorized_keys


$ scp .ssh/authorized_keys  www@1.1.1.2:~/.ssh/authorized_keys



이렇게 해서 1,2,3번 서버는 ssh연결시 no password인증이 되어 쉽게 사용가능하다.





5) 설정 변경


* 다운로드

http://hadoop.apache.org/releases.html


* 1번서버에서 수정

$ vi conf/hadoop-env.sh

export HADOOP_HEAPSIZE=500


$ vi conf/slaves

1.1.1.2

1.1.1.2


$ vi conf/masters

1.1.1.1



$ vi core-site.xml

..

<configuration>

    <property>

        <name>fs.default.name</name>

        <value>hdfs://1.1.1.1:9000</value>

    </property>

</configuration>



slave는 2대, master는 1대이므로 replication수는 2로 한다.


$ vi hdfs-site.xml


<configuration>

  <property>

         <name>dfs.replication</name>

         <value>3</value>

     </property>

     <property>

             <name>dfs.name.dir</name>

             <value>/app/hadoop/work/name</value>

     </property>

    <property>

         <name>dfs.data.dir</name>

         <value>/app/hadoop/work/data</value>

     </property>

     <property>

         <name>dfs.support.append</name>

         <value>true</value>

     </property>

</configuration>



$ vi mapred-site.xml


<configuration>

        <property>

        <name>mapred.job.tracker</name>

        <value>1.1.1.1:9001</value>

    </property>


    <property>

            <name>mapred.system.dir</name>

             <value>/app/hadoop/work/mapred/system</value>

      </property>


</configuration>



디렉토리 생성

$ mkdir -p /app/hadoop/work/mapred/system

$ mkdir -p /app/hadoop/work/name

$ mkdir -p /app/hadoop/work/data



6) 설정 복사 

hadoop/conf에 있는 다음 파일을 2, 3번서버에 복사


   * core-site.xml

   * hdfs-site.xml

   * mapred-site.xml

   * masters

   * slaves

   * hadoop-env.sh


$ scp /app/hadoop/conf/* www@1.1.1.2:~/hadoop/conf

$ scp /app/hadoop/conf/* www@1.1.1.2:~/hadoop/conf




7) name node format


1, 2,3 번 서버 무에게 namenode format 실행


$ ./bin/hadoop namenode -format




8) 데몬 시작


* 1번 서버

start-dfs.sh 실행

$ bin/start-dfs.sh


* 2번,3번 서버

start-mapred.sh 실행

$ bin/start-mapred.sh


=> 그냥 bin/start-all.sh (bin/stop-all.sh)을 호출해도 됨



9) jps 확인


* 1번

www@HBASEtest-dev1:/app/hadoop/bin>$ jps

38006 JobTracker

37825 NameNode

38100 Jps


* 2번

www@HBASEtest-dev2:/app/hadoop/conf>$ jps

34387 DataNode

34614 Jps

34473 SecondaryNameNode

34561 TaskTracker


* 3번 

www@HBASEtest-dev3:/app/hadoop/conf>$ jps

33734 Jps

33681 TaskTracker

33586 DataNode





10) 웹 테스트


http://1.1.1.1:50070/

http://1.1.1.1:50030/




11) 동작여부 테스트

1) 테스트 #1

1번 서버

$ bin/hadoop fs -copyFromLocal bin xxxbin

$ bin/hadoop fs -ls


2,3번 서버도 1번 서버와 동일하게 결과가 나오는지 확인한다. 

$ bin/hadoop fs -ls



2) 테스트 #2


$ ./bin/hadoop jar ../hadoop-examples-1.0.4.jar  wordcount xxxbin/start-all.sh result 

$ ./bin/hadoop fs -cat result/part-r-00000 


제대로 결과가 나오면 성공 





2. ZooKeeper 설치


1) bashrc 수정

$ vi .bashrc

export ZK_HOME=/app/zookeeper



2) 설정 변경

http://zookeeper.apache.org/releases.html 에서 다운로드후 /app/zookeeper에 설치



모두 ZK_HOME에서 작업


1,2,3번 서버에 모두 적용후 데몬 start


$ cp conf/zoo_sample.cfg conf/zoo.cfg  

$ vi conf/zoo.cfg  


#dataDir=/tmp/zookeeper 

dataDir=/home/www/zookeeper/data

dataLogDir=/home/www/zookeeper/datalog



$ mkdir -p zookeeper/data  

$ mkdir -p zookeeper/datalog




3) myid 입력 


1번 서버

$ echo "1" > /app/zookeeper/data/myid

1


2번 서버

$ echo "2" > /app/zookeeper/data/myid

2


3번 서버

$ echo "3" > /app/zookeeper/data/myid

3




4) 데몬 시작 


www@HBASEtest-dev1:/app/zookeeper/$ bin/zkServer.sh start

JMX enabled by default

Using config: /app/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper … STARTED



정상적인지 확인

www@HBASEtest-dev1:/app/zookeeper>$ ./bin/zkCli.sh -server 1.1.1.1:2181

[zk: 1.1.1.1:2181(CONNECTED) 0] ls /

[zookeeper]

[zk: 1.1.1.1:2181(CONNECTED) 1] quit

Quitting…



1번서버부터 시작해서 차례대로 2,3번 서버에서 zookeeper 데몬 실행

$ bin/zkServer.sh start


데몬 확인


$ jps

42320 QuorumPeerMain



Zookeeper 쿼럼에서 테스트- 1번 서버에서 작업

$ ./zkCli.sh  -server 1.1.1.1,1.1.1.2,1.1.1.3

Connecting to 1.1.1.1,1.1.1.2,1.1.1.3

….




[zk: 1.1.1.1,1.1.1.2,1.1.1.3(CONNECTED) 2] create /a a

Created /a

[zk: 1.1.1.1,1.1.1.2,1.1.1.3(CONNECTED) 3] get /a

a

cZxid = 0x100000003

ctime = Fri Apr 19 18:12:52 KST 2013

mZxid = 0x100000003

mtime = Fri Apr 19 18:12:52 KST 2013

pZxid = 0x100000003

cversion = 0

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 1

numChildren = 0



3번 서버에서 정상적으로 저장되었는지 테스트

$ ./bin/zkCli.sh -server 1.1.1.3

 [zk: 1.1.1.3(CONNECTED) 0] get /a

a

cZxid = 0x100000003

ctime = Fri Apr 19 18:12:52 KST 2013

mZxid = 0x100000003

mtime = Fri Apr 19 18:12:52 KST 2013

pZxid = 0x100000003

cversion = 0

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 1

numChildren = 0




만약 종료할때는 stop을 실행

$ ./zkServer.sh stop





3. HBase 설치


1) bashrc 수정

vi .bashrc

export HBASE_HOME=/app/hbase

PATH=$PATH:$HBASE_HOME/bin



2) 설정 수정



* 다운로드 

http://www.apache.org/dyn/closer.cgi/hbase/

/app/hbase를 홈디렉토리로 유지



* 따로 셋팅한 ZooKeeper를 사용할 예정이기 때문에 1번 서버의 설정 정보를 수정


$ vi conf/hbase-env.sh

export HBASE_MANAGES_ZK=false


 

$ vi conf/hbase-site.xml

<configuration>


    <property>

        <name>hbase.rootdir</name>

        <value>hdfs://1.1.1.1:9000/hbase</value>

    </property>


    <property>

        <name>hbase.cluster.distributed</name>

        <value>true</value>

    </property>


    <property>

        <name>hbase.tmp.dir</name>

        <value>/app/hbase/var</value>

    </property>


    <property>

        <name>hbase.ZooKeeper.quorum</name>

        <value>1.1.1.1,1.1.1.2,1.1.1.3</value>

    </property>

</configuration>



$ vi conf/regionservers

1.1.1.1

1.1.1.2

1.1.1.3


$ ln -sf $HADOOP_HOME/conf/hdfs-site.xml $HBASE-HOME/conf/hdfs-site.xml

 

* 버전 확인

버전 확인 이미 버전을 맞추었기 때문에 틀별한 작업은 안해도 됨

www@HBASEtest-dev1:/app/hbase/lib>$ ls -al zoo* hadoo*

-rw-r----- 1 www www 3929148 Mar 15 09:19 hadoop-core-1.0.4.jar

-rw-r----- 1 www www  779974 Mar 15 09:19 zookeeper-3.4.5.jar


* 설정 복사

$ scp /app/hbase/conf/* www@1.1.1.2:~/hbase/conf

$ scp /app/hbase/conf/* www@1.1.1.3:~/hbase/conf  



* hbase 실행

$ bin/start-hbase.sh

starting master, logging to /home/www/hbase/bin/../logs/hbase-www-master-HBASEtest-dev1.out

1.1.1.3: starting regionserver, logging to /home/www/hbase/logs/hbase-www-regionserver-HBASEtest-dev3.out

1.1.1.2: starting regionserver, logging to /home/www/hbase/logs/hbase-www-regionserver-HBASEtest-dev2.out


* hbase 종료

$ bin/stop-hbase.sh




* 로그 및 데몬 확인

로그에 이상이 없는지 확인한다.

2번, 3번 서버에 HRegion Server가 떠있는지 확인한다. 

$ jps

49053 HRegionServer


hadoop_home에서 확인

$ ./bin/hadoop fs -ls /hbase

Found 6 items

drwxr-xr-x   - www supergroup          0 2013-04-19 19:20 /hbase/-ROOT-

drwxr-xr-x   - www supergroup          0 2013-04-19 19:20 /hbase/.META.

drwxr-xr-x   - www supergroup          0 2013-04-19 19:20 /hbase/.oldlogs

drwxr-xr-x   - www supergroup          0 2013-04-19 19:20 /hbase/.tmp

-rw-r--r--   3 www supergroup         38 2013-04-19 19:20 /hbase/hbase.id

-rw-r--r--   3 www supergroup          3 2013-04-19 19:20 /hbase/hbase.version



1번 서버

$ jps

53336 NameNode

53514 JobTracker

17472 HMaster

51510 QuorumPeerMain

17631 HRegionServer

21172 Jps



2번 서버 

$ jps

45166 DataNode

43200 HRegionServer

45902 Jps

45262 SecondaryNameNode

64022 Child

45364 TaskTracker

44079 QuorumPeerMain



3번 서버

$ jps

40347 HRegionServer

42991 Jps

42320 QuorumPeerMain

61489 Child

43422 TaskTracker

43316 DataNode



3) 테스트



$ bin/hbase shell

HBase Shell; enter 'help<RETURN>' for list of supported commands.

Type "exit<RETURN>" to leave the HBase Shell

Version 0.94.6, r1456690, Thu Mar 14 16:32:05 PDT 2013


hbase(main):001:0> create '1','2'

0 row(s) in 2.1530 seconds


hbase(main):002:0> list

TABLE                                                                                                                                                                        

1                                                                                                                                                                            

1 row(s) in 1.0280 seconds






Posted by '김용환'
,