Pully distributed Mode


분산환경을 실현하기 위해 centOS 하나를 더 설치하였다. 

노트북 용량 관계로 총 2개의 가상 centOS 로 실행    1대는 마스터와 슬레이브 다른 1대는 슬레이브 역활로 

총 하나의 마스터와 2개의 노드로 구성된 클러스트 환경을 구축함!!

standalone 모드까지 준비되었다는 가정하에 포스팅 하겠음 ^^  준비 안되신 분들은 게시물 처음으로 가셔서 설치 하시기 바람 !!


준비 사항 

cenOS 5.8    2대

192.168.109.128 master    // 1대는 master 역활
192.168.109.129 hadoop1 // 다른 1대는 slave 역활

 

[root@master ~]# vi /etc/hosts  //  아이피 주소를 입력 함 (호스트 이름을 통해 접근하기 위함)

192.168.109.128 master   

192.168.109.129 hadoop1


 

SSH 설정


master는 특정 컴퓨터 사용자 계정이 되고 다른 모든 노들들 은 다른 컴퓨터 사용자 계정이 된다. 특정 컴퓨터 사용자 계정으로 다른 컴퓨터 사용자 계정에 접근하기 위해서 SSH는 표준 공개 키 암호를 제공한다. 이 키는 사용자를 확인하는 데 사용 되는데 하나는 공개(public) 키이고 다른 하나는 개인(private) 키로 설정된다. 공개키는 클러스트에 있는 모든 노드에 저장되고 master는 클러스트에 접근할때 개인키를 보내고 해당 컴퓨터는 이 두 개의 키를 가지고 접근 시도를 허락한다. 

 

SSH 키 생성


[root@master ~]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):  // 입력없이 enter

Enter passphrase (empty for no passphrase):              // 입력없이 enter

Enter same passphrase again:                                   // 입력없이 enter 

  Your identification has been saved in /root/.ssh/id_rsa.  // 개인키

Your public key has been saved in (/root/.ssh/id_rsa.pub.  // 공개키 

[root@master ~]# cat ~/.ssh/id_rsa.pub  //생성된 키 확인 

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5HQiMabQyYz3tTkGxA+jXrR0C5sPiyChws

mCFFGdvt4AMMOVoCqopkombAlIeoN7KWLVv+z02zYsaPVZephDfiKtc1XeTp4XoT4OhMbk

rt7unYuX9VGZMu3OlsGfa6pQmZuWlT/hO7a8JSEMYvZhX/XnHW/xpyaMuX4e8bBrO0F1XX

bC/p9gpycIrLz2268sqdgROh8ibG4KsD4x9s1G/gAg8HOa76YlNLBHseTfgVv3+yJIB2TDiIV7au

xIib9l9JOHLdkepx7nDU6/E1bndWQAqJN0/vCyO5SncFOEY+DKHHzQKy8GAqLNpa6IJ4biuCu

tHMX9kXXwxqoOPGlp4Q== root@localhost.localdomain


공개 키 배포 와 로그인 테스트

 

[root@master ~]# scp ~/.ssh/id_rsa.pub root@hadoop1:~/master_key

 

//hadoop1 으로 다시 로그인뒤 master의 키를 인증된 키로 설정한다.

 
[root@hadoop1 ~]# mkdir ~/.ssh

[root@hadoop1 ~]# chmod 700 ~/.ssh

[root@hadoop1 ~]# mv ~/master_key ~/.ssh/authoried_keys

[root@hadoop1 ~]# chmod 600  ~/.ssh/authoried_keys

//이젠 master 계정에서 대상 로그인으로 시도

 

[root@master ~]# ssh hadoop1                   
Last login: Thu Aug 30 04:52:02 2012 from master
[root@hadoop1 ~]#                          // 로그인 완료 !!빠져나가려면 명령창에 단순히 exit  작렬!!

 


 

 

fully distributed 모드 환경 설정

 

 

core-site.xml  //로그 파일, 네트워크 튜닝, I/O 튜닝 , 파일 시스템 튜닝, 압축 등의 하부 시스템을 설정한다.

 

[root@master hadoop-1.0.3]# cd conf 
[root@master conf]# vi core-site.xml 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

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

 

mapred-site.xml  //맵 리듀스 작업시 각 worknode 로 분배 역할을 하는 서버 위치 설정,

 

[root@master conf]# vi mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

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

 

hdfs-site.xml  //hadoop file system 설정

 

[root@master conf]# vi hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>                        //데이터 복제 갯수 설정 보통 3으로 함
        </property>
        <property>
                <name>dfs.name.dir</name>
                <value>home/hadoop/work/name</value>
        </property>
        <property>
                <name>dfs.data.dir</name>
                <value>home/hadoop/work/data</value>
        </property>
</configuration>

 

- dfs.name.dir : 네임노드에서 사용한다. 파일의 디렉토리 정보와 파일 정보등을 저장한다.
- dfs.data.dir : 데이터노드에서 데이터 파일이 저장. ',' 을 이용해 여러개 지정가능하다.

 

master 와 slave 의 구분을 위해 파일 수정

 

[root@master conf]# vi masters
master

[root@master conf]# vi slaves

master
hadoop1

 

여기 까지 한 환경설정 작업파일은 모두 클러스트에 분산된 slave 노드들에게 동일하게 복사 한다.


[root@master conf]# scp core-site.xml root@hadoop1:$HADOOP_INSTALL/conf
core-site.xml                                 100%  269     0.3KB/s   00:00
//이와 같이 hdfs-site.xml , mapred-site.xml , masters , slaves 파일 모두 모든 슬레이브 노드에 복사

 

Pully distributed Mode 실행

 

 

저장소를 사용하기 위해 HDFS 를 포맷

 


[root@master hadoop-1.0.3]# hadoop namenode -format
12/08/31 03:23:53 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = master/192.168.109.128
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 1.0.3
STARTUP_MSG:   build = 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
************************************************************/
Re-format filesystem in home/hadoop/work/name ? (Y or N) Y
12/08/31 03:23:55 INFO util.GSet: VM type       = 32-bit
12/08/31 03:23:55 INFO util.GSet: 2% max memory = 19.33375 MB
12/08/31 03:23:55 INFO util.GSet: capacity      = 2^22 = 4194304 entries
12/08/31 03:23:55 INFO util.GSet: recommended=4194304, actual=4194304
12/08/31 03:23:55 INFO namenode.FSNamesystem: fsOwner=root
12/08/31 03:23:55 INFO namenode.FSNamesystem: supergroup=supergroup
12/08/31 03:23:55 INFO namenode.FSNamesystem: isPermissionEnabled=true
12/08/31 03:23:55 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
12/08/31 03:23:55 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
12/08/31 03:23:56 INFO namenode.NameNode: Caching file names occuring more than 10 times
12/08/31 03:23:56 INFO common.Storage: Image file of size 110 saved in 0 seconds.
12/08/31 03:23:56 INFO common.Storage: Storage directory home/hadoop/work/name has been successfully formatted.
12/08/31 03:23:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.109.128
************************************************************/

 

하둡의 데몬들을 실행

 

[root@master hadoop-1.0.3]# start-all.sh
starting namenode, logging to /tmp/hadoop-1.0.3/libexec/../logs/hadoop-root-namenode-master.out
hadoop1: starting datanode, logging to /tmp/hadoop-1.0.3/libexec/../logs/hadoop-root-datanode-hadoop1.out
master: starting datanode, logging to /tmp/hadoop-1.0.3/libexec/../logs/hadoop-root-datanode-master.out
master: starting secondarynamenode, logging to /tmp/hadoop-1.0.3/libexec/../logs/hadoop-root-secondarynamenode-master.out
starting jobtracker, logging to /tmp/hadoop-1.0.3/libexec/../logs/hadoop-root-jobtracker-master.out
master: starting tasktracker, logging to /tmp/hadoop-1.0.3/libexec/../logs/hadoop-root-tasktracker-master.out
hadoop1: starting tasktracker, logging to /tmp/hadoop-1.0.3/libexec/../logs/hadoop-root-tasktracker-hadoop1.out

 

데몬들의 상태 확인 (본인은 하나의 마스터와 2개의 슬레이브로 구성했기 때문에 namenode 1 , secondary namenode 1, jobtracker 1, datanode 2, tasktracker 2개 가 떠야 한다.

 

[root@master hadoop-1.0.3]# jps  //마스터 상에서 돌아가는 데몬 ( 마스터의 역활과 슬레이브 역활을 하므로 datanode , tasktracker 도 생성)
1151 Jps
32641 DataNode
327 SecondaryNameNode
562 TaskTracker
417 JobTracker
32514 NameNode

 

[root@master hadoop-1.0.3]# ssh hadoop1 //클러스트 계정에서도 확인
Last login: Thu Aug 30 05:53:31 2012 from master
[root@hadoop1 ~]# jps
25562 DataNode
25357 TaskTracker
25702 Jps

 

여기까지 되면 일단락 완전분산모드 환경 성공!!! 휴...

만약 datanode 가 생성이 안되거나 특정 노드가 보이지 않는다면 !! log 에 저장된 ERROR 를 읽어서 해결해야 한다.



ERROR RESOLUTION

 


datanode 가 생성이 안될경우!!!!! 

슬레이브 계정으로 로그인하여 $HADOOP_INSTALL/logs 라는 디렉토리 확인! 각 노드 별로 log 파일이 존재 하므로 오류가 난 해당 노드의 log 파일을 확인하시면 된다 !!

 

 

ERROR case 1:

[root@hadoop1 logs]# cat hadoop-root-datanode-hadoop1.log   // DataNode 에대한 LOG 가 저장되어 있음

2012-08-30 05:53:04,059 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /tmp/hadoop-1.0.3/home/hadoop/work/data: namenode namespaceID = 908579614; datanode namespaceID = 1581120086

오류내용

dfs.name.dir 디렉토리와  dfs.data.dir 정보가 서로 불일치하여 master 장비의 datanode 부팅 실패함.

복구 방법
     dfs.data.dir 하위의 여러 파일 삭제
     dfs.name.dir 은 hadoop namenode -format 으로 초기화 한다.

 

ERROR case 2:

        

[root@master logs]# cat hadoop-root-secondarynamenode-master.log    //secondarynamenode 가 뜨질 않아 log 파일 확인

2012-08-31 16:20:26,903 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.109.128:9000. Already     tried 0 time(s).

2012-08-31 16:20:27,908 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.109.128:9000. Already tried 1 time(s).

2012-08-31 16:20:28,910 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.109.128:9000. Already tried 2 time(s).



오류내용

리눅스는 자체적으로 방화벽이 설치되어 있어 허용되지 않는 포트 번호로 접속이 시도 될때 접속이 되질 않는다. 지금은 9000번 포포트가 막혀있으므로 접속 오류

복구방법

        

[root@master logs]# vi /etc/sysconfig/iptables     // 방화벽 설정하는곳

-A RH_Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT      //해당 포트 번호를 허용한다.

-A RH_Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT

-A RH_Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50010 -j ACCEPT

-A RH_Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50030 -j ACCEPT

-A RH_Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50040 -j ACCEPT

-A RH_Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50060 -j ACCEPT

-A RH_Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50070 -j ACCEPT

-A RH_Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50090 -j ACCEPT

[root@master logs]# /etc/init.d/iptables restart

방화벽 규칙을 삭제하는 중:                                 [  OK  ]

chains를 ACCEPT 규칙으로 설정함: filter                    [  OK  ]

iptables 모듈을 제거하는 중:                               [  OK  ]


  //슬레이브 노드에서도 수정하여 준다.


[root@hadoop1 ~]# cat /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p --dport 50010 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p --dport 50040 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p --dport 50050 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p --dport 50060 -j ACCEPT



이방법이 아니면 자체적으로 방화벽 설정을 해제하는 방법도 있다.

[root@master etc]# cd sysconfig
[root@master sysconfig]# service iptables stop
방화벽 규칙을 삭제하는 중:                                 [  OK  ]
chains를 ACCEPT 규칙으로 설정함: filter                    [  OK  ]
iptables 모듈을 제거하는 중:                               [  OK  ]




이외에도 다양한 오류들이 존재하는데 그럴때마다 log 파일을 확인하여 정확한 오류내용을 찾는것이 현명한 방법이다. 
log 파일을 몰랐을때에는 hadoop 만 다시 깔기를 10번 이상 한것 같습니다. ㅠㅠ 
log 파일에서 정확한 오류 내용을 확인한후 구글에 검색하면 왠만한 오류수정 내용은 나오는것 같습니다 ^^ 하지만 영어번역이 필수 겠지요 ㅎㅎ


저작자 표시
신고

티스토리 툴바