2012년 12월 15일 토요일

Hadoop Cluster 설치하기

설치환경

클러스터를 구성하기 위하여 VirtualBox를 이용하여 삽질을 통해 가상머신을 3개 준비하였으며, 각 가상머신에는 CentOS 6.3 버전을 개발용도로 설치, 호스트 이름과 IP주소는 다음과 같이 지정하였다.

호스트 명 IP주소 용도
alpha.centos 192.168.70.11 NameNode, DataNode, JobTracker
beta.centos 192.168.70.12 DataNode, TaskTracker
gamma.centos 192.168.70.13 DataNode, TaskTracker

실 운용이라면 NameNode에 다른 서비스를 올리지 않겠지만 스터디 환경 구축이 목적이므로 필요한 서비스를 모두 올렸다.

"hadoop" 그룹 내 "hadoop" 계정을 생성하여 설치 시 사용하였다. 시스템 내 다른 계정으로 해도 상관없다.

준비해야 할 것들

Hadoop은 Java로 만들어졌다. 이 말은 즉, Java 실행환경이 설정되어 있어야 한다는 뜻이다. 그것도 1.6.x 이상이어야 한다고 Hadoop 홈페이지에 친절하게 쓰여 있다. 그리고 Java가 어디 설치되어 있는 지 Hadoop에게 알려 주기 위하여 환경변수 JAVA_HOME도 설정해 주어야 한다.

클러스터를 구성할 것이기 때문에 클러스터 노드 간 통신을 해야 한다. Hadoop의 노드는 ssh(Secure Shell)를 이용하여 통신을 하므로 ssh/sshd가 설치되어 있어야 하며 보통은 Linux를 설치할 때 같이 설치된다.

마지막으로 필요한 것은 Hadoop 배포판이다. 다들 짐작하듯이 Hadoop 사이트에서 받을 수 있다. 정확히 얘기하면 http://apache.mirror.cdnetworks.com/hadoop/common/에서 받을 수 있다. 현재도 계속 기능을 추가하여 개발 중이므로 여러 가지 버전이 다양한 형태로 존재한다. 난 현재 stable 버전인 1.0.4 버전 gz 형태(hadoop-1.0.4/hadoop-1.0.4.tar.gz)를 받아 설치하였다. rpm 형태를 받아 설치해도 되지만 자동으로 설치하는 것보다 수동으로 이것 저것 만져보면서 하는 것이 좋을 거란 생각에서 gz 형태를 사용하였다.

이상 필요한 것들을 정리하면 다음과 같다.

1. 1.6.x 이상의 Java Runtime 및 JDK 설치.
2. ssh/sshd 설치되어 있지 않다면 설치.
3. Hadoop 배포판 받기.

이런 것들 이외 기본적인 Linux 명령 사용법, vi 사용법, *.java 컴파일 방법, jar 만드는 법, *.class 파일 실행하는 방법, 놀자는 아이들 달래는 방법, 애인이나 와이프에게 지금 하는 건 노는 게 아니라고 설득하는 것 등등등 많은 것들이 필요하지만 모두 안다고 생각하고 출발~

설치과정

설치하기 위한 모든 준비가 끝났다면 이제 설치해 보자. 설치하기 위한 개략적인(?) 과정은 다음과 같다.

1. Hadoop 배포판 설치하고자 하는 디렉토리에 압축해제 및 복사.
2. 환경변수 JAVA_HOME, HADOOP_HOME 설정.
3. 클러스터 노드 식별을 위한 hosts 파일 설정.
4. SSH 자동인증을 위한 공개키(Public Key) 생성 및 공유.
5. Hadoop에서 필요로 하는 디렉토리 만들기.
6. Hadoop 환경설정 스크립트 실행.
7. 설정파일들 손보기.
8. 설정파일들 클러스터 내 노드간 공유.
9. NameNode 초기화 및 실행.

1. Hadoop 배포판 설치

Hadoop 배포판 파일을 설치하고자 하는 디렉토리로 복사하고 해당 디렉토리로 이동.
(난 /opt 밑에 설치했음.)

[hadoop@alpha ~]# cp hadoop-1.0.4.tar.gz /opt
[hadoop@alpha ~]# cd /opt

배포판 hadoop-1.0.4.tar.gz을 다음과 같이 압축해제.

[hadoop@alpha opt]# gunzip hadoop-1.0.4.tar.gz
[hadoop@alpha opt]# tar -xf hadoop-1.0.4.tar
  or
[hadoop@alpha opt]# tar -xzf hadoop-1.0.4.tar

그러면 다음과 같은 디렉토리가 생긴 것을 볼 수 있다.

[hadoop@alpha opt]$ ls -l
total 186732
drwxr-xr-x. 14 hadoop hadoop      4096 Oct  3 14:17 hadoop-1.0.4
-rw-r--r--.  1 hadoop hadoop 191201280 Dec 08 18:31 hadoop-1.0.4.tar
drwxr-xr-x.  2 root   root        4096 Jun 22  2012 rh
[hadoop@alpha opt]$

설치 끝. 앞으로 여기가 Hadoop 홈디렉토리($HADOOP_HOME) 혹은 설치디렉토리($HADOOP_INSTALL)가 된다(이 경우는 "/opt/hadoop-1.0.4"임). 이제 실행에 필요한 환경을 설정하자.

설치 후 HDFS 등을 실제 구동할 때 환경변수 $HADOOP_HOME가 deprecated 되었다는 메시지를 볼 수 있는데 Hive, HBase 등 다른 모듈과 같이 사용하려면 필요하답니다.

2. 환경변수 JAVA_HOME, HADOOP_HOME 설정

Linux에서 환경변수는 export 명령을 이용하여 설정한다.

[hadoop@alpha ~]# export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
[hadoop@alpha ~]# export HADOOP_HOME=/opt/hadoop-1.0.4

영문 타입핑 연습이 필요한 경우라면 매번 모든 노드에 로그인해서 export 명령을 실행해도 된다. 하지만 많이 귀찮을 것이다. 귀찮음을 없애기 위하여 /etc/profile 파일을 수정하자.

[hadoop@alpha ~]# vi /etc/profile

다음과 같은 vi 화면이 나타나고 제일 뒤쪽에 필요한 export 명령을 추가하자

# /etc/profile
 
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
 
(중략)
 
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
export HADOOP_HOME=/opt/hadoop-1.0.4
 
~

(환경변수에 설정된 디렉토리 경로는 시스템 환경 및 사용자의 성향에 따라 다른 거 다 아시죠?)

3. hosts 파일 설정

클러스터 네트워크 상의 노드를 이름으로 식별하기 위한 설정이다. /etc/hosts 파일에 각 노드의 이름과 IP주소를 명시하여 노드 이름으로 입력되어도 IP주소로 찾아 갈 수 있게 하자. 텍스트 파일이니까 vi 같은 맘에 드는 에디터를 이용하여 편집하면 된다. 단, root 권한 필요. 난 다음과 같이 노드의 이름과 IP주소를 할당하여 클러스터를 구성하였다. (이것도 시스템 환경 및 사용자의 성향에 따라 다른 거 다 아시죠?)

[root@alpha ~]# cat /etc/hosts
192.168.70.11          alpha.centos
192.168.70.12          beta.centos
192.168.70.13          gamma.centos

'난 IP주소를 이용하여 클러스터 내 노드를 지정할거야'라고 한다면 설정하지 않아도 된다.

네트워크 카드가 2개 이상인 경우 hosts 파일 내 루프백 주소(127.0.0.1)가 있으면 Hadoop 데몬이 제대로 Listening하지 못하는 현상이 발생했었다. 127.0.0.1이 있다면 제거하자.

노드의 이름과 IP주소 정보는 클러스터 내 모든 노드가 공유할 필요가 있다. 각 노드마다 로그인해서 vi를 이용하든지 아니면 다음 명령을 이용하여 hosts 파일을 공유하자.

[root@alpha ~]# rsync /etc/hosts root@beta.centos:/etc/hosts
[root@alpha ~]# rsync /etc/hosts root@gamma.centos:/etc/hosts
[root@alpha ~]# 

4. SSH 자동인증을 위한 공개키(Public Key) 생성 및 공유

SSH(Secure SHell)은 인증키를 이용하여 상호 인증 후 접속을 허락하는 보안성 높은 암호화 통신방식(?)이다. 이 말은 인증키만 맞으면 묻지도 따지지도 않고 연결을 허락한다는 뜻이다. 그럼 인증키를 맞추는 방법은 뭘까? 방법은 "① 인증키 생성, ② 키 공유"이다. 농담같지만 정말이다(^^;;;). 그러면 어떻게 생성하고 공유하는 지 자세히 살펴보자.

① 인증키 생성

ssh-keygen 명령을 이용한다. 사용방법은 다음과 같다.

[hadoop@alpha conf]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): (a)
Created directory '/home/hadoop/.ssh'.
Enter passphrase (empty for no passphrase): (b)
Enter same passphrase again: (c)
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
The key fingerprint is:
8d:a1:0d:23:a8:0d:1b:e9:4b:06:fa:63:4a:25:a8:e8 hadoop@alpha.centos
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
| . .             |
|= . . o .        |
|=*   . = +       |
|==..  . S .      |
|=.+              |
|oo+              |
|oo .             |
|.E               |
+-----------------+
[hadoop@alpha conf]$ 

ssh-keygen 명령을 수행할 때 인수로 중요한 것은 인증키 생성 방식이다. RSA와 DSA 방식이 있는데 위 경우는 RSA 방식으로 인증키를 생성한 경우이다. 구동 중인 ssh가 어떤 방식을 사용하고 있는지에 맞춰 생성해야 한다.

(a)에서는 생성할 인증키를 저장할 위치를 지정한다. 굳이 바꿀 필요가 없다. 그냥 <Enter>.

(b)에서는 암호(password)와 비슷한 통과문구(passphrase)를 입력한다. 그냥 ssh 인증용 암호라고 생각하면 될 것 같다. 여기에 통과구문를 입력하면 ssh를 이용하여 접속할 때마다 입력한 통과구문을 암호처럼 입력해야 한다. 우리의 목적은 Hadoop 데몬들 간 자동으로(아무런 입력없이) ssh 통신을 할 수 있도록 하는 것이기 때문에 아무것도 입력하지 않는다. 그냥 <Enter>.

(c)에서는 (b)에서 입력한 것을 그대로 입력한다. 아무것도 입력하지 않았으므로 여기도 그냥 <Enter>.

이제, 인증키가 생성되었다는 메시지와 함께 id_rsa, id_rsa.pub 파일이 생긴것을 확인할 수 있다. id_rsa는 개인키(Private Key)이고 id_rsa.pub는 공개키(Public Key)이다. 인수를 DSA 방식으로 지정하면 id_dsa, id_dsa.pub가 생성된다.

[hadoop@alpha ~]$ ls -l ~/.ssh
합계 16
drwx------. 2 hadoop hadoop 4096 2012-12-31 13:29 .
drwx------. 5 hadoop hadoop 4096 2012-12-31 13:29 ..
-rw-------. 1 hadoop hadoop 1675 2012-12-31 13:29 id_rsa
-rw-r--r--. 1 hadoop hadoop  401 2012-12-31 13:29 id_rsa.pub

상호 자동인증하고자 하는 모든 노드에서 인증키 생성 작업을 수행하여 id_rsa.pub 파일을 생성하여야 한다. 모두 생성했다면 이제 키를 공유하자.

② 키 공유

여기서 키는 자물쇠를 열 때 필요한 쇠로된 울퉁불퉁한 물건의 형태가 아니라 암호화된 문자열이다. 자동 인증하려면 이 키 문자열이 "~/.ssh/authorized_keys"에 있어야 한다. 조금 더 상세히 말하면, 노드 A의 hadoop 계정을 이용, 노드 B의 hdfs 계정으로 자동 접속하고 싶다면, A에서 hadoop 계정으로 인증키를 생성하고 생성한 공개키 문자열을 노드 B의 "/home/hdfs/.ssh/authorized_keys" 파일에 복사해 넣어야 한다(접속하고 싶은 쪽의 공개키가 접속되는 쪽에 있어야 한다).

자~ 그러면 실제 해 보자. 여기 저기 옮겨다니면 피곤하니까 한 노드에서만 작업을 하자.

작업의 편의를 위하여 "~/.ssh/" 디렉토리로 이동하자. 그리고 "authorized_keys" 파일이 없다면 다음과 같이 생성하자.

[hadoop@alpha .ssh]$ cat id_rsa.pub >> authorized_keys

"authorized_keys" 파일의 사용권한은 소유자 이외 쓰기가 허락되서는 안된다. Group이나 Other가 쓰기 가능하다면 ssh 자동접속은 물건너 간다(매번 암호를 다시 묻는다). 파일 액세스 권한을 변경하자.

[hadoop@alpha .ssh]$ chmod 755 authorized_keys

이렇게 하면 다른 노드(alpha.centos 이외 노드)에게 줄 내(alpha.centos) 공개키는 준비되었다. 이제 다른 노드의 공개키를 다음 명령을 이용하여 복사해 오자.

[hadoop@alpha .ssh]$ ssh hadoop@gamma.centos cat ~/.ssh/id_rsa.pub >> authorized_keys
The authenticity of host 'gamma.centos (192.168.70.13)' can't be established.
RSA key fingerprint is b9:aa:12:e2:77:f0:44:c5:5e:20:c5:5c:6d:15:fe:f2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gamma.centos,192.168.70.13' (RSA) to the list of known hosts.
hadoop@gamma.centos's password: (암호입력)
[hadoop@alpha .ssh]$

자동인증하고자 하는 모든 노드의 공개키를 "authorized_keys"로 복사해 오자. 다음 명령을 한번 더 하자는 뜻이다.

[hadoop@alpha .ssh]$ ssh hadoop@beta.centos cat ~/.ssh/id_rsa.pub >> authorized_keys

이제 모든 노드의 공개키를 복사했다면 authorized_keys가 완성되었고 모든 노드에 복사해 주면 모든 과정이 끝난다. 복사는 다음과 같이 하자.

[hadoop@alpha .ssh]$ scp ./authorized_keys hadoop@beta.centos:~/.ssh/
hadoop@beta.centos's password: (암호입력)
authorized_keys                               100% 1202     1.2KB/s   00:00
[hadoop@alpha .ssh]

최종 확인을 위하여 ssh로 접속해 보면,

[hadoop@alpha .ssh]$ ssh hadoop@beta.centos
Last login: Wed Dec 13 08:36:32 2012 from alpha.centos
[hadoop@beta ~]$ _

묻지도 따지지도 않고 접속되는 모습을 확인할 수 있다. 만약, 암호를 묻는다면 공개키는 제대로 생성했는지, RSA인지 DSA인지 authorized_keys 파일에 공개키 내용이 제대로 복사되었는 지, 권한은 올바른 지 등을 확인해 보자.

5. Hadoop용 디렉토리 만들기

Hadoop의 실행환경을 설정하기 위하여 hadoop-setup-conf.sh를 실행하면 필요로 하는 디렉토리들이 몇 가지 있다.

디렉토리 설명 기본값
Config Hadoop 실행을 위하여 필요한 설정파일 저장위치 /etc/hadoop
Log 실행 중 발생하는 로그 저장위치 /var/log/hadoop
PID 클러스터 내 노드를 위한 PID 정보 저장위치 /var/log/hadoop
NameNode 네임노드의 데이터 저장위치 /var/lib/hadoop/hdfs/namenode
DataNode 데이터 노드의 데이터 저장위치 /var/lib/hadoop/hdfs/datanode
JobTracker MapReduce 작업용 디렉토리 /var/lib/hadoop/mapred

기본값을 그대로 사용해도 무방하다. 중요한 것은 각 노드의 역할에 따라 필요한 디렉토리가 실제로 존재해야 한다는 것이다. 지정한 디렉토리가 있는지 확인하고 없다면 만들자. 난 다음과 같이 생성하였다.

디렉토리 설정값
Config /opt/hadoop-1.0.4/conf
Log /opt/hadoop-1.0.4/data/log
PID /opt/hadoop-1.0.4/data/log
NameNode /opt/hadoop-1.0.4/data/namenode
DataNode /opt/hadoop-1.0.4/data/datanode
JobTracker /opt/hadoop-1.0.4/data/mapred

모든 노드에 지정한 폴더가 있어야 한다. 노드의 역할에 따라 없어도 되는 디렉토리도 있지만 난 그냥 모두 만들었다. 또 하나 중요한 사항은 생성한 디렉토리의 권한은 drwx------, 즉 소유자만 읽고, 쓰고, 실행할 수 있어야 한다. 그러니 생성한 디렉토리 마다 "chmod 700 ..."을 해 주자.

6. Hadoop 환경설정 스크립트 실행

Hadoop 실행환경 설정을 위한 스크립트 hadoop-setup-conf.sh를 실행하자. 위치는 Hadoop 설치 디렉토리 밑에 있는 ./sbin 디렉토리에 있다. 실행하면 다음과 같은 화면이 나타난다.

[hadoop@alpha sbin]$ ./hadoop-setup-conf.sh
Setup Hadoop Configuration
 
Where would you like to put config directory? (/etc/hadoop) /opt/hadoop-1.0.4/conf
Where would you like to put log directory? (/var/log/hadoop) /opt/hadoop-1.0.4/data/log
Where would you like to put pid directory? (/var/log/hadoop) /opt/hadoop-1.0.4/data/log
What is the host of the namenode? (alpha.centos) (NameNode용 호스트 입력)
Where would you like to put namenode data directory? (/var/lib/hadoop/hdfs/namenode) /opt/hadoop-1.0.4/data/namenode
Where would you like to put datanode data directory? (/var/lib/hadoop/hdfs/datanode) /opt/hadoop-1.0.4/data/datanode
What is the host of the jobtracker? (alpha.centos) (JobTracker용 호스트 입력)
Where would you like to put jobtracker/tasktracker data directory? (/var/lib/hadoop/mapred) /opt/hadoop-1.0.4/data/mapred
Where is JAVA_HOME directory? (/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64) (Java 위치)
Would you like to create directories/copy conf files to localhost? (Y/n) Y

5에서 생성한 디렉토리 위치에 맞춰 위와 같이 입력하고 "Y"를 누르면 입력한 내용을 확인할 수 있는 화면이 나타난다.

Review your choices:
 
Config directory            : /opt/hadoop-1.0.4/conf
Log directory               : /opt/hadoop-1.0.4/data/log
PID directory               : /opt/hadoop-1.0.4/data/log
Namenode host               : alpha.centos
Namenode directory          : /opt/hadoop-1.0.4/data/namenode
Datanode directory          : /opt/hadoop-1.0.4/data/datanode
Jobtracker host             : alpha.centos
Mapreduce directory         : /opt/hadoop-1.0.4/data/mapred
Task scheduler              : org.apache.hadoop.mapred.JobQueueTaskScheduler
JAVA_HOME directory         : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
Create dirs/copy conf files : Y
 
Proceed with generate configuration? (y/N) y

"y"를 입력하면 스크립트 수행결과가 나타나고,

chown: changing ownership of `/opt/hadoop-1.0.4/conf/hadoop-env.sh': 명령을 허용하지 않음
chown: changing ownership of `/opt/hadoop-1.0.4/conf/taskcontroller.cfg': 명령을 허용하지 않음
chown: changing ownership of `./../bin/task-controller': 명령을 허용하지 않음
 
Configuration file has been generated in:
 
/opt/hadoop-1.0.4/conf/core-site.xml
/opt/hadoop-1.0.4/conf/hdfs-site.xml
/opt/hadoop-1.0.4/conf/mapred-site.xml
/opt/hadoop-1.0.4/conf/hadoop-env.sh
/opt/hadoop-1.0.4/conf/hadoop-policy.xml
/opt/hadoop-1.0.4/conf/commons-logging.properties
/opt/hadoop-1.0.4/conf/taskcontroller.cfg
/opt/hadoop-1.0.4/conf/capacity-scheduler.xml
/opt/hadoop-1.0.4/conf/log4j.properties
/opt/hadoop-1.0.4/conf/hadoop-metrics2.properties
 
to /opt/hadoop-1.0.4/conf on all nodes, and proceed to run hadoop-setup-hdfs.sh on namenode.
[hadoop@alpha sbin]$

설정파일들은 지정한 Config 디렉토리에 생성된다.

생성된 파일을 다른 노드에 배포하고 hadoop-setup-hdfs.sh를 NameNode에서 실행하라고 친절한 메시지도 보여준다. 그런데 굳이 하지 않아도 된다.

7. 설정파일들 손보기

6번째 단계에서 실행을 위한 환경이 다 갖춰지면 좋을텐데 그렇지가 못하다. 그래서 몇몇 설정 파일을 손봐줘야 한다. 그렇다고 많이는 아니고 4개 정도만 손보면 된다.

첫 번째로 손볼 파일은 hdfs-site.xml 파일이다. 파일명에서 보듯이 분산 파일 시스템 관련된 설정을 저장하는 파일이다.

HDFS도 Linux 파일 시스템과 마찬가지로 생성된 파일, 디렉토리에 대한 권한이 있다. 기본적으로 생성한 자신만 읽고 쓸 수 있게 되어 있어 Web Console 등을 이용하여 파일 내용을 확인할 때 문제가 된다. 이를 해결하기 위하여 hdfs-site.xml 파일에 다음과 같이 umask 값을 지정하자.

<name>dfs.umaskmode</name>
<value>022</value>

umask 값 지정시 지정하고자 하는 권한의 Octet값을 반대로 지정해야 한다. 위와 같이 지정하면 755로 권한이 부여되어 모든 사람이 읽을 수 있게 된다.

두 번째로 손볼 파일은 hadoop-env.sh 파일이다. Hadoop 실행환경을 위하여 만들어진 스크립트인데 이 스크립트에 환경변수 JAVA_HOME가 설정되어 있지 않으면 DataNode에서 Java를 찾는 경우가 있다. 그러니 다른 데서 했더라도 한번 더 해 주자.

세 번째로 손볼 파일은 masters란 파일로 Secondary NameNode의 호스트를 지정하는 파일이다. 난 다음과 같이 지정하였다. (실전에서는 이렇게 하면 안됨.)

[hadoop@alpha conf]$ cat masters
alpha.centos

마지막으로 손볼 파일은 slaves 이다. 이 파일은 DataNode의 호스트를 지정하는 파일로, 내가 지정한 내용은 내가 설치하려는 시스템 구성에 맞게 다음과 같이 수정하였다.

[hadoop@alpha conf]$ cat slaves
alpha.centos
beta.centos
gamma.centos

휴~ 이제 Hadoop 설치 및 설정파일 편집이 끝났다.

8. 설정파일들 클러스터 내 노드간 공유

Hadoop의 핵심인 HDFS와 MapReduce을 실행하기 전 마지막으로 할 일은 지금까지 만든 설정파일을 모든 노드가 공유하는 것이다. 설정파일 편집작업을 한 노드(alpha.centos)에서 다음 명령으로 다른 노드에 설정파일을 공유하자.

rsync /opt/hadoop-1.0.4/conf/* hadoop@beta.centos:/opt/hadoop-1.0.4/conf/
rsync /opt/hadoop-1.0.4/conf/* hadoop@gamma.centos:/opt/hadoop-1.0.4/conf/

공유 후 각 노드의 시스템 환경에 따라 변경해 주어야 할 것들이 있다면 해당 부분을 수정하자. 예를 들어 JAVA_HOME 같은 것들~

9. NameNode 초기화 및 실행.

하드 디스크를 새로 사면 사용하기 전에 포맷을 한다. HDFS도 마찬가지다. 사용하기 전에 정보를 담고 있을 NameNode를 포맷해야 한다.

[hadoop@alpha conf]$ hadoop namenode -format
Warning: $HADOOP_HOME is deprecated.
 
12/12/15 13:58:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = alpha.centos/192.168.70.11
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
************************************************************/
Re-format filesystem in /opt/hadoop-1.0.4/data/namenode ? (Y or N) Y
12/12/15 13:59:00 INFO util.GSet: VM type       = 64-bit
12/12/15 13:59:00 INFO util.GSet: 2% max memory = 19.33375 MB
12/12/15 13:59:00 INFO util.GSet: capacity      = 2^21 = 2097152 entries
12/12/15 13:59:00 INFO util.GSet: recommended=2097152, actual=2097152
12/12/15 13:59:01 INFO namenode.FSNamesystem: fsOwner=hadoop
12/12/15 13:59:01 INFO namenode.FSNamesystem: supergroup=supergroup
12/12/15 13:59:01 INFO namenode.FSNamesystem: isPermissionEnabled=true
12/12/15 13:59:01 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
12/12/15 13:59:01 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
12/12/15 13:59:01 INFO namenode.NameNode: Caching file names occuring more than 10 times
12/12/15 13:59:01 INFO common.Storage: Image file of size 112 saved in 0 seconds.
12/12/15 13:59:01 INFO common.Storage: Storage directory /opt/hadoop-1.0.4/data/namenode has been successfully formatted.
12/12/15 13:59:01 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at alpha.centos/192.168.70.11
************************************************************/
[hadoop@alpha conf]$

포맷이 끝나고 나면 Hadoop 데몬을 띄울 차례다. Hadoop 설치 디렉토리 중 ./bin 디렉토리에 보면 데몬을 실행할 수 있는 여러 스크립트들이 있다. 이 중 start-dfs.sh는 HDFS 데몬을 모든 노드에 띄우는 스크립트이고, start-mapred.sh는 MapReduce의 JobTracker와 TaskTracker를 띄우는 스크립트이다.

[hadoop@alpha bin]$ start-dfs.sh
Warning: $HADOOP_HOME is deprecated.
 
starting namenode, logging to /opt/hadoop-1.0.4/data/log/hadoop-hadoop-namenode-alpha.centos.out
alpha.centos: starting datanode, logging to /opt/hadoop-1.0.4/data/log/hadoop-hadoop-datanode-alpha.centos.out
gamma.centos: starting datanode, logging to /opt/hadoop-1.0.4/data/log/hadoop-hadoop-datanode-gamma.centos.out
beta.centos: starting datanode, logging to /opt/hadoop-1.0.4/data/log/hadoop-hadoop-datanode-beta.centos.out
alpha.centos: starting secondarynamenode, logging to /opt/hadoop-1.0.4/data/log/hadoop-hadoop-secondarynamenode-alpha.centos.out
[hadoop@alpha bin]$
[hadoop@alpha conf]$ start-mapred.sh
Warning: $HADOOP_HOME is deprecated.
 
starting jobtracker, logging to /opt/hadoop-1.0.4/data/log/hadoop-hadoop-jobtracker-alpha.centos.out
gamma.centos: starting tasktracker, logging to /opt/hadoop-1.0.4/data/log/hadoop-hadoop-tasktracker-gamma.centos.out
alpha.centos: starting tasktracker, logging to /opt/hadoop-1.0.4/data/log/hadoop-hadoop-tasktracker-alpha.centos.out
beta.centos: starting tasktracker, logging to /opt/hadoop-1.0.4/data/log/hadoop-hadoop-tasktracker-beta.centos.out
[hadoop@alpha conf]$

한번에 띄우려면 start-all.sh를 실행하면 된다.

데몬 실행 중 암호같은 것을 묻는다면 ssh 인증키 공유가 잘 안된 것이므로 4단계를 다시 해 보자. 다른 문제가 없는 것같은데 NameNode에 계속 접속 시도한다는 로그가 있으면 NameNode의 방화벽 설정을 변경하자. 기타 오류로 인하여 데몬이 실행되지 않았다면 위 화면 상에 보이는 위치에 *.log 파일을 참조하여 수정하자.

제대로 데몬이 띄워졌다면 다음과 같이 확인해 볼 수 있다.

[hadoop@alpha conf]$ jps
23503 Jps
21953 SecondaryNameNode
23392 TaskTracker
21827 DataNode
23271 JobTracker
21706 NameNode

실행 중인 데몬을 중지시키고 싶으면 앞서 실행한 스크립트에서 "start"만 "stop"으로 바뀐 스크립트를 이용하면 된다. "끝"

저작자: Yes, 상업적 이용: No, 컨텐츠 변경: No

댓글 없음:

댓글 쓰기