최초 작성일 : 2013/05/16 13:37


미리 말씀드리지만 이 글은 설치 안내가 아니라 설치 중에 실수할 수 있을만한 부분에 대해

적은 글입니다. 설치 전반에 대해 참고한 글은 본문 중에 링크를 하였으니 참고하세요...^^


=========================================================


원래는 교재와 함께 천천히 실습을 진행할 계획이었는데…

지난 한 달 간 되지도 않는 영어실력으로 문서 번역한다고 삽질을 해놨더니 조급증이 생겨서

우선 하둡부터 설치를 하고 봤다.


애초 예정대로 대상 머신들은 모두 애플의 맥 기종으로 맥북 프로1대 맥미니 서버 1대 맥미니 1대이며

이 중 맥북프로와 맥미니 서버는 같은 네트워크 대역에 있으나 맥미니 1대는 다른 네트워크 대역에 있다.

다음 글에 언급하겠지만 역시나…맥미니는 클러스터로 묶일 수가 없다…ㅠ.ㅠ

(이거 해볼라구 따로 구입한 놈인데…제 역할을 못하게 됐다…ㅠ.ㅠ)


우선 설치는 무진장 쉽다.

개나 소나 할 수 있다.

개나 소가 컴퓨터를 이용할 수 있다는 가정하에…-.-


암튼 다운로드 받고 압축 풀고 java home 잡아주고 설정 xml파일 3개정도 만져주면 끝이다.

우선 도움을 받은 사이트를 링크한다.

많지도 않다.

요기만 잘 보고 진행하면 만사 땡이다.


http://blrunner.com/29

http://develop.sunshiny.co.kr/868

http://develop.sunshiny.co.kr/893


하지만…

중요한 함정이 도사리고 있었다.

앞서 구글의 논문을 번역하는 가운데 구글 애들이 매우 자주 강조한 내용이 있었다.

'MapReduce 라이브러리는 병렬이나 분산 시스템에 대한 경험이 없는 개발자들도

쉽게 접근할 수 있다'는 것이다.


그러나 이 쉽게 접근할 수 있다는 의미는 좀 더 구체적으로 말하면

'(얼마간의 혹은 꽤 오랜 시간 삽질을 거치게 되면) 쉽게 접근할 수 있다'라는 것이다.


대체로 분산 시스템이라는 것이 물리적으로 다른 공간에 위치한 머신들 사이에 동일한 프로세스를

마치 동일하 머신상에서 수행하는 것 처럼 처리할 수 있다는 의미일 것이다.

하지만 이러한 분산 시스템을 위해 먼저 알아 두어야 할 것이 바로 '물리적으로 분리된 공간'이라는 점이다.

이 것은 시스템의 환경을 설정할 때 뜻하지 않은 실수를 하게 만든다.

바로 호스트명 또는 서버 주소를 설정하는 부분에서 발생을 하게 되는 것이다.


오늘의 실수를 통해 이야기 해보자.


우선 Hadoop은 Standalone모드와 Pseudo-distributed모드 그리고 Fully-distributed모드로

실행할 수 있다. 각각의 모드는 특별이 데몬을 띄울 때 옵션이 있거나 한 것이 아니라 위 링크에

설명되어있는 설정파일을 어떻게 설정을 하느냐에 따라 달라진다.


Standalone : 모든 설정파일을 초기 상태로 비워둔채로 하둡을 실행한다. map/reduce 프로그램을

                       신속하게 개발/디버깅하기 위해 사용된다.

Pseudo-distributed : 모든 설정 파일에 각 노드의 주소를 모두 localhost로 입력한다. 단일한

                       머신 내에서 가상으로 분산 환경을 만들 때 사용된다.

Fully-distributed : 모든 설정 파일에서 각 노드의 주소는 실제 부여된 IP나 도메인 또는 hosts 파일에

                       등록된 이름을 사용해야 하며 각각의 머신들은 실제로 분산되어있어야 한다.


내가 처음 참조한 설치 방법에 대한 블로그는 http://blrunner.com/29였다.

그런데 이 블로거는 Pseudo-distributed로 실행할 것을 전제로 하여 설명을 하고 있다.

그런데 나는 Fully-distributed를 목표로 진행을 하고 있었다. (그래서 피같은 돈 들여 맥미니까지 추가

구매를 하였다. 근데 그놈은 현재 놀고있다…ㅠ.ㅠ)


아무 생각 없이 따라하다보니 하둡 설정이 모두 Pseudo-distributed에 맞춰진 것이다.

여기서 첫 번째 실수가 있었다.


다음으로는 원래 분산 시스템이란 것이 그런가 모르겠는데

각 머신들간의 동기화를 위해서인지 하둡 자체가 동일한 경로에 설치가 되어야한다는 것을

나중에 알았다.(혹은 위치가 달라도 설정만 별도로 해주면 되는지도 모르겠다. 아직 모르는게

더 많아서…^^;;;)


즉 A 머신의 하둡 설치 경로가 /home/mazdah/hadoop-1.0.4였다면

B 머신의 하둡 설치 경로도 /home/mazdah/hadoop-1.0.4여야 한다는 것이다.


꼭 이렇게 하지 않아도 될지 모르지만 개인적인 생각에 시스템을 아예 처음 설치하는 것이라면

디스크 볼륨 등을 통일해서 이렇게 같은 경로에 설치하는 것이 관리적인 차원에서 좋을 것 같다.


이미 다른 시스템들이  잔뜩 설치된 곳에서는 디스크 볼륨명을 함부로 바꾸기도 쉽지 않고

여러모로 헷갈릴 듯싶다.


아래는 머신간에 하둡 설치 위치가 달랐을 때와 설치 위치가 같았을 때 start-all.sh를 실행한

콘솔 메시지 내용이다.


xxx와 yyy 머신은 데이터 노드이고 localhost는 네임노드이다.

현재 /Volumes/Data2/hadoop-1.0.4로 표시되는 것은 처음 설치한 네임노드에서의 하둡 설치

위치(HADOOP_HOME)이다.


이 중 xxx 시스템의 설치 위치를 네임노드와 일치시켰더니 이후 실행 시 xxx 머신에서는

No such file or directory 메시지가 나오지 않게 되었다.


하지만 yyy노드이 경우 이미 다른 웹 시스템 및 SVN과 CI용으로 젠킨스 등이 설치된 상태라 함부로

디스크 볼륨명을 수정하기가 어려웠다. 그래서 3대의 시스템 모두 설치 위치를 /hadoop-1.0.4로

옮겨버렸다. 참으로 심플한 결정이었다…-.-


네임노드와 데이터 노드의 하둡 설치 위치가 달랐을 때


Mazdah-ui-MacBook-Pro:bin mazdah$ ./start-all.sh

starting namenode, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-namenode-Mazdah-ui-MacBook-Pro.local.out

xxx.xxxxx.xxx: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

localhost: starting secondarynamenode, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-secondarynamenode-Mazdah-ui-MacBook-Pro.local.out

starting jobtracker, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-jobtracker-Mazdah-ui-MacBook-Pro.local.out

xxx.xxxxx.xxx: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory


Mazdah-ui-MacBook-Pro:bin mazdah$ ./stop-all.sh

stopping jobtracker

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

xxx.xxxx.xxx: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

stopping namenode

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

xxx.xxxx.xxx bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

localhost: stopping secondarynamenode


네임노드와 데이터 노드의 하둡 설치 위치가 같아진 후


Mazdah-ui-MacBook-Pro:bin mazdah$ ./start-all.sh

starting namenode, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-namenode-Mazdah-ui-MacBook-Pro.local.out

xxx.xxxx.xxx: starting datanode, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-datanode-localhost.out

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

localhost: starting secondarynamenode, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-secondarynamenode-Mazdah-ui-MacBook-Pro.local.out

starting jobtracker, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-jobtracker-Mazdah-ui-MacBook-Pro.local.out

xxx.xxxx.xxx: starting tasktracker, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-tasktracker-localhost.out

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory


첫 날부터 너무 긴 내용을 적으면 이후 진행에 애로 사항이 꽃피는데…

암튼 처음 설치다보니 삽질이 적지 않았다. 하지만 반나절 정도 삽질하고 네임노드와 데이터 노드가 정상적으로

연결된 것을 볼 수 있었으니 그리 나쁘진 않은 성적인 것 같다.

구글 아자씨들 말대로 쉽긴 쉬운가보다.

(컴퓨터를 할 줄 아는) 개나 소나 할 수 있으니…^^;;;


암튼 오늘인 여기까지

다음에는 아직 못돌려본 샘플 프로그램을 좀 돌려보고 부가적으로다가

혼자 놀게된 맥미니가 왜 혼자 놀게 되었는지(당근 네트워크 대역이 다르니…-.-)

또 거금을 들여 구입한 맥미니를 그냥 놀게 둘 수는 없으니 어떻게 활용할지에 대해 다뤄보자.

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^