티스토리 뷰

요즘 하둡(Hadoop)을 계속해서 테스트해보고 있습니다. 

지난번에 설치는 2012/05/18 - [프로그래밍/Java] - 하둡(Hadoop) 설치부터 테스트까지 정리~ 에서 정리했었는데요. 

이번에는 맵리듀스 프로그래밍을 위한 이클립스 설정을 살펴보도록 하겠습니다. 

참고로 이번부터는 맥에서 하둡을 설치하고 테스트를 진행했네요. 


Apache Ant / Ivy 다운로드 및 설치

하둡 내부의 소스 폴더를 보면 ant build를 많이 사용하고 있습니다. 

자바 프로젝트를 하면서 Ant는 기본적으로 설치되어 있을텐데요. 

제 Mac에서도 /usr/share/java/ant-1.8.2/에 설치되어 있네요. 


Ant가 설치되어 있으면 이어서 Apache Ivy를 설치해야 합니다. 

하둡에서도 Ivy를 사용하고 있는데요. Apache ivy는 자바 프로젝트의 의존성을 관리해 주는 도구입니다. 

즉, Ant 빌드에 세팅된 정보를 이용하여 각 라이브러리를 참조한 뒤 의존성 검사를 수행하고 검사결과도 HTML 형태로 보여주기도 합니다. 

다운로드는 http://ant.apache.org/ivy/download.cgi 에서 하면 됩니다. 

apache-ivy-2.3.0-rc1-bin.tar.gz 파일을 받아서 압축을 풀면 ivy-2.3.0-rc1.jar 파일을 찾을 수 있습니다.

이 파일을 Ant 가 설치된 폴더의 lib/에 복사하시면 됩니다. (/usr/share/java/ant-1.8.2/lib)


이클립스 플러그인 Ant 빌드

이클립스에 세팅하기 위해서 먼저 테스트한 것은 이클립스 플러그인 입니다. 

하둡을 다운로드하고 소스들을 살펴보면 eclipse-plugin이라는 폴더가 있습니다. 

(정확한 위치는 /hadoop-1.0.1/src/contrib/eclipse-plugin 이네요.)

contrib인 걸로 봐서 Third Party에서 개발해서 제공한 것 같은데요. 


Ant 빌드를 세팅했으므로 아무 생각없이 먼저 Build를 실행해 봤습니다. 

아래 그림과 같이 뭔가 동작하는 것 같기는 하지만, compile과 jar에서 아무 내용이 없는 것을 확인할 수 있습니다. 


build.xml 파일을 열어보니 compile과 jar에서 사용하는 eclipse.home이나 version과 같은 property가 설정이 안되어 있었습니다. 

그래서 해당 property를 설정하고 다시 Ant 빌드를 수행했습니다. 

  <property name="eclipse.home" value="/Applications/eclipse"/>

  <property name="version" value="1.0.1"/>

결과는 역시 Build Fail.... 100개의 Error가 발생했네요~ 


오류메시지와 build.xml 파일을 살펴보니 자바 컴파일 중에 난 에러인데요.. 

hadoop 관련된 jar 파일들이 포함되지 않아서 발생한 것 같네요. 

그래서 hadoop-core와 hadoop-lib에 대한 classpath를 다음과 같이 설정해 봤습니다. 

(먼저 path를 정의하고, classpath에 참조하는 형태로 구성했네요.)

  <path id="hadoop-core">

<fileset dir="${hadoop.root}/">

<include name="hadoop*.jar"/>

</fileset>

  </path>


  <path id="hadoop-lib">

<fileset dir="${hadoop.root}/lib/">

<include name="*.jar"/>

</fileset>

  </path>


....


  <path id="classpath">

    <pathelement location="${build.classes}"/>

    <pathelement location="${hadoop.root}/build/classes"/>

    <path refid="hadoop-core"/>

    <path refid="hadoop-lib"/>

    <path refid="eclipse-sdk-jars"/>

  </path>

다시 Ant 빌드 해보니 아래와 같은 오류가 나오네요.. 휴~ 정말 직접 만든게 아니라 끝이 없네요.. ㅋㅋ


오류 메시지를 잘 살펴보니 build에 hadoop-core-1.0.1.jar 파일이 없다는 것 같습니다. 

그래서 /hadoop-1.0.1 하위에 있는 hadoop-core-1.0.1.jar 파일을 build 폴더 밑으로 복사했습니다. 

마찬가지로 Ant 빌드를 해보면 commons-cli-1.2.jar 파일 관련 오류가 나오므로 마찬가지로 지정한 위치로 복사했네요. 

(위치가 조금 다릅니다. 다음 내용 참고하세요)

# cp hadoop-core-1.0.1.jar build/

# cp lib/commons-cli-1.2.jar build/ivy/lib/Hadoop/common/

드디어 eclipse plugin에 대한 Ant Build를 성공했습니다. ^^ 

/hadoop-1.0.1/build/contrib/eclipse-plugin 폴더에 보면 hadoop-eclipse-plugin-1.0.1.jar 파일이 생성된 것을 볼 수 있습니다. 



이클립스 플러그인 적용

생성된 파일을 이클립스의 plugin 폴더에 복사하고 이클립스를 재시작하면 해당 플러그인이 적용됩니다.

Perspective를 보면 다음 그림과 같이 코끼리 모양의 MapReduce를 추가할 수 있습니다. 


좌측 상단에 보면 DFS Locations라고 나와 있습니다. 
하둡의 파일 시스템인 HDFS를 관리하는 것 같습니다. 
그러나 Mac에 설치된 이클립스에서는 로그인이 안되는 문제가 있네요. 
아마도 SSH 관련 설정 때문인 듯 한데요.. 요건 어쩔 수 없는 것 같습니다. 


다음은 localhost에 설치된 하둡의 DFS에 연결하는 부분입니다.
Map/Reduce Master는 mapred-site.xml에서 설정한 mapred.job.tracker의 값인 듯 하구요. 
DFS Master는 core-site.xml에 설정한 fs.default.name의 값인 것 같네요. 

어쨌든 연동이 되지 않는 문제가 있습니다. 

곰곰히 생각해보니 DFS와 같은 하둡에 연동이 안된다면 굳이 플러그인을 사용하는 것이 의미가 있을까 하는 의문이 드네요. 헐~

윈도우에서는 동작할 것 같기는 한데요.. cygwin과 같은 것을 설치해야 하니 부담이 있을 듯 하구요.. 

localhost가 아닌 원격으로 세팅하면 될 것 같기도 한데.. 거기까지는 다음에 다시 한번 테스트 해보도록 하죠. 


일단 이어서 MapReduce 프로젝트로 wordcount를 하나 생성해 봤습니다. 



그런데 생성해보니 버그인지 프로젝트가 두개가 생겼습니다. 하나를 지우면 같이 사라지는 것으로 봐서 버그인 듯 하네요.. 

더욱 당황스러운 것은 기본적인 jar 파일을 포함한 것 이외에 다른 템플릿이 전혀 없다는 것입니다. 

헉! 왜 이걸 빌드하고 적용했지? 하는 생각이 밀려오네요.. ㅠㅠ


정리

현재까지 살펴본 바에 따르면 일단 다음과 같이 정리할 수 있습니다. 

  1. Mac의 이클립스에서는 HDFS를 연결해도 SSH로 접속이 되지 않습니다. 
  2. MapReduce 프로젝트를 생성하니 프로젝트가 두개씩 보여지고 jar 파일 import외에는 특별한 템플릿이 없습니다.

위 내용을 토대로 생각해보면 

이클립스 플러그인을 적용해서 맵리듀스 프로그래밍을 할 필요가 현재까지는 없다는 것입니다. 

그렇다면 차라리 이클립스에 기본적인 자바 프로젝트로 생성하고 jar만 잘 import 해줘서 

맵리듀스 프로그래밍에 대한 컴파일과 결과 파일인 jar 생성만 잘 해주면 된다는 것이죠. 

다음에는 이 방식으로 이클립스 맵리듀스 개발 환경 세팅을 다시 정리해 보려고 합니다. 



댓글
댓글쓰기 폼