Experiences/Hadoop

2-2. 하둡의 실행

프로그래머 2012. 8. 31. 15:45

하둡의 실행에 앞서 자세히 다루기로 한 하둡 실행 모드에 대해서 알아보자.



1. Standalone(독립실행) 모드



Standalone 모드는 하둡의 기본 모드이다. 하둡은 사용자의 하드웨어 대한 정보를 가지고 있지 않다.


그래서 하둡은 가장 최소한의 환경 설정을 하게 되는데, 기본 모드에서 세 개의 XML 파일(conf/core-site.xml, conf/mapred-site.xml, conf/hdfs-site.xml)은 아무것도 작성되지 않은 상태로 주어진다.



아무런 환경 설정이 기록되어 있지 않으면, 하둡은 로컬 머신에서만 실행된다.

다른 노드들과 통신할 필요가 없기 때문에 standalone 모드에서는 HDFS를 사용하지 않고 다른 데몬들도 실행시키지 않는다. 


결론적으로 Standalone 모드의 목적은 독립적으로 MapReduce 프로그램의 로직을 개발하고 디버깅하는 데 있다.


2. Pseudo-distributed(가상분산) 모드



Pseudo-distributed 모드는 클러스터가 한 대로 구성되어 있고, 모든 데몬 역시 이 한대의 컴퓨터에서 실행된다. 


이 모드는 코드 디버깅 시 standalone 모드에서의 기능을 보완할 수 있는데, 메모리 사용량, HDFS 입출력 관련 문제, 다른 데몬과의 상호작용에서 발생하는 일검사할 수 있다.


아래 그림은 이 모드로 단일 서버를 설정하는 간단한 XML 파일을 보여준다.


core-site.xml



mapred-site.xml



hdfs-site.xml



core-site.xml과 mapred-site.xml은 각각 NameNodeJobTracker호스트명과 포트를 설정한다.

hdfs-site.xml은 HDFS에 대해 복사할 기본 항목을 결정한다. 


hdfs-site.xml의 부가설명을 하자면 이전에 1,2,3 이라고 나누어진 블록이 여러군데 DataNode에 저장되어진다는 내용을 배운 것을 기억할 수 있을 것이다. 


<value>1</value> 안에 있는 숫자는 몇개의 사본을 갖고 있을 건지에 대해서 지정하는 것이다.


또한 conf/masters 파일Secondary NameNode 위치를 지정해야 하고, conf/slaves 파일에는 slave 노드의 위치를 지정해야 한다.


데몬들은 같은 머신 안에서 실행되지만, 마치 분산 환경에 있는 것처럼(가상) SSH 프로토콜을 이용해 서로 통신한다. SSH 채널 설정에 관한 자세한 내용은 이 설명을 마친 후에 자세한 설명을 하도록 하겠다.



만약 정상 동작이 안되면 아래 두 라인을 실행한다.



근데 위에 보면 자꾸 패스워드를 묻는다... 이유를 알아보았더니.. 서버이름의 문제였다.

authorized_keys 내용을 보면 hadoop-user@master 계정에 대한 인증키를 가지고 있다는 것을 확인할 수 있다.



하둡을 실행하기 위한 준비가 거의 다 되었다. 이제 HDFS를 포멧해보자.



이제 start-all.sh 스크립트를 사용해 데몬을 실행해보자. 자바의 jps 명령어를 사용하면, 모든 데몬이 성공적으로 실행되었는지 확인할 수 있다.



마지막으로 더 이상 하둡을 사용하지 않는다면 다음 명령어를 사용해 하둡 데몬을 종료할 수 있다.



standalone(독립실행)과 pseudo-distributed(가상분산) 모드모두 개발이나 디버깅 목적으로 사용된다.

실제 하둡 클러스터는 이제 곧 배울 fully distributed(완전분산) 모드에서 실행된다.


그렇다면 내용에는 없지만, 가상 분산 모드로 Standalone에서 실행한 WordCount를 다시 한 번 실행해보자!


# bin/hadoop jar hadoop-examples-1.0.3.jar wordcount input output


매번 이야기하지만, 참 쉽게 되는일이 없다.. 이상한 에러가 뜰 것이다.. 

에러에 관련된 부분은 따로 글을 게재할 예정이기 때문에 이 ______ 를 클릭해서 참고하자.


에러를 해결하고 왔다면 아마 기쁜 마음으로 아래와 같은 화면을 확인할 수 있을 것이다.



출력 결과를 확인하려면 그냥 cat을 사용할 수 없다. 뭐든지 dfs 안에서 명령어를 해야한다.



이렇게 확인할 수 있다! 정말 여기까지 따라오느라고 수고많았다! 혹시라도 글을 쓰다가 놓친 부분이 있을 수 있다.

잘못된 것이 있다면 많은 질타 부탁드린다. 다음에는 실질적으로 할 수 있는 완전 분산 모드에 대해서 공부해보자!!