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 실행
* 2번,3번 서버
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번 서버와 동일하게 결과가 나오는지 확인한다.
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 데몬 실행
데몬 확인
$ 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을 실행
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 종료
* 로그 및 데몬 확인
로그에 이상이 없는지 확인한다.
2번, 3번 서버에 HRegion Server가 떠있는지 확인한다.
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