본문 바로가기
일하는 중에

이클립스에서 메이븐을 이용한 하둡 프로젝트 생성하기

by likebnb 2012. 12. 30.

0. 들어가는 말


몇 년 사이에 빅데이터에 대한 관심이 급증하였고 실제로 많은 기업들이 이미 관련 솔루션이나 제품들을 내놓고 있다. 이런 분위기에 힘입어 하둡에 관심을 갖는 개발자들도 많아진 것 같다. 하둡 개발자들을 독려하는 책들도 속속 출간되고 있는데 이 책들을 읽고나서 아쉬운 점이 몇 가지 있었다. 우선 이번 글에서는 그 첫 번째로 개발환경에 대한 것을 먼저 얘기하려고 한다. 필자는 하둡을 다음과 같이 정의한다. 


자바로 개발되었으나 다양한 언어로 접근할 수 있는 분산 파일시스템과 분산 컴퓨팅에 특화된 가상운영체제 


하둡은 thrift라는 기술을 이용해서 C나 Python과 같은 언어로도 클라이언트 프로그램을 개발할 수 있다. 하지만 대부분 개발자들은 자바로 접근하려 할 것이다. 자바로 만들어진 많은 예제들이 제공되기 때문일 것이다. 그래서 자바로 하둡을 시작하려는 뉴비(newbie)들에게 쾌적한 개발환경을 소개하고자 한다. 



이 글에서 알아보고자 하는 내용은 다음과 같다.


  • 이클립스에 메이븐을 이용하여 하둡 프로젝트 생성하기
  • 하둡 개발에 필요한 메이븐 종속성(dependency) 관리하기
  • 빌드한 JAR 파일을 하둡 클러스터에 자동 배포하기



1. 이클립스에서 메이븐을 이용하여 하둡 프로젝트 생성하기


우선 이클립스는 http://eclipse.org에서 다운 받아 설치한다. 그리고 메이븐은 이클립스 마켓 플레이스(Help > Eclipse Marketplace)에서 설치하도록 하자. 여기까지는 아마도 쉽게 인터넷 상에서 자료를 찾아서 참고할 수 있을 것이다. 이클립스 자체로도 좋은 개발툴이지만 이클립스를 더욱 빛나게 하는 것은 프로그램 개발의 생산성을 높여주고 테스트를 지원해주는 등의 수많은 플러그인들이 있다는 점이다. 지금도 많은 플러그인들이 있지만 앞으로도 꾸준히 플러그인들이 추가될 것으로 생각한다.


메이븐은 이클립스의 플러그인들 중 하나다. 메이븐의 주요 기능은 개발자가 정의한 자바 프로젝트에서 필요로 하는 각종 라이브러리들과 이들의 종속성을 자동으로 관리해주는 것이다. 이런 메이븐의 편리한 기능을 하둡 프로젝트에 적용해보도록 하자.



1.1. 메이븐으로 하둡 프로젝트 생성하기


이클립스 메뉴에서 File > New > Other를 선택한 후에 Maven을 확장하면 '메이븐 프로젝트 생성하기' 템플릿이 있다. Next를 클릭하자.


그림 1. 메이븐 프로젝트 생성그림 1. 메이븐 프로젝트 생성




1.2. Create a simple project에 체크


프로젝트의 이름과 위치를 선택하는 단계에선 체크박스 'Create a simple project'를 체크한 후 Next를 클릭하자.


그림 2. select project name and location그림 2. select project name and location




1.3. Artifact에 필요한 정보들 채워 넣기


이 단계에서는 프로젝트의 이름과 버전 그리고 패키징 방법 등을 지정한다. Group Id에는 대표 패키지 이름 정도가 적당하다. Artifact Id는 프로젝트 이름으로 쓰일 것이고 패키징 방법은 jar로 한다. 이제 Finish 버튼을 클릭하도록 하자.


그림 3. Configure project그림 3. Configure project




1.4. 생성된 프로젝트


위의 과정을 마치면 다음과 같이 프로젝트 탐색기에 HadoopExam이라는 프로젝트가 생성된 것을 볼 수 있다. 이 그림에서 주목할 것은 JRE Sytem Library에 자바 1.5버전이 설정되어 있다는 것이다. 하둡은 자바 1.6 버전 이상을 필요로 한다. JRE System Library를 우클릭하여 속성 페이지에서 Alternate JRE를 JDK 1.6 이상을 설정하도록 하자.


그림 4. HadoopExam 프로젝트그림 4. HadoopExam 프로젝트



이제 다음 할 일은 Maven Dependencies에 라이브러리를 추가하는 것이다. 하둡 프로젝트를 위해 필요한 필수 라이브러리는 hadoop-core이다. 이 라이브러리를 메이븐을 이용해서 추가하고 관리하도록 하자.





2. 하둡 개발에 필요한 메이븐 종속성(dependency) 관리하기


2.1. 하둡 개발의 필수 라이브러리를 메이븐 종속성 관리에 추가하기 


이클립스 메뉴에서 프로젝트 HadoopExam을 우클릭한 다음 Maven > Add Dependency를 클릭하면 다음과 같은 다이얼로그가 뜬다. 중간 쯤에 있는 검색어 입력하는 곳에 hadoop-core를 입력한 뒤 잠시 기다리면 검색결과가 나온다. 여기 그림에선 hadoop-core 버전 1.0.4를 선택했다. 이 버전은 여러분이 구축한 하둡 클러스터의 버전과 일치시켜야 한다. 


그림 5. hadoop-core 종속성 추가하기그림 5. hadoop-core 종속성 추가하기




2.2. hadoop-core를 추가한 결과  


그 결과 hadoop-core 외에도 Maven이 hadoop-core에 종속된 라이브러리들을 찾아서 빌드 경로에 추가해 준다.


그림 6. Maven Dependencies그림 6. Maven Dependencies








3. 빌드한 JAR 파일을 하둡 클러스터에 자동 배포하기


이클립스 개발환경과 하둡 클러스터는 서로 다른 Host인 경우가 대부분이다. 그래서 개발 PC에서 빌드된 jar 파일을 하둡 클러스터에 매번 올리는 것이 여간 불편한 일이다. 지금부터 하고자 하는 일은 바로 이런 불편을 해소하기 위한 메이븐 빌드 및 배포환경 설정이다. 이 설정의 기본 컨셉은 scp라는 리눅스 명령에서 아이디어를 가져왔다.  


이제 메이븐의 플러그인 ant-jsch와 jsch를 추가하고자 한다. 이 글을 작성하는 시점에 ant-jsch는 1.6.5가 최신 버전이고 com.jcraft의 jsch는 0.1.49가 최신 버전이다. 이 두 개의 플러그인은 antrun의 task중 하나인 scp를 이용하기 위해 필요한 것이다. 


3.1. 원격 하둡 클러스터에 배포하기 위한 pom.xml 설정


다음 그림에서 11번 라인의 <phase>엔 install을, 14번과 15번 라인의 <scp>에 원본 파일명과 하둡 클러스터에 업로드할 원격 디렉토리 및 scp 계정정보를 작성해주면 된다. 리눅스의 scp 명령의 사용법을 참고하고 실습해보면 바로 이해할 수 있을 것이다.


그림 7. 자동배포를 위한 pom.xml그림 7. 자동배포를 위한 pom.xml




3.2. 메이븐 install을 이용하여 빌드된 jar를 하둡 클러스터에 업로드


이클립스 메뉴의  Run As > Maven Install을 클릭하면 콘솔에 다음과 같은 로그가 기록되는 것을 볼 수 있다. 물론 이 때 하둡 클러스터에 대한 네트워크 접근이 가능한 상태라야 한다. 아래 로그에선 하둡 클러스터 중 jar를 실행할 호스트의 IP Address가 10.211.55.3이고 SSH를 통해서 접속하여 HadoopExam-0.0.1-SNAPSHOT.jar 파일이 성공적으로 업로드되었음을 알 수 있다. 


그림 8. 메이븐 install에서 업로드(배포)하기그림 8. 메이븐 install에서 업로드(배포)하기




3.3. 하둡 클러스터에서 올려진 jar 파일 확인


하둡은 리눅스에서 동작하도록 만들어진 자바 프로그램이다. 설명을 돕기 위해 필자는 Mac OS X에 리눅스 가상머쉰을 구동하고 여기에 하둡을 Pseudo Distribution 모드로 구동시켰다. 그림 8의 로그에서 업로드한 시각과 아래 그림 9에서 HadoopExam-0.0.1-SNAPSHOT.jar 파일의 시각을 대조해보면 Maven Install을 통해 정상적으로 업로드 된 것을 확인할 수 있다. 



그림 9. 하둡클러스터에 올려진 jar 파일그림 9. 하둡클러스터에 올려진 jar 파일





4. 맺는 말


테스트를 위해 필자가 작성한 프로그램은 하둡 개발 예제 중 제일 먼저 접하게 되는 WordCount였다. 프로그램 코드 작성이나 그 실행 결과 등은 이미 충분히 많은 글들이 있으니 굳이 여기에 또 작성하지는 않겠다. 메이븐을 이용하여 하둡 개발에 필요한 라이브러리들을 효율적으로 관리하고 빌드된 JAR 파일을 하둡 클러스터에 편리하게 배포하는 방법을 알아보는 것이 이 글의 목적이기 때문이다. 도움이 되었길 바란다.