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


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


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



덧글

  • Aka 2015/04/14 10:26 # 삭제 답글

    안녕하세요! 올려주신 글 덕분에 하둡을 설치하고 있어요~ 저는 마지막으로 RHadoop을 사용하고 싶은데 Rhadoop 설치에서 rmr2가 깔리지 않네요.. 혹시 어떻게 설치 하셨는지 알 수 있을까요~? 자세한 내용은 메일로 받고 싶은데 괜찮을까요~?
    alwalj@naver.com
    꼭 좀 부탁드립니다!
댓글 입력 영역


웹폰트 (나눔글꼴 8종)