[하둡(Hadoop) 설치] 기타 에러에 관한 사항들 정리 by Kertz

하둡을 설치하면서 겪었던 무수히 많은 문제 중 기억에 남는 부분들만 몇가지 정리해보았습니다.

1) 네임노드의 호스트를 찾을 수 없는 에러

- /etc/hosts 파일의 설정을 확인하여 해결. 모든 노드들이 서로 동일한 내용으로 설정되어야 합니다.
- 방화벽을 해제하여 해결. 방화벽 문제로 인해 노드들간 통신이 제대로 되지 않아 구동이 되지 않은 경우가 있었습니다.


2) Bad connection to FS. 또는 호스트로 갈 루트가 없음. 에러

- hadoop fs - ls 같은 하둡 명령어가 먹히지 않는 경우가 있었습니다. 이렇게 되면 하둡은 돌아가는데, 제 구실은 못하는 경우라고 할 수 있겠죠. 이 경우 core-site.xml과 hdfs-site.xml의 설정 파일에 있는 fs.default.name이 서로 일치하지 않아서 생긴 문제였습니다.


[하둡 설치] 하둡 설치 일기 vol.3 (Install Hadoop) 완전 분산모드 설정 by Kertz

수많은 변수와 환경적 요인 그리고 게으름으로 인해 무려 1년 이상 지난 시기에서 설치 일기 3편을 완성하려 합니다.
열심히 따라오시다가 그만 밑 덜 닦인 기분으로 씁쓸히 다른 블로그나 정보사이트를 찾아가셔야 했던 방문자 분들께 진심으로 사과의 말씀 드립니다.

그럼 다시 시작해보겠습니다.


지금으로부터 1년 4개월 전.... 하둡 설치 일기 2편은 아래와 같이 마무리 했었지요...


"...다음 포스팅에서는 완전 분산 모드의 설정 방법에 대해 다루고자 한다."


네. 부끄럽지만 그럴 계획이었습니다.

하둡의 분산 모드는 4개의 파일 (core-site, hdfs-site, mapred-site, hadoop-env)을 설정하여 변경할 수 있습니다.


# 들어가기에 앞서...

아래의 1)~4)까지의 과정은 네임노드와 하위 노드 모두에 동일하게 설정해주셔야 합니다. 따라서 일일이 동일한 내용을 수정해주기 번거로우므로 네임노드 상에서 먼저 수정한 뒤 하위 노드들에 해당 파일을 복사하셔서 쓰시길 권장합니다.


1) core-site.xml 설정

core-site.xml 파일은 네임노드의 호스트와 포트를 설정하는 파일입니다. 저의 경우 네임노드의 호스트명이 master 였으므로 hdfs://master:9000으로 설정했습니다.



2) hdfs-site.xml 설정

hdfs-site.xml 파일은 이름에서 유추할 수 있듯 하둡 파일 시스템에 관한 설정을 담는 파일입니다.
아래의 설정 코드에서 주의깊게 보셔야 할 부분은, 이전 단계에서 생성했던 filesystem의 name 폴더와 data 폴더를 지정했다는 점입니다. 
이렇게 지정을 해준 뒤 하둡을 구동하면 하위 노드의 data 폴더에 파일들이 생성되기 시작하는 것을 볼 수 있습니다. 
그리고 설정이 변경되어 네임노드를 포맷했다면, 하위 노드들의 data폴더 내에 있는 모든 파일들을 다시 삭제해준 뒤 구동해야만 에러를 방지할 수 있습니다.

※ hdfs-site.xml을 설정하면서 주의하셔야할 점core-site.xml의 fs.default.name과 hdfs-site.xml의 fs.default.name이 반드시 일치해야 합니다. 또한 포트번호(예제에서는 9000번입니다.)가 두 파일 중 하나라도 누락되는 경우 (기본 포트번호는 8020인 것으로 생각됩니다.) 하둡 서버가 구동은 되지만, 맵리듀스 및 하둡 상에서 명령어가 실행되지 않습니다.
("Bad connection to FS" 라는 에러가 뜨거나 호스트로 갈 루트가 없다는 에러 메시지를 출력하는 경우 이런 문제를 체크해 볼 필요가 있습니다.)


3) mapred-site.xml 설정

mapred-site.xml 파일은 잡트래커의 호스트와 포트를 설정하는 파일입니다. 이 파일 또한 마찬가지로 지난 과정에서 생성했던 mapreduce의 local 폴더를 지정한 것을 주의깊게 보시면 됩니다. 이 폴더를 통해 맵리듀스를 위한 준비와 분석, 결과 저장이 이뤄지게 됩니다.



4) hadoop-env.sh 설정

hadoop-env.sh 파일은 JAVA 설치 경로와 하둡 설치 경로 (/etc/profile 경로에 설정했던 내용대로)를 추가해주시면 됩니다.
참고로 #표시로 주석 처리가 되어있으니 이를 변경한 뒤 주석 처리를 해제해주셔야 합니다.


5) masters, slaves 파일 설정 - 네임노드와 하위노드 모두 동일한 내용으로 설정

네임노드로 사용할 호스트 명을 masters 파일 내에 적어주시면 됩니다. 마찬가지로 slaves 파일에는 하위 노드들의 호스트 명을 적어주시면 됩니다.

[kertz#master conf]$ cat masters
master

[kertz@master conf]$ cat slaves
node1
node2
node3



6) 설정 내용을 하위 노드들에 복사

설정한 내용은 간단한 스크립트를 통해 일괄적으로 복사할 수 있습니다.

① 1단계 :  /home/user명/hadoop 경로에 copy.sh 파일 만들기. (home/유저명/하둡폴더명 형태)

- 터미널 상에 vi copy.sh 입력
- 아래의 내용을 타이핑
#!/usr/bin/env bash
SERVERS=conf/slaves
if [2 -gt "$#"]
then
echo "usage: $0 \"<local full path> <remote full path>\""
        exit 1
fi
for i in `cat $SERVERS`
do
        scp "$1" $i:"$2"
done
- 입력하였다면 esc키를 누르고 :wq를 입력하여 저장.



② 2단계 : /home/kertz 에서 파일 압축

- 터미널 상에 tar czvf hadoop.tar.gz hadoop 입력. (tar czvf 압축파일명 압축할폴더명 형태)



③ 3단계 : 하위 노드들로 복사

- /home/kertz/hadoop 경로로 이동 (cd 명령어)
- 터미널 상에서 다음과 같이 입력하면 하위 노드들에게 모두 복사 완료.
./copy.sh /home/kertz/hadoop.tar.gz /home/kertz/hadoop.tar.gz


④ 4단계 : 복사된 파일들을 동시에 압축해제

- /home/kertz/hadoop 경로로 이동
- 터미널 상에서 다음과 같이 입력하여 모두 압축해제
./bin/slaves.sh tar xzvf /home/kertz/hadoop.tar.gz


7) 대망의 하둡 구동 (네임노드 포맷과 구동 명령어)

네임노드 포맷 명령어는 다음과 같이 타이핑하시면 됩니다. 단, 네임노드 상에서 실행하셔야 합니다.
hadoop namenode -format

이제 포맷을 했으니 하둡을 구동할 차례입니다. 부디 이 한 줄의 명령어가 에러없이 떠서 여러분들께 큰 기쁨(?)을 안겨드리길 기원합니다. 마찬가지로 네임노드 상에서 명령어를 실행하시면 됩니다.
start-all.sh

참고로 네임노드를 포맷하지 않으면 에러가 발생하기 때문에 초기 실행 때 또는 설정 내용의 변경이 있을 때는 반드시 네임노드를 포맷하셔야 합니다.



8) 작동 상태 확인

구동이 되었다면, jps 명령어를 통해 작동상태를 확인할 수 있습니다. jps라고 출석을 부르면 각 노드는 작동이 잘 되고 있는지 응답을 하게 됩니다. 네임 노드와 하위노드 모두 jps 명령어를 입력하여 정상 작동하는지 확인하시면 됩니다.

아래 그림에서는 master가 네임노드이므로 NameNode와 JobTracker가 보이고, 하위 노드인 node1,2는 DataNode와 TaskTracker가 보이는 것을 확인하실 수 있습니다.

만약 Jps 라고만 뜬다면 네임노드의 방화벽을 해제해보시길 바랍니다. 제 경우, 방화벽의 포트 설정으로 인해 네임 노드와 하위 노드들간 통신이 되지 않아 이러한 문제가 있었습니다. 간단히 방화벽 해제를 통해 해결하긴 했지만... 이후 방화벽 설정은 아직 손대지 않았습니다.


드디어 기나긴 하둡 설치 일기가 끝이 났습니다.
기다려주신 분들께 감사드리면서.. 짧게 끝내도록 하겠습니다.


끝으로...
기타 에러에 관한 주의 사항들을 정리하여 포스팅하도록 하겠습니다.

[하둡 설치] 하둡 설치 일기 vol.2 (Install Hadoop) CentOS 환경에 하둡 설치 하기 by Kertz

드디어 하둡을 설치할 준비가 완료 되었다.


참고로 하둡 설치를 위한 준비 단계가 궁금하신 분께서는 아래의 링크를 클릭해주세요.


여분의 컴퓨터와 하드디스크가 준비되었다면(혹은 가상머신 셋팅이 완벽하게 끝났다면) 하둡을 설치할 차례이다.


그 전에!! (자꾸 질질 끄는 것 같아서 좀 그렇긴 하지만..) 


CentOS를 깔아야 하지 않겠는가... 

하지만 빠른 진행과 우분투 또는 다른 리눅스 체제 사용자를 위해 이 부분은 다루지 않기로 한다.
대신 다른 블로거 분들께서 열심히 작성해주신 CentOS 6.3 설치 방법과 Basic Minimal 서버에서의 GUI 환경 설치 등을 다룬 포스트의 링크를 걸도록 하겠다.



1. Cent OS 다운로드 및 설치

1) CentOS 6.3 다운로드 방법 : http://blog.naver.com/kusgo91?Redirect=Log&logNo=150148835023
2) CentOS 6.3 설치 방법 : http://g00dmoney.blog.me/20166393226
3) CentOS 네트워크 설정 방법 : http://www.gooday.kr/bbs/board.php?bo_table=note&wr_id=163


참고로 본인이 하둡 설치를 위해 구축한 환경은
- Cent OS 6.3
- Basic Server 버전 설치
- GUI 환경으로 설치함 (리눅스 터미널에 익숙하시지 않은 분들은 Basic Server버전 대신 Desktop 버전으로 설치하셔도 됩니다.)
- 클러스터가 될 4대에 모두 설치하였으며 네트워크 설정을 함.

이렇게 CentOS가 뜨면서 인터넷 연결까지 끝마쳤다면, 준비 완료.





2. Java JDK 다운로드 및 설치 -- 모든 컴퓨터에 설치

자바 JDK 설치는 하둡 설치를 위한 필수 단계이다. 이를 설치한 뒤 환경 변수 설정 등을 마쳐주고 하둡 설치를 진행해야 한다.



1) Java JDK 다운로드

a. http://www.oracle.com 으로 접속한다.

b. Downloads의 Java for Developers를 클릭.
c. Java SE를 클릭.

d. 이제 사용자 환경에 맞는 파일을 다운로드 하면 된다. CentOS 사용자는 .rpm 파일을, 우분투 이용자라면 압축 파일을 받으면 된다.



2) Java JDK 설치

다운로드가 완료된 .rpm 파일을 클릭하여 설치해주면 끝!
혹은 터미널 상이라면 아래와 같이 입력하면 된다.

# rpm -Uvh jdk-<버전명>-linux-i586.rpm



3) Java JDK 설치 확인

정상적으로 설치되었다면 /usr/java/jdk_버전 경로로 설치되어 있을 것이다. (사용 환경에 따라 다를 수도 있습니다.)
이제 본격적으로 하둡을 설치해보자.





3. 하둡(Hadoop) 설치 -- 모든 컴퓨터에 설치 및 설정 적용



1) 하둡(Hadoop) 다운로드

가장 힘든 단계라고 할 수 있겠다. 
무슨 이유에선지 다운로드가 잘 되지 않았다. 그래서 윈도우에서 어찌어찌 다운로드가 되었길래 개인적으로 갖고 있는 FTP에 올려서 클러스터용 컴퓨터로 다운로드 하였다.
어찌됐건 클러스터 모두에게 다운로드 받기 보다는 한 대에 받아서 USB 등으로 복사하길 권장한다. 다운로드가 너무 느리기 때문이다 ㅠㅠ


a. http://hadoop.apache.org로 접속

b. Download Hadoop을 클릭!
c. 'Download Hadoop' 하단의 releases를 클릭
d. 'Download' 하단의 Download a release now!를 클릭
e. 이제 사용자에게 추천하는 미러사이트의 링크가 나타나고 이를 클릭하면 하둡 다운로드가 이루어지게 된다.
(혹시 다운로드가 안되시는 분께서는 댓글로 알려주시면 제가 가진 버전(1.1.1)의 링크 주소를 알려드리겠습니다.)



2) 하둡(Hadoop) 설치 --- 모든 컴퓨터에 설정

a. 다운로드 된 폴더로 이동하여 아래의 명령어를 타이핑한다.(혹은 압축을 해제한다.)

# tar xvfz hadoop-1.1.1.tar.gz

※참고로 root 계정사용자 용량이 작게 할당이 된다. 따라서 하둡을 사용할 실제 계정의 홈디렉토리에 압축을 해제하는 것이 좋다. 예를 들어 하둡 계정명이 huser이라면 /home/huser/hadoop.
따라서 설치 과정을 root 권한으로 진행하기 보다는 하둡 전용 계정을 sudoer로 등록하여 하둡 전용 계정으로 설치 단계를 진행하는 것이 낫다.



3) /etc/profile 설정 --- 모든 컴퓨터에 설정

하둡이 있는 경로와 Java가 설치된 경로를 /etc/profile에 등록해야 한다.

# sudo vi /etc/profile

위의 명령어를 타이핑하면 해당 문서의 내용을 보거나 편집할 수 있다. 편집하기 위해서는 Insert 키를, 완료 후 저장을 위해서는 ESC키를 누른 후 :wq 라고 타이핑한다.


다시 본론으로 돌아와서, 설정해야 할 내용은 아래와 같다.
#JAVA 7 JDK
JAVA_HOME=/usr/java/ jdk1.7.0_11                   //자바 버전에 맞게 수정하면 됨.
HADOOP_HOME=/home/하둡계정명/하둡폴더명
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/-:$JAVA_HOME/jre/lib/-:$JAVA_HOME/jre/lib/ext/-:.
HADOOP_HOME_WARN_SUPPRESS=TRUE          // $HADOOP_HOME is deprecated 라는 경고문을 뜨지 않도록 하는 코드
export JAVA_HOME HADOOP_HOME PATH CLASSPATH HADOOP_HOME_WARN_SUPPRESS    //해당 경로명을 추가하면 됨.

위와 같이 설정했다면 /etc/profile 에 대한 설정은 끝난다.



4) /etc/hosts 설정  --- 모든 컴퓨터에 설정

하둡 클러스터는 네임노드와 하위 노드들로 나뉘게 된다. 네임노드는 쉽게 말해서 작업을 관장하는 작업반장 정도가 되겠고, 나머지 하위 노드들은 작업 지시에 따르는 역할이 되겠다. 
이번 설정은 바로 네임노드와 하위노드들을 구분해주기 위한 네트워크명을 설정하는 단계이다. IP방식으로 해도 관계가 없으나 클러스터 내의 알기 쉬운 이름으로 지정하여 설정하길 권장한다.

# sudo vi /etc/hosts

나는 아래와 같이 host를 설정했다.
xxx.xxx.xxx.1 master
xxx.xxx.xxx.2 node1
xxx.xxx.xxx.3 node2
xxx.xxx.xxx.4 node3
※저장은 마찬가지로 ESC키를 누른 후 :wq를 타이핑하면 된다.

속도가 조금 더디지만 CPU가 많은 서버 컴퓨터를 네임노드(master)로 두었으며, 가장 최근에 나온 컴퓨터 3대를 하위 노드로 두었다. 그리고 쉽게 기억하고 구분하기 위해 이름을 단순하게 붙여주었다.



5) 하둡(Hadoop) 파일 시스템을 위한 폴더 생성 및 권한 설정 --- 모든 컴퓨터에 설정

하둡 자체를 root 권한으로 설치하고 또 사용하는 것이 아니기 때문에 미리 하둡 프로그램이 사용할 폴더를 생성해주고 권한을 바꿔주어야 한다. 그렇지 않은 경우 하둡 실행 때 에러가 발생했고, 한참 로그 파일을 뒤진 끝에 특정 폴더에 접근할 권한이 없다는 메시지를 찾을 수 있었다.

'퍼미션'이라는 단어를 질리도록 보기 전에 미리 만들어주도록 하자.


# mkdir /home/유저명/fs
# mkdir /home/유저명/fs/data
mkdir /home/유저명/fs/name
mkdir /home/유저명/fs/mapreduce
mkdir /home/유저명/fs/mapreduce/local
mkdir /home/유저명/fs/mapreduce/system
chmod -R 755 /home/유저명/fs



6) SSH 설정 - 네임노드에서 생성하여 하위 노드 모두에게 복제.

네임노드에서 RSA키를 생성하여 하위 노드들에게 복제하는 과정이다. 이 과정을 통해 네임노드에서 하위노드로 SSH 명령을 했을 때 암호 입력이 필요없이 해당 하위노드로 접근이 가능하도록 하는 것이다. 네임노드에서 하위노드로만 복제하면 되며, 하위 노드에서 네임노드로 또는 하위 노드끼리 복제할 필요는 없다.


a. RSA키를 생성한다. -- 네임노드 PC에서 생성한다.
[kertz@master ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.Enter file in which to save the key (/kertz/.ssh/id_rsa):        // 입력하지 않고 Enter
Enter passphrase (empty for no passphrase):              // 입력하지 않고 Enter
Enter same passphrase again:                           // 입력하지 않고 Enter
Your identification has been saved in /kertz/.ssh/id_rsa.  
Your public key has been saved in (/kertz/.ssh/id_rsa.pub. 
[kertz@master ~]# cat ~/.ssh/id_rsa.pub       // 생성한 키를 확인함.


b. RSA키를 복제  -- 네임노드 PC에서 하위 노드 PC들에게 복제
[kertz@master ~]# sudo scp ~/.ssh/id_rsa.pub kertz@node1:~/master_key  //공개 키를 node1의 master_key 폴더로 복제
[kertz@master ~]# ssh node1          // node1로 접속함.
[kertz@node1 ~]# mkdir ~/.ssh       // 여기서부터는 ssh 폴더를 생성하고 공인된 키로 네임노드의 키를 추가하는 과정임
[kertz@node1 ~]# chmod 700 ~/.ssh
[kertz@node1 ~]# mv ~/master_key ~/.ssh/authoried_keys
[kertz@node1 ~]# chmod 600  ~/.ssh/authoried_keys
※위와 같이 node2, node3에게도 반복해서 해주면 된다.


c. RSA키 정상 복제 여부 확인 - 네임노드에서 확인하면 됨.

정상적으로 복제되었는지 여부는 네임노드에서 ssh 명령어로 하위 노드에 접속해보는 것으로 확인이 가능하다. 정상 복제 되었다면 하위 노드 접속 시 암호를 묻지 않을 것이다.
[kertz@master ~]# ssh node1Last login: Thu Feb 6 16:52:02 2013 from master[kertz@node1 ~]# 


※여기서 다시 한 번 강조하자면...
하둡을 사용할 계정(root를 제외한)을 이용해서 RSA키를 생성하고 복제하는 것이 좋다. 
root는 한정적인 용량을 갖기 때문에 일부 경우를 제외하고는 하둡을 이용할 계정을 통해서 모든 과정을 진행해야 한다. 따라서 사전에 sudo 권한을 하둡 전용 계정에 부여하는 것이 좋으며, sudo 권한 부여에 대한 내용은 sudoer에 관한 구글 검색을 통해 참조하면 된다.

여기까지의 과정을 통해 하둡 설치는 끝났다. 하지만 하둡을 사용하기 위한 설정 단계가 아직 남아있다. 포스팅이 너무 길어져 힘들기 때문에 오늘 포스팅은 여기서 마치겠지만, 다음 포스팅을 위해 미리 언급하자면,
하둡의 수행 모드는 다음과 같이 3가지 단계로 나뉜다.

- Stand-alone 모드 (독립실행 모드)
- Pseudo-distributed 모드 (가상분산 모드)
- Fully-distributed 모드 (완전분산 모드)


독립실행 모드는 하둡의 기본 모드로 로컬 머신 상에서만 실행되는 모드이다. 혼자만 뚝딱뚝딱 하기 때문에 파일 공유도, 작업 분담도 필요없다. 따라서 HDFS(Hadoop Distributed File System)를 사용하지 않으며, 다른 데몬들을 실행시키지 않는다. 하둡의 본래 의미를 살리지 않는 기능 같지만, MapReduce 프로그램을 개발하고 디버깅하는 목적에서는 충분하기 때문에 이러한 용도로 사용한다. 물론 아직 나와는 거리가 먼 이야기 같다....

가상분산 모드한 대의 컴퓨터 상에서 가상으로 클러스터를 구축하는 모드이다. 즉 한 대 내에서 클러스터가 구성되며, 데몬들도 한 대 내에서 실행된다. 독립실행 모드에서 개발 또는 디버깅한 코드가 HDFS의 입출력이나 데몬들과의 연동 상 문제가 없는지 확인하는 목적으로 사용된다. 이 또한 아직 나와는 거리가 멀다....

완전분산 모드는 현재 구축하고자 하는 모드로 각 노드들이 각각의 컴퓨터로 이루어져 있는 클러스터를 말한다. 즉, 실제로 분산처리를 할 수 있는 형태이다.

어느 정도 눈치챘겠지만, 각각의 모드에 따라서 하둡의 설정법이 모두 다르다. 하지만 가장 힘든건 역시 실제로 클러스터를 구축하는 완전분산 모드이다. 이미 우리는 4대의 컴퓨터를 클러스터 입대를 위한 장정들로 마련해두었고 기본 교육(?)까지 마쳤으니 다음 포스팅에서는 완전 분산 모드의 설정 방법에 대해 다루고자 한다.



아 힘들다......

[RHadoop] RHadoop(R하둡)을 이용한 간단한 계산 소요시간 테스트 by Kertz

하둡 설치 과정에서 잠깐 벗어나서..

하둡을 통해 R의 분석 기능을 이용할 수 있는 RevolutionAnalytics의 (이름이 멋지다.....) RHadoop을 이용한 예제를 다뤄볼까 한다.
사실 이와 유사한 기능을 하는 패키지들이 많은 것으로 안다. RHipe나 국내 NexR의 RHive 등등...
각 패키지 별로 성능 차이가 존재할 수 있지만, 구글님의 영광을 누릴 수 있는 자료가 제법 많을 듯한 RHadoop을 설치하였다.

먼저 이용된 코드는 RHadoop튜토리얼 코드 중 일부이다. 
영어로 되어있는데 일반적인 계산 방식과 맵리듀스를 이용한 계산 방식의 코드 차이만 있을 뿐 보여주는 결과는 같다.

그래서 한 가지 매우 간단한 실험을 해보았고 그 결과를 여기 기록한다.

■ 실험 개요
1) 1부터 9,000,000까지의 숫자를 생성.
2) 각 숫자 모두를 제곱하는 연산을 수행
3) 계산에 소요된 시간을 측정
4) 실험에 사용한 컴퓨터의 사양은 CentOS 6.3이 설치된 Ram 2G의 구형 서버로 인텔 Xeon 5130 (2.00Ghz) Cpu가 4개 달린 모델.
5) 계산은 동일한 환경과 조건에서 시간차를 두고 수행하였음.

■ 실험 결과

1) R의 sapply 함수를 이용한 연산 결과

R의 기본 함수인 proc.time()을 이용하여 시간을 계산하였다. a.time 변수에 할당한 후 다시 proc.time() - a.time 이라고 쓰면 할당 이후 CPU가 사용된 시간을 기록한다. 여기서 프로그램을 계산하기 위해 사용된 CPU시간은 사용자+시스템 이며 소요된 시간은 최초 할당 이후 흘러간 시간(일반적인 의미의)을 말한다.

위 결과에서는 사용자 시간이 94.342초, 시스템 시간이 0.421초이다. 즉 일반적인 R을 통한 연산 시간은 94.763초가 소요되었다.


2) RHadoop을 이용하여 계산한 결과 (MapReduce)

일반적인 방식과 다른 점은 1부터 9백만까지의 숫자를 to.dfs를 통해 변수해 할당해준다는 점, 그리고 mapreduce 함수를 이용하여 sapply연산을 해준다는 점이 다르다.
계산에 소요된 시간은 78.489초로 나타났음을 알 수 있다. 무려(?) 16초 가량 단축되었음을 확인할 수 있다.


■ 소스코드

1) R
a.time <- proc.time()
small.ints2=1:9000000
result.normal = sapply(small.ints2, function(x) x^2)
proc.time() - a.time


2) RHadoop
b.time <- proc.time()
small.ints= to.dfs(1:9000000)
result = mapreduce(input = small.ints, map = function(k,v) cbind(v,v^2))
proc.time() - b.time


[하둡 설치] 하둡 설치 일기 vol.1 (Install Hadoop) by Kertz

자세한 설명에 앞서서 간단히 주절거려볼까 한다.

하둡(Hadoop)이라는 단어를 처음 접한 것은 작년 4월 쯤이었다. 
뉴스를 통해 분산 처리의 필수 요소로 자리 잡았다는 소식을 접했었다. 하지만 통계학을 전공하고 있는 나에게는 그렇게 매력적으로 다가오지 않았다. 사실 그 때 난 분산 처리와 통계는 전혀 별개라고 생각하고 있었고, 철저하게 전산학의 한 분야에서 하둡을 바라보고 있었기 때문에...

그러다 빅데이터가 이슈로 떠오르고 그 이슈 속에서 R과 하둡의 조합이 눈에 띄었다. R은 그 편리함과 화려한 그래프 기능들을 알고 있었기에 수긍했지만 대체..

"하둡이 대체 뭐길래???"

..라는 생각이 들었다.

그리고 궁금증을 참을수 없어서 하둡 클러스터 구축을 실행에 옮기기로 결정한다. 다음 내용들은 그 동안 하둡 클러스터를 구축했던 내용들을 정리한 것이다. (4대의 컴퓨터를 통해 클러스터를 구축했다. 클러스터라고 하기엔 좀 쪽팔리지만.....)
쓸데없는 이야기들을 섞을 예정이라 내용이 나름 방대해질 듯 하니 단계별로 나눠서 포스팅할 계획이다.


(맵과 리듀스에 관한 기타 사항들은 여기서 다루기엔 무리가 있다. 사실 그 부분에 대해서 확실한 지식을 갖춘 상태가 아니기 때문에. 따라서 여기서는 다루지 않기로 한다.)



Day 1. 하둡 설치 준비


1) 컴퓨터가 많이 필요하다.

"무슨 당연한 소리를 하느냐?" 라고 반문할 수도 있겠다. 하지만 나는 학생이다......
클러스터 구축을 위해서는 여러 대의 컴퓨터가 필요하다. 중고로 사도 돈이 꽤나 들 것이다. 
그래서 내가 학생인 점을 잘 활용했다. 학과의 양해를 구하고 대학원 전산실의 컴퓨터 중 성능이 괜찮은 3대를 하둡 클러스터 구축에 사용하기로 했다.
사양은 2Ghz 이상 CPU에 RAM 2G 정도의 컴퓨터이다. 사실 사양 체크는 제대로 해보지 않았다.
그리고 다음 난관과 부딪히게 된다.


2) 리눅스 운영체제가 필요하다 = 여분의 하드디스크가 필요하다.

하둡을 구축하기 위해선 리눅스 운영체제가 필요했다. 하지만 가용할 수 있는 컴퓨터들은 죄다 윈도우 운영체제를 사용하는 중이었다.

따라서 나는 다음 세 가지 방법 중 하나를 고민했다.

방법1. 윈도우 운영체제 상에 가상 머신을 설치하고, 가상 머신 상에 리눅스를 설치한다.
방법2. 남는 하드디스크 공간을 파티션 하여 리눅스를 설치한다.
방법3. 여분의 하드디스크를 장착하여 리눅스를 설치한다.

하지만 이들 방법들의 단점은 다음과 같다.

방법 1의 단점. 
가상머신이므로 본래의 성능을 이끌어 내기 힘들며, 네트워크 잡아주는게 짜증난다.
방법 2의 단점. 
C와 D드라이브로 나눴더라도 결국 윈도우가 몽땅 쓰고 있기 때문에 리눅스 설치가 되지 않는다. 파티션 매직이나 파티션 위자드 등의 사후 파티션 관리 프로그램을 쓰면 되지 않느냐? 라고 생각할 수도 있지만, 다소 위험 부담이 따른다. (내 컴퓨터가 아니므로..) 그리고 가장 큰 위험성은 하둡에서는 파일 입출력이 잦게 일어나므로 하드디스크가 뻑(=전문용어)이 날 수도 있다는 것이다.
방법 3의 단점.
하드디스크를 구해야한다. 그리고 구하면 본체를 뜯고 하드를 설치하여 다시 조립하고, 바이오스 상에 하드디스크가 잘 잡히는지 확인한 후 부팅 순서를 변경ㅎ.................. 그냥 귀찮다는 것이다. 대신 가장 안정적인 조합이었다. 따라서 귀찮더라도 방법 3을 선택했다.


3) 하드디스크를 구하자.

컴퓨터를 구하고 나니 하드디스크가 문제였다. 
"하드디스크 요즘 싸잖아?" 라는 질문이 또 나올 수도 있겠다. 

"나는 학생이다."

용량 상관없이 하드디스크만 여러개 구하면 될테니 IMF 시절 유행했던 아나바다 운동을 떠올려보았다. 그리고 학생의 이점을 되살려 폐기 직전의 컴퓨터, 전산 동아리 등을 떠돌며 결국 320GB 용량의 하드디스크 3개를 공짜로 구할 수 있었다. 
뿌듯했다.... 하드 구걸을 하러 다닐 줄이야.....


4) 준비 완료.

컴퓨터와 하드디스크를 구했다. 
왠지 "컴퓨터 배우기 1단계 : 콘센트에 플러그를 꽂고 컴퓨터 전원을 누르세요^^" 느낌이 난다.

그런데 중요한 걸 어쩌겠는가...... 
하둡은 설치할 때 정말 다양한 에러를 보여준다. 대부분은 원인을 알 수 있지만, 원인이 긴가민가한 에러 또한 존재한다.
따라서 준비 과정에서 완벽한 조건을 만들 수록 알 수 없는 하드웨어 문제로 인한 에러를 줄일 수 있다.
만약 VMWare로 구축을 했는데 에러가 난다면 결국 VMWare 탓인지 돌아볼 수 밖에 없다. 나는 이런 부분들을 가급적 줄이려고 노력했다. 

이제 리눅스를 설치할 차례이다.
다양한 버전의 리눅스가 존재하지만, 나는 우분투와 CentOS 중 CentOS를 선택했다. (특별히 이유는 없다....)
따라서 이후의 설치 과정은 모두 CentOS 기준으로 설명하도록 한다.

다음 포스팅에서...........

※우분투와 센트OS의 차이는 설정 파일의 경로와 패키지 다운로드 및 설치 등에 있어서 명령어 차이가 존재할 뿐, 큰 차이는 나지 않습니다. 혹시 하둡 에러가 나더라도 운영체제 탓은 안하셔도 됩니다......


1 2


웹폰트 (나눔글꼴 8종)