본문 바로가기
일하는 중에

flume-ng를 이클립스로 빌드하기

by likebnb 2013. 5. 26.

0. 들어가는 말, 아무래도 이클립스가 편하다.


지난 글, flume-ng를 윈도에서 구동하려면에서는 윈도의 CMD에서 Maven을 이용하여 flume-ng를 빌드하는 것을 알아봤다. 

컴파일과 배포 등은 수월한 반면 코드를 읽고 수정하며 디버깅을 하는 것은 CUI 환경에서는 아무래도 한계가 있다. 

그래서 이번에는 flume-ng를 이클립스 환경에서 빌드하는 것을 소개 하고자 한다. 이클립스와 메이븐 플러긴 등은 따로 설명하지 않는다. 

대신 flume-ng를 빌드하면서 맨 처음 누구나 만나게 되는 메모리 문제에 대해서 집중 소개하도록 하겠다.



1. 이클립스(Eclipse)로 flume-ng를 Import 하기


이번에 소개하는 이클립스 환경은 Mac OS X용으로 Juno 64비트(Mac OS X 64 Bit)를 기준으로 한다. 아울러 메이븐 플러긴은 

이미 설치되어 있는 것을 전제로 하며 flume-ng는 1.3.1 버전의 소스를 사용하는 것으로 한다.


flume-ng 1.3.1 소스를 다운 받아 적당한 폴더에 압축을 해제한 후 이클립스를 실행하여 File > Import 메뉴를 클릭한다. 다음 그림에서

처럼 Maven 폴더에서 Existing Maven Projects를 클릭하면 Maven Project 창이 뜬다. 이 때 Root Directory를 압축을 해제한

flume-ng 소스 폴더를 지정하면 된다.



Maven 폴더에서 Existing Maven Projects 선택하기Maven 폴더에서 Existing Maven Projects 선택하기







Maven Projects의 Root Directory를 flume-ng 소스로 지정Maven Projects의 Root Directory를 flume-ng 소스로 지정



2. Parent Project를 제외한 하위 프로젝트들은 삭제


Root Directory에 압축을 해제한 flume-ng의 소스 디렉토리를 지정하고 Next를 클릭하면 Maven이 디렉토리들을 분석하여 

프로젝트들을 검출해낸다. 그림에서 보면 알겠지만 pom.xml 파일들을 찾아서 이를 프로젝트로 인식하는 것이다. 여기에서 Next를

클릭하고 그 다음 그림을 보도록 하자.


Root Directory에 있는 소스들을 분석한 결과 검출된 프로젝트들Root Directory에 있는 소스들을 분석한 결과 검출된 프로젝트들




분석된 결과에 따라 Maven Build에 몇 가지 문제가 있음을 보고한다. 하지만 실제 빌드에는 문제가 없으니 Finish를 클릭하여 

Import를 마치도록 한다.


일부 프로젝트들은 나중에 종속성 문제 등을 해결하기로 한다일부 프로젝트들은 나중에 종속성 문제 등을 해결하기로 한다



다음 그림과 같이 flume 프로젝트와 이에 딸린 하위 프로젝트들이 모두 이클립스에 import 되었다.


flume-ng와 그 하위 프로젝트들이 모두 검출되어 이클립스에 등록되었다flume-ng와 그 하위 프로젝트들이 모두 검출되어 이클립스에 등록되었다



그런데 flume 프로젝트를 제외한 나머지 하위 프로젝트들은 이미 flume 프로젝트에 포함되어 있으므로 따로 관리하지 않는 것으로 한다.

다음 그림과 같이 나머지 프로젝트들을 모두 선택하여 지운다. 이 때 주의할 것은 프로젝트만 지우고 그 내용은 지우지 말아야 한다는 점이다.


하위 프로젝트들은 이미 Parent Project인 flume에 포함되어 있으므로 지운다하위 프로젝트들은 이미 Parent Project인 flume에 포함되어 있으므로 지운다




다음과 같이 정리되었다.


정리된 flume 프로젝트정리된 flume 프로젝트








3. 메이븐 실행 환경에서 install Goal로 패키징하기


자 이제 flume-ng 프로젝트를 성공적으로 Import하였으므로 빌드가 잘 되는지 보도록 하자. 보통의 Maven 프로젝트들은 프로젝트 탐색기에서

해당 프로젝트의 Context Menu를 팝업하여 Run As > Maven build를 클릭하여 빌드를 수행한다. flume도 예외는 아니다 다만 flume 

프로젝트를 Import 하여 처음 빌드하는 것이라면 Goals를 지정하라는 창이 뜨게 된다,  



컨텍스트 메뉴, Maven build컨텍스트 메뉴, Maven build





Edit Configuration and launch 창이 뜨면 Goals에 "install"을 넣어주고 Run을 클릭해서 컴파일과 jar 패키징 등 일련의 과정을 수행한다.



Maven의 실행환경에 Goals를 지정한다Maven의 실행환경에 Goals를 지정한다



그런데 이렇게 빌드를 수행하다가 다음과 같이 에러를 출력하고 빌드가 실패했다면서 중지하게 되는데 이는 테스트 모듈에서 테스트가

실패하였기 때문이다. flume은 Hadoop의 HDFS를 repository로 지원하고 빌드 과정에서 이에 대한 테스트도 수행하게 되는데 이 부분에서

테스트를 실패한 것이다. 하지만 이는 배포본을 빌드하는데 문제가 되지 않으므로 빌드 과정에서 테스트는 생략하기로 한다.


유닛 테스트 중에 실패함유닛 테스트 중에 실패함





4. 테스트는 수행하지 않고 빌드하기 

    

flume을 빌드할 때 앞에서 언급한 것처럼 테스트 과정을 생략하려면 다음 그림에서 처럼 Run Configurations 다이얼로그에서 

flume을 선택하여 Goals 항목에 "install -DskipTests"라고 시스템 옵션을 추가하면 된다.



테스트를 skip하기 위해 실행환경 Goals에 -DskipTests 추가테스트를 skip하기 위해 실행환경 Goals에 -DskipTests 추가





5. OutOfMemory, PermGen Space Error


이렇게 하여 테스트를 생략하고 빌드를 하는데 거의 마지막 단계에서 OutOfMemory 또는 PermGen Size 등의 에러와 함께 중단되는 

경우가 있다. 이는 말 그대로 Maven의 실행에 필요한 메모리가 부족해서 발생하는 것으로 필요한 만큼 메모리를 지정해주면 된다.

다음 그림을 참고하여 -XX:MaxPermSize=2048m과 같이 옵션을 추가하도록 한다.


메모리 문제를 해결하기 위해 JRE 설정에 arguments를 추가메모리 문제를 해결하기 위해 JRE 설정에 arguments를 추가





6. javadoc Command를 찾을 수 없다.


javadoc 커맨드를 찾을 수 없다는 오류가 발생한 경우javadoc 커맨드를 찾을 수 없다는 오류가 발생한 경우


Max OS X 10.8.3을 기준으로 볼 때 시스템에 기본적으로 설치되어 있는 JDK는 1.6.x 버전이다. 만약 JDK 1.7.x를 사용하고 싶다면

https://jdk7.java.net/download.html 에서 설치 프로그램을 다운 받아 사용하면 된다. 단 이 경우에 JAVA_HOME 환경변수를 

maven이 인지할 수 있도록 환경변수로 지정해주어야 한다. 다음 그림과 같이 Run Configurations의 Environment 탭에서 지정할 수

있다. 



JDK 7.0의 경우 JAVA_HOME을 추가해줘야 한다JDK 7.0의 경우 JAVA_HOME을 추가해줘야 한다






7. 마침내 성공


이렇게 지정을 한 뒤에 Run As > Maven install을 클릭하고 기다리면 다음과 같이 반가운 보고를 받게 된다.


마침내 빌드에 성공마침내 빌드에 성공






사실 알고나면 별 것 없다. 기술이라는 것이 대체로 그렇다. 하지만 문제 한 가운데서 한 시간 두 시간 헤매본 적 있는 사람은 안다.

알고나면 별 것 아닌 그것이 얼마나 절실하게 간절하게 찾던 것이었는지를...


이 글을 통해 flume에 입문하려는 초보 개발자들에게 조금이나마 시간을 절약할 수 있는 도움이 되기를 바란다.