티스토리 뷰


요즘 맵리듀스의 정렬 기법을 열공하고 있습니다.
맵리듀스에서는 다음과 같이 세 가지 정렬이 가능합니다.

 - 맵파일을 이용한 보조 정렬(Partial Sort)
 - 샘플러와 TotalOrderPartitioner를 이용한 전체 정렬(total sort)
 - 사용자 정의 파티셔너와 GroupingComparator를 이용한 보조 정렬(Secondary Sort)

오늘은 이 세가지 방법 중 보조 정렬에 대해서 이야기해보려고 합니다.

보조 정렬은 정렬할 파일을 맵 단계에서 시퀀스 파일로 출력을 해주고,
출력된 시퀀스 파일을 맵파일로 변경한 후 맵파일에서 원하는 데이터를 검색해내는 방법입니다.

맵파일이 여러 개가 만들어져 있더라도,
각각의 맵파일에는 키에 맞는 데이터들만 저장되어 있어서 데이터 검색이 가능한 것입니다.

"하둡 완벽 가이드"와 "클라우딩 컴퓨팅 구현 기술"에서도 이 기법이 소개되어 있는데요.
"하둡 완벽 가이드"에서는 아래와 같은 방법으로 보조 정렬 예제가 작성되어 있습니다.

 1. 입력 데이터를 시퀀스 파일로 생성한다.
 2. 1단계의 시퀀스 파일을 키 순서대로 정렬하여 시퀀스 파일로 생성한다.
 3. 2단계의 시퀀스 파일을 맵파일로 변경한다.
 4. 맵파일에서 원하는 데이터를 검색한다.

그런데 이 예제를 실행하다 보니 갑자기 이런 고민이 생겼습니다.

"시퀀스 파일을 바로 맵 파일로 안만들고, 왜 한번 더 정렬을 했을까?"

1단계의 시퀀스 파일이 라인순서대로 정렬이 되어 있어서, 다시 정렬을 하는 것은 이해가 됐습니다.
하지만 어차피 맵리듀스는 입력데이터의 키순서대로 정렬을 시키니,
1단계의 시퀀스 파일을 바로 맵파일로 만들면 시퀀스 파일의 키 순서대로 정렬이 될 것 같았습니다.
그래서 아래와 같은 단계로 다시 구현을 해봤는데, 예상대로 원하는 데이터가 잘 검색이 됐습니다.

 1. 입력데이터를 시퀀스 파일로 생성한다.
 2. 1단계의 시퀀스 파일을 맵파일로 변경한다.
 3. 맵파일에서 원하는 데이터를 검색한다.

리듀스 태스크 수를 조절해서 맵 파일이 하나만 만들어질 때와 여러 개가 만들어질 때를 모두 테스트해봤는데,
모두 다 검색이 잘되더군요. ^^;;;

혹시라도 제 방법이 틀렸다고 생각하는 시는 분들이 계시면 언제든지 태클 환영합니다~ ㅎㅎ

댓글
  • 프로필사진 궁금이 하둡에서 얘기하는 시퀀스 파일이란 어떤 걸 말하는 건가요? 책을 보고 공부하고 있는데 이해가 안되서요... 2012.03.19 09:25
  • 프로필사진 blrunner 시퀀스 파일은 하둡에서 제공하는 압축 포맷을 이용해 압축된 바이너리 파일을 말하는데요. 맵리듀스에서 출력 포맷을 시퀀스파일로 설정하면, 맵리듀스 출력 데이터를 시퀀스 파일로 만들어 줍니다. 시퀀스 파일이 생성되면 index와 data라는 두개의 파일이 생성되는데, data에는 압축된 데이터 내용이 바이너리로 기록되고, index에는 data의 시퀀스 즉 인덱스 정보가 기록됩니다. 참고로 시퀀스 파일은 "./bin/hadoop fs -text 시퀀스파일폴더"를 하시면 디코딩한 내용을 볼 수 있고요.텍스트로 보관하는 것보다는 압축된해서 보관하는 게 용량이 작으니까 실무에서 활용하면 좋을 것이라 생각됩니다. 2012.03.22 08:28 신고
댓글쓰기 폼