AWS EMR (Elastic Map-Reduce) 을 써보려고 며칠간 삽질을 하다가..
누군가의 비슷한 삽질을 방지하고자 공유드립니다.
(사실 몇몇 사이트 잘 찾고 영문 번역만 잘 해도 되긴 합니다.)
웹 콘솔에서 사용할 수도 있는데,
아래는 CLI (Command Line Interface)를 이용하기 위한 설치방법입니다.
1. ruby 설치
- 반드시 1.8.7 버전이어야 함. => 아주 중요합니다. 1.8.7은 은퇴하고 지금은 대부분 1.9.X 를 쓰고 있습니다. 아마존이 업뎃 대응이 느리네요.
- ubuntu 최신 버전은 default 로 ruby 1.9.1 이후 버전이 설치되어 있으니, 설치된 버전 삭제 후 1.8.7 설치해야 함.
(여러 버전의 ruby를 사용하게 해주는 rvm 이 있지만, 깨끗하게, 걍 싹싹 밀고...)
- ruby -v 로 버전 확인 혹은 dpkg -l 로 설치된 루비 패키지 확인
- 만약 ruby1.9.2 패키지가 설치되어 있으면, apt-get remove ruby1.9.2 로 해당 패키지 제거
- apt-cache search ruby1.8 하면, ruby1.8 확인 가능 (이 놈이 1.8.7)
- apt-get install ruby1.8 로 설치
- ruby -v 로 버전 1.8.7 확인
2. rubygem 설치
- gem -v로 rubygem 이 설치되어 있는지 확인
- 설치되어 있지 않으면 http://rubyforge.org/frs/?group_id=126 에서 rubygems-1.8.25.zip 다운로드
- unzip 으로 압축 풀고, 해당 디렉토리에서 ruby setup.rb 실행
- 설치 후 실행파일 확인
- 만약 실행파일 이름이 gem1.8 로 되어 있으면 gem 으로 rename => 설치 마지막 부분에 뭐뭐 설치됐다 나오는데 실행파일 이름이 gem1.8 이더라구요..
3. emr CLI 설치
- http://aws.amazon.com/developertools/2264 가서 EMR ruby client 다운로드
- unzip 으로 압축풀고, credentials.json 파일 생성
- credentials.json 파일 내용 :
{
"access_id": "Your AWS Access Key
ID",
"private_key": "Your AWS Secret Access
Key",
"key-pair": "Your key pair name",
"key-pair-file": "The path and name of your PEM
file",
"log_uri": "A path to a bucket you own on
Amazon S3, such as, s3n://mylog-uri/",
"region": "The region of your cluster,
either us-east-1, us-west-2, us-west-1, eu-west-1, ap-northeast-1,
ap-southeast-1, ap-southeast-2, or sa-east-1"
}
---> 위 내용 중 region 이 좀 애매한데, access-key 가 접근할 수 있는 region 인지, 접근할 S3 bucket의 region 인지 아직 애매합니다.
특히 지금 나처럼 모든 region 에 접근해야 하는 버킷이 있는 경우에 어떻게 해야 하는지...
- key-pair-file 권한 조정 (chmod og-rwx mykeypair.pem)
- ./elastic-mapreduce --version 으로 버전 확인
- 여기까지 됐으면 일단 emr CLI는 설치 완료
여기까지 되었으면 이제 실행만 시키면 되는데,
우리는 Hadoop streaming 을 이용해 job 을 돌릴거라 아래처럼 명령을 날려줍니다.
./elastic-mapreduce --create --alive --stream --input
s3://버킷/backup/emr-temp/LogSample \
--mapper
s3://버킷/backup/emr-temp/mapper.py \
--reducer aggregate
\
--output s3://버킷/backup/emr-temp/out \
--log-uri
s3://버킷/ \
--region eu-west-1 \
--num-instances 5
--instance-type m1.xlarge
그리고 아래 명령으로 job 상태 확인 (오류가 났으면 원인이 뭔지를 찾아야 하는데.. CLI 상에서는 좀 짜증나네요)
./elastic-mapreduce --describe --jobflow j-15VXX2JUBHU5T --region eu-west-1
아래 명령은 해당 region 의 전체 jobflow 목록을 보여줍니다.
./elastic-mapreduce --list --region eu-west-1
이 밖에 수많은 옵션들은... 각자 필요할 때 찾아보시길 ㅎㅎ