시작하기 전에
클라우드에서 주로 사용하는 ubuntu 유저 VM과 유사하게 도커로 base 이미지를 제작하고 각각 개발 용도별로 확장시키기 위해 필요한 도커 이미지와 compose 파일을 작성하고 있습니다. 빅데이터 분야의 하둡 에코 시스템은 다양한 오픈소스와 함께 확장되어 왔기 때문에 이러한 용도로 활용될 수 있는 좋은 예시입니다. 윈도우나 맥으로 로컬 개발환경에서 맵리듀스 개발이나 빌드는 가능하지만, 이후 실행은 복잡한 설치 과정이나 HDFS 분산 시스템을 이용할 수 있는 서버가 필요합니다. 예제 프로젝를 받아서 이를 편하게 구성할 수 있는 방법을 소개합니다.
예제 : https://github.com/hibuz/hadoop-example
하둡 예제 실행
윈도우 Git Bash 사용
(CMD 창에서 Shell파일을 실행하더라도 Git Bash 창이 떠서 동작 가능함)
- 예제 소스코드 다운로드 및 빌드 후 실행
git clone https://github.com/hibuz/hadoop-example.git
cd hadoop-example
# docker compose 실행 및 Docker Bash 실행
./docker_up.sh
2. 예제 빌드 및 실행
$ ./mvnw package
# 단어 샘플을 hdfs에 파일로 저장
$ ./wordcount_input.sh
# hadoop mapreduce 실행
$ ./run_example.sh
3. 도커 데스크탑에서 VSCode 실행 후 개발 및 실행
# VSCode 에서 Git Bash 터미널 실행 후 Docker Bash 실행
./docker_up.sh
# 소스 수정 후 윈도우에서 mvnw 빌드 또는 컨테이너에서 쉘에서 빌드
$ ./mvnw package
# hadoop mapreduce 실행
$ ./run_example.sh
4. 컨테이너 정리
# Docker 컨테이너 Bash 에서 빠져 나오기
$ exit
# Git bash에서 볼륨은 삭제하지 않을 경우 -v 제외하고 실행
$ ./docker_down.sh -v
맥에서 Docker Desktop 사용
(Dev Environments가 윈도우에서는 동작하지 않아 맥에서만 설명합니다. 윈도우처럼 docker_up.sh 사용도 가능함)
- 예제 소스코드 다운로드 및 VSCode에서 코드 수정
$ git clone https://github.com/hibuz/hadoop-example.git
$ cd hadoop-example
$ code .
2. VSCode 에서 WordCount.java 파일의 Reduce 값에 * 2 를 해서 빌드합니다.
3. 빌드된 파일을 실행할 컨테이너 생성을 위해 Dev Environments에서 프로젝트 위치를 지정합니다.
2. 컨테이너가 실행되면 Docker Bash에서 동작시켜 봅니다.
# 터미널에서 Docker bash 실행
./docker_up.sh
# 컨테이너 쉘에서 단어 샘플을 hdfs에 파일로 저장
$ ./wordcount_input.sh
# hadoop mapreduce 실행
$ ./run_example.sh
단어 갯수 * 2가 된 결과를 확인할 수 있습니다.
3. Docker Dashbord의 Containers / Apps 메뉴에서 브라우져를 열어서 실행된 결과를 조회합니다.
4. Docker Dashbord에서 삭제하거나 터미널에서 docker_down.sh 로 삭제합니다.
Development Environment 사용 후기
도커 데스크탑에 Development Environment 기능이 생겨서 Git Remote 주소만 넣으면 아주 빠르게 개발이 가능할 것으로 기대하였습니다. 하지만 컨테이너가 Dev 모드로 전환되면서 새로운 컨테이너로 동작해서 하둡관련 작업이 되지 않았습니다. 전환하지 않고 컨테이너에 들어가면 사용은 가능하나 새로운 코드를 넣어 작업하기 불편해서 결국 로컬 프로젝트를 마운트 하는 방식으로 진행했습니다. 팀 플랜으로 전환해서 작업중인 컨테이너를 공유하는 방식으로 이미지를 만들면 될까도 싶지만 그렇게 까지는.. 이상 하둡 개발 환경 구축기 입니다.