아파치 하둡 완전분산 설치 2 (Apache Hadoop Full Distributed)
아파치 하둡은 Binanary Version으로 Download 시 별도의 Install 과정은 없으며
단지, 압축만 풀어준 후 기본 설정을 해 주면 된다.
하지만, 설정은 인터넷/서적 등의 자료도 부족하고 여러 번의 실패를 겪으면서
익힐 수 밖에 없다.
1. Host 등록
본 블로그에서는 bigdata1~bigdata5 5개의 노드를 사용한다고 가정한다.
OS 상에 각 노드들의 정보를 등록한다.
vi /etc/hosts 수행 후 각 노드의 IP와 Name을 등록 (root 계정에서 등록)
192.XXX.XXX.1 bigdata1
192.XXX.XXX.2 bigdata2
192.XXX.XXX.3 bigdata3
192.XXX.XXX.4 bigdata4
192.XXX.XXX.5 bigdata5
2. SSH 설정
bigdata1을 NameNode bigdata2를 Seconsary Name Node
bigdata3~bigdata5를 DataNode로 사용한다고 가정
(1) Namenode에서 SSH Key 생성
bigdata 계정에서 (모든 Node에서는 같은 계정 사용 권장) Namenode에서 SSH Key 최초 생성
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/hbase/hadoop-1.0.4/.ssh/id_rsa):
Created directory '/hbase/hadoop-1.0.4/.ssh'.
Enter passphrase (empty for no passphrase): <-엔터키
Enter same passphrase again:
Your identification has been saved in /hbase/hadoop-1.0.4/.ssh/id_rsa.
Your public key has been saved in /hbase/hadoop-1.0.4/.ssh/id_rsa.pub.
The key fingerprint is:
....
passparase를 설정하게 되면 Hadoop 실제 구동시에 접속이 실패할 수 있으므로 엔터키 타이핑
(2) SNN(Secondary Name Noe)와 나머지 DataNode에 SSH Key 배포
Destination Node에서 MasterNode로 ssh 접속이 되는지 1회 테스트 수행 (ssh bigdata1)
scp ~/.ssh/id_rsa.pub bigdata@bigdata2:~/bigdata1_key
bigdata1에서
scp ~/.ssh/id_rsa.pub bigdata@bigdata2:~/bigdata1_key
The authenticity of host 'bigdata2 (192.XXX.XXX.XXX)' can't be established.
RSA key fingerprint is XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'bigdata2,192.XXX.XXX.XXX' (RSA) to the list of known hosts.
bigdata@bigdata2's password: 대상노드 Password 기입
id_rsa.pub 100% 398 0.4KB/s 00:00
mv ~/bigdata1_key ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
위와 같이 배포된 SSH Key를 authorized_keys로 이동한 후 Permission 수정
bigdata1 (NameNode)에서 bigdata2로 SSH 접속 테스트
ssh bigdata2
위의 명령으로 ssh가 bigdata2로 Password 기입없이 접속되는지 확인
(만약 NameNode와 DataNode를 한 곳에 두었을 경우 bigdata1->bigdata1으로 동일한 과정을 거쳐야 함)
위의 과정을 bigdata3 bigdata4, bigdata5에도 반복 수행
3. SNN(Secondary Name Node)와 DataNode 설정
(1) SNN
SNN은 HA 개념이 아닌 NameNode의 Transaction 정보를 단순히 백업해 두는 역할을 한다.
반드시 필요한 Node이며 $HADOOP_HOME/conf/masters에 ServerName을 지정하면 된다.
(/etc/hosts에 서버명 등록 필수)
cd $HADOOP_HOME/conf
vi masters
bigdata2 기입
cat masters
bigdata2
SNN Server Name이 정상적인지 확인
(2) DataNode
cd $HADOOP_HOME/conf
vi slaves
bigdata3
bigdata4
bigdata5
를 기입
cat slaves
bigdata3
bigdata4
bigdata5
DataNode Server Name이 정상적인지 확인
4. CORE-SITE.xml 편집
vi $HADOOP_HOME/conf/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>hadoop.tmp.dir</name>
<value>/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://bigdata1:9000</value>
</property>
</configuration>
Hadoop File System과 OS File System 모두에서 /tmp Directory를 Temp Directory로 사용하겠다는 의미이며
Hadoop File System의 기본경로를 bigdata1:9000 (NameNode)로 사용하겠다는 설정
5. HDFS-SITE.xml 편집
vi $HADOOP_HOME/conf/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>2</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/hbase/hadoop-1.0.4/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/hbase/hadoop-1.0.4/dfs/data</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
<property>
<name>dfs.http.address</name>
<value>bigdata1:50070</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>bigdata2:50090</value>
</property>
</configuration>
위는 데이터간 복제는 2개 (노드가 많다면 3을 권장), HDFS가 실제 물리적으로 저장되는 경로는
NameNode에서는 /hbase/hadoop-1.0.4/dfs/name 을 DataNode에서는 /hbase/hadoop-1.0.4/dfs/data 을
실제 물리적인 FileSystem으로 사용하겠다는 의미이다.
6. mapred-site.xml 편집
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>bigdata1:9001</value>
</property>
</configuration>
위는 JobTracker (NameNode의 병렬처리 담당 프로세스)가 bigdata1:9001 주소를 사용한다는 의미이다.
7. hadoop-env.sh 수정
vi $HADOOP_HOME/conf/hadoop-env.sh 수행 후 아래의 부분과 같이 수정하거나 추가
export HADOOP_HOME=/hbase/hadoop-1.0.4
export HADOOP_HOME_WARN_SUPPRESS=TRUE
export JAVA_HOME=/usr/java/jdk1.6.0_33
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/hadoop-examples-1.0.4.jar:
for f in ${HADOOP_HOME}/lib/*.jar; do
HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:$f;
done
export HADOOP_HEAPSIZE=4000
8. 설정 파일 동기화
NameNode에서 작성한
hadoop-env.sh, core-site.xml, hdfs-site.xml, mapred-site.xml을
모든 DataNode와 SNN의 (bigdata2~5) $HADOOP_HOME/conf에 복사한다.
9. HDFS NameNode Format
하둡의 초기화를 위해 Master 역할을 하는 NameNode에서(bigdata1) 아래와 같이 수행
hadoop namenode -format
12/11/06 20:30:06 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = bigdata1/XXX.XXX.XXX.XXX
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.0.4
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1393290; compiled by 'hortonfo' on Wed Oct 3 05:13:58 UTC 2012
************************************************************/
12/11/06 20:30:06 INFO util.GSet: VM type = 64-bit
12/11/06 20:30:06 INFO util.GSet: 2% max memory = 71.11125 MB
12/11/06 20:30:06 INFO util.GSet: capacity = 2^23 = 8388608 entries
12/11/06 20:30:06 INFO util.GSet: recommended=8388608, actual=8388608
12/11/06 20:30:06 INFO namenode.FSNamesystem: fsOwner=bigdata
12/11/06 20:30:06 INFO namenode.FSNamesystem: supergroup=supergroup
12/11/06 20:30:06 INFO namenode.FSNamesystem: isPermissionEnabled=true
12/11/06 20:30:06 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
12/11/06 20:30:06 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
12/11/06 20:30:06 INFO namenode.NameNode: Caching file names occuring more than 10 times
12/11/06 20:30:06 INFO common.Storage: Image file of size 113 saved in 0 seconds.
12/11/06 20:30:06 INFO common.Storage: Storage directory /hbase/hadoop-1.0.4/dfs/name has been successfully formatted.
12/11/06 20:30:06 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at bigdata1/XXXX.XXXX.XXX.XXX
************************************************************/
10. HDFS Startup
cd $HADOOP_HOME/bin
start-all.sh
위의 명령으로 Hadoop을 최초로 시작할 수 있다.
11. 구동 확인
jps
위의 OS 명령으로 DataNode, NameNode, SecondaryNameNode,
TaskTracker, JobTracker 등이 제대로 구동되는지 알 수 있다.
(NameNode의 경우)
15765 Jps
14834 NameNode
15131 JobTracker
(SNN의 경우)
8409 SecondaryNameNode
8625 Jps
(DataNode의 경우)
8498 TaskTracker
8300 DataNode
8625 Jps
hadoop fs -ls /
위의 명령으로 HDFS의 File들을 확인할 수 있다. (NameNode, DataNode, SNN에서 모두 확인 가능)
Found 1 items
drwxr-xr-x - bigdata supergroup 0 2012-11-06 20:54 /tmp
하둡이 구동되었다!!!!