으아 Hadoop, Hadoop이다. 


Big Data 한답시고 이것 저것 정말 시간을 많이 잡아먹고 또 잡아먹는다. 지금까지 내가 한 삽질을 보면 이루말할 것이 없네. 참 그렇다고 새로 막 공부하는 것이라 누구한테 쉽게 물어볼 사람도 없고.. 아무튼 Hadoop도 조금씩 조금씩 공부했었는데 공부한 내용을 조금만 정리해보자.


우선, Hadoop이 무엇인지 소개부터 하련다. Hadoop은 MapReduce 작업을 하기 위한 Open Source Framework이다. Framework는 무엇이냐? 어떤 작업을 하기 위한 프레임이다. 즉, Hadoop으로 우리는 MapReduce를 할 수 있다. (MapReduce가 무엇인지는 http://operatingsystems.tistory.com/entry/MongoDB-MongoDB-Aggregation 이 포스팅에 설명해놨다. MongoDB에서의 MapReduce를 설명해 놓은 링크인데 개념은 같으니 참고하길 바란다.) 우리는 특정 언어를 이용해서 MapReduce 프로그램을 작성할 것이다.(예를 들어, Java) 그 프로그램을 돌릴 때 Hadoop을 사용하여 돌릴 것이다. Java 등의 언어로 쓰여진 MapReduce 프로그램을 쉽게 돌릴 수 있게 해주는 틀, Framework가 바로 Hadoop이다. 


자, 그러면 왜 Hadoop이냐!! MapReduce를 왜 굳이 Hadoop으로 돌리냐? 나름의 장점이 있기 떄문이다.


장점 하나, Accessible. 접근이 용이하다. 여러 대의 Machine에서 Hadoop을 돌릴 수 있다는 것이다. 세계적인 대기업 Amazon에서 Hadoop은 몇 백대의(정확하게 모르겠음) Machine에서 동시에 돌아간다고 한다. (믿거나 말거나) 


장점 둘, Robust. 발생하는 에러 등에 대해서 에러를 핸들링할 수 있다. 이 말은, 다르게 말해서 결과물의 정확도를 위해서 에러가 발생해도 사용자가 올바른 결과물을 가질 수 있도록 해준다는 것이다.


장점 셋. Scalable. 확장성이다. 하나의 Machine을 추가할 때 그냥 Tree에서 Node를 추가하는 것처러므 그저 추가해주면 그만이다. 


장점 넷. Simple. 단순하다. Hadoop을 이용해서 MapReduce를 돌리는 것은 상대적으로 굉장히 단순하게 되어있다. 조금만 익숙해지면 금방 익숙해진다.


여기서 Hadoop의 중요한 특징을 하나 더 말해보자. Distributed 라는 특성을 가지고 있다. 분산 프로그래밍을 가능케 한다. Hadoop을 이용하면, 하나의 MapReduce Job을 금방 끝내게 하기 위해 여러 Machine에 분산시킬 수 있다. 성능이 좋은 하나의 단일 Machine에서 돌리는 것보다 적당한 성능의 Machine 여러대에서 돌리는 것이 더 빠르다는 원리이다.


여기서 하나의 질문을 해보자. 그렇다면 Hadoop은 무조건 여러 대의 Machine이 있어야 돌릴 수 있냐? 아니다!! 단일 Machine에서도 돌릴 수 있다. 그렇지만 이럴 경우 Hadoop의 진정한 장점을 활용할 수는 없겠지. Hadoop은 다음의 세 가지 Mode로 돌릴 수 있다. 


1. Standalone Mode

2. Pseudo-Distributed Mode

3. Fully Distributed Mode


1. Standalone Mode

Standalone Mode는 정말 아무런 추가적인 설정 없이 Single Machine에서 돌릴 수 있는 Mode이다. Hadoop을 Hadoop 공식 홈페이지에서 다운로드 후 압축해제하면 끝이다. Standalone Mode에서는 어떠한 Hadoop 관련 Daemon 돌아가지 않는다. 그저 Framework로만 쓰는 것이다. MapReduce를 실행시킬 때 쓰는 input 또는 output은 Local File System을 이용한다.(다른 Mode처럼 HDFS, Hadoop File System, 등을 쓰지 않는다.) 


Bash> ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar grep input output 'dfs[a-z.]+'


위의 명령어는 hadoop으로 jar 파일 안의 grep 이라는 프로그램을 argument 'dfs[a-z.]+'와 실행시키는데 input은 input이라는 폴더 안에, 그 output은 output이라는 폴더에 넣으라는 명령어이다.


input과 output은 ls -al을 수행하면 나오는 실제 local에 존재하는 파일이다. 그래서 local file system이라고 설명한 것이다. 


2. Pseudo-Distributed Mode

Pseudo-Distributed Mode에서는 모든 Hadoop 관련 Daemon이 작동된다. 여기에 추가적으로 Standalone Mode에서 사용하던 Local File System을 사용하지 않고 Hadoop File System, HDFS를 사용하게 된다.


Bash> ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar grep example/input example/output 'dfs[a-z.]+'


나는 개인적으로 hdfs 안에 example이라는 폴더 그 안에 input과 output을 생성해놨다. 이 파일시스템은 Hadoop File System이라서 그냥 shell에서 ls 실행시켜서 볼 수 있는 그런 file system이 아니다.


Bash> ./bin/hdfs dfs -ls /example


위와 같이 hdfs를 통해 ls 명령어를 수행하면 example 밑에 어떤 파일 또는 폴더가 있는지 알수 있다.


Standalone Mode 그리고 Pseudo-Distributed Mode 모두 하나의 Single Machine에서 돌아간다. 따라서 하나의 Machine만 있으면 돌릴 수 있다. 그런데 Hadoop의 Main advantage를 활용하려면 반드시 몇 대 이상의 Machine을 통해 Hadoop을 설치해야하며, 이 때 Hadoop은 Fully Distributed Mode로 작동한다.


3. Fully Distributed Mode

Fully Distributed Mode에서는 여러 대의 Machine을 작업을 분산시킬 수 있다. 물론 여기에서도 Hadoop에서 필요로 하는 모든 Daemon이 작동한다. 


3.1 NameNode and DataNode

3.2 Secondary NameNode

3.3 JobTracker and TaskTracker


3.1 NameNode and DataNode

이전에 말했듯이, Fully Distributed Mode에서는 여러 대의 Machine이 연동되어 동작한다. 각각의 Machine들은 각각의 역할을 가지고 있다. 일단 기본적으로 어떤 Machine은 HDFS를 수행해야 하고 어떤 Machine은 Computation을(연산작업) 수행해야한다. HDFS 그리고 Computation 각각은 Master/Slave 구조로 동작을 하는데, HDFS는 아래와 같은 구조이다.


NameNode와 DataNode는 모두 HDFS 관련 Daemon이며, NameNode가 여러개의 DataNode에 대한 Master이고 DataNode는 Slave이다. 즉, NameNode는 여러 개의 DataNode를 관리하는 역할을 한다.


3.2 Secondary NameNode

만일 NameNode가 어떤 장애로 동작을 못 하게 되면 어떻게 될까? 다른 DataNode들도 모두 작동하지 못 하게 되겠다. 이러면 안 되기 때문에 NameNode의 역할을 대신할 수 있는 Alternative NameNode가 있다. 그것이 Secondary NameNode이다. 


자, HDFS는 이런 식으로 구성하면 되는데, 실제로 작업을 수행하는.. Computation 하는 Machine들은 어떤식으로 구성할까?


3.3 JobTracker and TaskTracker

Computation Machine들 역시 Master/Slave 구조로 동작한다. 각각이 JobTracker 그리고 TaskTracker이다. 여러 개의 TaskTraker들이 작업을 수행하고 그 작업들을 JobTracker가 관리한다. 따라서 아래와 같은 구성을 보일 것이다. JobTracker가 Master 역할, TaskTracker가 Slave 역할을 한다.


후... 이 정도면 Hadoop이 무엇인지 어떤 식으로 동작하는지 개괄적인 내용은 모두 포함한다고 생각한다. 다음 포스팅에서 소개할, 그리고 앞으로 소개할 모든 Hadoop 예제는 Pseudo-Distributed Mode에서 동작한다고 가정하고 진행할 것이다. 다음 포스팅에서는 C 프로그래밍으로 치면 HelloWorld 프로그램, 가장 기본적인 예제 프로그램인 WordCount 예제를 살펴볼 것이다.

'Big Data Tech' 카테고리의 다른 글

[Hadoop] Streaming API  (0) 2015.02.01
[Hadoop] Basic Example : WordCount  (2) 2015.01.31
[MongoDB] MongoDB Aggregation  (0) 2014.11.24
[MongoDB] CRUD Operation of MongoDB  (1) 2014.11.18
[MongoDB] Introduction of MongoDB and its fundamental  (0) 2014.11.09
Posted by 빛나유
,