티스토리 뷰

하둡과 관련되어 작성한 글 목록을 먼저 보여드립니다. 참고하시기 바랍니다. 

2012/02/29 - [리뷰/블로그] - BigData 처리를 위한 맵리듀스(MapReduce)에 대하여~

2012/05/18 - [프로그래밍/Java] - 하둡(Hadoop) 설치부터 테스트까지 정리~

2012/05/22 - [프로그래밍/Java] - 하둡 맵리듀스 프로그래밍을 위한 이클립스 플러그인 설정 #1


지난 시간에 Mac에 이클립스 플러그인을 설치하는 과정을 살펴봤는데요. 

마지막에 설명한 것처럼 플러그인의 장점을 충분히 살리지 못하고 있으며 약간의 버그들도 존해하기 때문에 큰 의미가 없었습니다. 

그래서 이번에는 일반적인 자바 프로젝트로 개발 환경을 설정하고 word count를 처리하는 예제를 실제로 실행해 보도록 하겠습니다. 


이클립스 하둡 맵리듀스 개발 환경 설정


새 프로젝트 생성

먼저 Hadoop 이라는 이름으로 새로운 프로젝트 생성을 하는데요. 일반적인 자바 프로젝트로 진행하시면 됩니다. 

create java project in eclipse

create java project named hadoop

다음과 같이 프로젝트가 생성된 것을 볼 수 있습니다. 

생성된

Hadoop에서 제공하는 conf/ 파일들이 필요하므로 복사할 수 있도록 conf/라는 폴더도 하나 생성하도록 하죠.. 

프로젝트에서 우클릭한 후, New > Folder > conf 라고 만드시면 다음과 같이 나타납니다. 

conf 폴더 생성


개발 환경 설정

이제 하둡 이클립스 플러그인으로 생성한 것과 비슷하게 각종 jar 파일들을 적용하는 환경 설정을 해보도록 하겠습니다. 

프로젝트에서 우클릭 한 후, "Properties"를 실행합니다. 

그리고 좌측에서 "Java Build Path"를 선택하고 우측의 탭 중에서 "Libraries"를 선택하면 다음과 같은 화면이 나타납니다. 

java build path의 Libraries 설정

먼저 "Add External JARs..."를 선택해서 Hadoop 관련된 다음 jar 파일들을 추가해 주시면 됩니다. 

  • /hadoop-1.0.1/hadoop*.jar
  • /hadoop-1.0.1/lib/*.jar

Add External Jar

그리고 "Add Class Folder..."를 클릭해서 위에서 생성한 conf/ 폴더를 지정합니다. 

add class folder

마지막으로 하둡이 설치된 곳에서 conf/ 하위의 파일들을 현재 프로젝트의 conf/ 폴더로 복사합니다. 

copy files to conf folder

자.. 개발 환경 설정이 모두 종료되었습니다. 

이제부터는 맵리듀스 프로그래밍을 시작해 보도록 하죠. 

예제는 hadoop 설치 소스에 포함된 wordcount를 가지고 실제 만들어서 진행해 보도록 하겠습니다. 


wordcount 맵리듀스 테스트

하둡 설치 폴더에 보면 /hadoop-1.0.1/docs/index.html 파일을 실행해 보시기 바랍니다. 

뭐든지 제작사가 직접 만든 Document가 가장 신뢰성있는 정보를 제공하는 것 같습니다. 

첫 화면은 다음과 같습니다. 

hadoop documents

여러가지가 있는데요.. 필요한 분들은 추후 천천히 살펴보시기 바랍니다. 

여기에서는 맵리듀스에 관심이 있으므로 MapReduce Tutorial을 따라서 진행해 보도록 하겠습니다. 

MapReduce tutorial


맵리듀스 소스 코딩

맵리듀스 튜토리얼을 살펴보면 중간에 Example: WordCount v1.0이라는 부분이 있습니다. 

이 예제를 가지고 위에서 세팅한 이클립스로 코딩을 해보도록 하죠.. ^^

위에서 설정한 hadoop 프로젝트에서 src/ 하위에 새로운 패키지와 자바 파일을 만들도록 하겠습니다. 

패키지명: kr.acronym.wordcount

클래스명: WordCount

create java package

create java class

그리고 나서 WordCount.java에 다음과 같이 소스 코드를 넣습니다. 

이 소스는 hadoop의 mapreduce tutorial에서 가져온 내용입니다. ^^

이클립스에서 보면 에러 표시가 안 나타나는 것을 볼 수 있습니다. 

혹시 에러가 나는 분들은 앞부분의 개발 환경 설정이 잘못된 경우이니 처음부터 다시 따라해 보시기 바랍니다. 


컴파일 및 jar 파일 생성

튜토리얼에는 콘솔 명령어로 컴파일하고 jar 파일을 생성하는 것을 설명하고 있습니다. 

이클립스와 같은 툴을 사용하는 이유는 이런 작업을 좀 편하게 하기 위함이죠.. 

이클립스를 통해서 컴파일하고 jar 생성하는 것은 잘 알겠지만 여기에서 한번 더 진행해 보도록 하겠습니다. 

먼저 프로젝트에서 우클릭한 후, Export..를 선택하면 나오는 화면에서 JAR file을 선택합니다. 

create Jar file

이어지는 화면에서 조금 전 코딩한 WordCount 클래스를 포함한 패키지를 선택합니다. 

그리고 필요한 경우 "Select the export destination"에서 저장할 경로를 지정합니다. 

Jar file specification

이제 "Finish" 버튼을 클릭하면 wordcount.jar 파일이 만들어집니다. 

("Next>"를 클릭해서 각각 세부 정보를 설정할 수도 있습니다. 이건 각자 살펴보세요 ^^)


WordCount 실행으로 결과 확인

지금부터 실행하는 것은 콘솔 명령어로 하도록 하겠습니다. 

추후 기회가 되면 ANT 빌드로 만들어서 이클립스에서 한번에 처리할 수 있도록 구성할 수도 있겠죠.. 


지난번 하둡(Hadoop) 설치부터 테스트까지 정리~ 예제를 따라 했다고 생각하고 시작하도록 하겠습니다. 

(위 예제를 모두 따라 했다면 HDFS의 input/ 폴더와 output/폴더가 이미 생성되어 있을 겁니다.)

먼저 조금전 jar 파일이 생성된 폴더로 이동을 합니다. 

# cd /Users/minikim/Dev/jar/

그리고 이전에 생성된 HDFS의 input/과 output/ 폴더의 내용을 모두 삭제하도록 하겠습니다. 

# hadoop dfs -rm input/CHANGES.txt

# hadoop dfs -rmr output/

첫번째 라인은 앞선 예제에서 실행한 CHANGES.txt 파일만 지운 것이구요. 

두번째 라인은 output/ 폴더 전체를 삭제한 것입니다. 


맵리듀스를 한번 실행하고 난 뒤 다시 실행하면 "org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory  .... already exists" 라는 에러 메시지가 나타납니다. 

이 경우, output 폴더의 내용을 지우거나 결과를 저장하는 위치를 변경해야 한다고 하네요. 


이제 단어 숫자를 셀 파일들을 한번씩 만들어 보겠습니다. 

# vi file01

Hello World Bye World

# vi file02

Hello Hadoop Goodbye Hadoop

텍스트 파일 만드는 것이야 어렵지 않으니 쉽게 따라 하실 수 있을 것 같네요.. ^^

이렇게 생성된 파일들을 HDFS의 input/ 폴더에 복사하도록 할께요. 

이어서 잘 복사가 되었는지도 확인해 봤습니다.

# hadoop dfs -put file01 input/

# hadoop dfs -put file02 input/

# hadoop dfs -ls input/

Warning: $HADOOP_HOME is deprecated.

Found 2 items

-rw-r--r--   3 minikim supergroup         22 2012-05-23 18:08 /user/minikim/input/file01

-rw-r--r--   3 minikim supergroup         28 2012-05-23 18:13 /user/minikim/input/file02

이제 앞에서 만든 wordcount를 실행해서 실제 결과가 나오는지 확인해 보도록 하죠.. 

# hadoop jar wordcount.jar kr.acronym.wordcount.WordCount input/ output/

mapreduce result

제대로 실행이 됩니다. 그럼 결과를 확인해 보도록 하죠^^

output/ 폴더를 보면 part-00000 파일이 생성된 것을 볼 수 있구요. 

이 파일의 내용을 보면 단어 갯수 체크가 되어 있습니다. 

# hadoop dfs -ls output

# hadoop dfs -cat output/part-00000

이제 이클립스에서 맵리듀스 프로그래밍을 하고 결과가 제대로 나오는 것 까지 확인을 했네요.. 

이번 글은 정말 길었습니다. 하나하나 자세히 설명하다보니~

저도 처음 해보면서 너무 정신없었던 기억에 이렇게 정리를 한번 해봅니다. 

추후 기회가 되면 jar 생성 이후 과정을 자동화 하는 것도 한번 처리해 보도록 하죠.. 

그럼.. 좋은 하루 되세요~


댓글
  • 프로필사진 셰브첸코 잘 보았습니다. 하나하나 따라하기 쉽게 정리해 주셔서 감사합니다.
    이클립스 플러그인을 생성하는게 어려웠는데 여길 보니 굳이 플러그인을 만들지 않아도 원하는jar파일을 만들수 있네요,

    고맙습니다!
    2012.07.16 11:28
  • 프로필사진 미니~ 항상 시간이 지나면 잊어버리는 경우가 많아서 이렇게 정리해 두면 저한테도 도움이 되더라구요.

    어쨌든 댓글 달아 주셔서 감사합니다. (요새 통 반응이 없어서 걱정했네요.. ^^)
    2012.07.17 15:45 신고
  • 프로필사진 hare ^-^ 감사합니다. 여기까지 정상적으로 잘되네요!
    처음에 hadoop dfs -rmr output 을 몰라서 왜 않되는지 몇일을 헤맸네요.ㅎ
    확실히 플러그인보다 이 방법이 편하고 좋습니다.
    글 정말 감사합니다.
    2013.02.01 13:30
댓글쓰기 폼