2012-03-03(Sat)
Amazon EC2でElastic MapReduceを使う:準備(1)
AmazonのEMRを使ってみたのでメモっておく。
- あらかじめインストールしておくもの
$ sudo aptitude install openssh-server
$ sudo aptitude install openjdk-6-jdk
$ sudo aptitude install ruby-full
- ダウンロードして設定するもの
-- S3sync設定
http://s3sync.net/wiki
$ curl -O http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
$ tar xzvf s3sync.tar.gz
$ mv s3sync/ /usr/local/
$ sudo cp /usr/local/s3sync/s3config.yml.example /usr/local/s3sync/s3config.yml
$ sudo vim /usr/local/s3sync/s3config.yml
aws_access_key_id: 11111111 (EC2_ACCESSKEYを設定する)
aws_secret_access_key: 22222222 (EC2_SECRET_ACCESSKEYを設定する)
ssl_cert_dir: /home/user/s3sync/certs
$ vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export EC2_HOME=/usr/local/ec2-api-tools
export EC2_APITOOL_HOME=$EC2_HOME
export EC2_AMITOOL_HOME=/usr/local/ec2-ami-tools
export PATH="$PATH":$JAVA_HOME/bin
export PATH="$PATH":$EC2_HOME/bin
export EC2_PRIVATE_KEY=$HOME/pairkey/pk-***.pem
export EC2_CERT=$HOME/pairkey/cert-***.pem
export EC2_ACCESSKEY=*************
export EC2_OWNER_ID=****-****-****
export EC2_SECRET_ACCESSKEY=************************************
export AWS_ACCESS_KEY_ID=$EC2_ACCESSKEY
export AWS_SECRET_ACCESS_KEY=$EC2_SECRET_ACCESSKEY
EMR_HOME=/usr/local/elastic-mapreduce
export PATH="$PATH":$EMR_HOME
S3SYNC_HOME=/usr/local/s3sync
export PATH="$PATH":$S3SYNC_HOME
export AWS_CALLING_FORMAT="SUBDOMAIN"
(反映)
$ source ~/.bashrc
(動作確認)
$ /usr/local/s3sync$ s3cmd.rb list bucketname:
-- elastic-mapreduce設定
$ sudo mkdir /usr/local/elastic-mapreduce
$ cd /usr/local/elastic-mapreduce
$ curl -O http://elasticmapreduce.s3.amazonaws.com/elastic-mapreduce-ruby.zip
$ unzip elastic-mapreduce-ruby.zip
$ vim /usr/local/elastic-mapreduce/credentials.json
{
"access-id": "**************", -->(Access ID)
"private-key": "*************************************************", -->(Secret ID)
"key-pair": "hadoop-master",
"key-pair-file": "/usr/local/elastic-mapreduce/hadoop-master.pem", -->(instance生成時でのpemファイル)
"log-uri": "s3://emr/samples/logs/",
"region": "ap-northeast-1"
}
- mapper, reducerを作成
mapper.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
def main():
try:
line = sys.stdin.readline()
while line:
line = line.strip()
fields = line.split("\t")
print "%s\t%s" % (fields[0], 1)
line = sys.stdin.readline()
except Exception, e:
raise
if __name__ == "__main__":
main()
reducer.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
cnt = {}
def main():
global cnt
line = sys.stdin.readline()
try:
while line:
line = line.strip()
key, value = line.split("\t")
if not cnt.has_key(key):
cnt[key] = 0
cnt[key] += 1
line = sys.stdin.readline()
except Exception, e:
print(e)
raise
if __name__ == "__main__":
main()
for k, v in cnt.iteritems():
print "%s\t%s" % (str(k) , str(v))
InputFileを適当に作る。(test.csvつまりcsv形式、間隔はタブ)
ディレクトリは/usr/local/elastic-mapreduce/samples/inputの下。
aa 11
bb 22
aa 13
bb 41
cc 15
dd 16
bb 27
cc 83
ee 29
dd 50
aa 21
※mapper.py reducer.pyのデバッグ方法は以下のとおり。
テスト用のログをdummy_log.txtとするとこうなる。
$ cat dummy_log.txt | python mapper.py | python reducer.py
S3と同期開始
/usr/local/elastic-mapreduce/samplesディレクトリにmapper, reducerを作った。
これをS3へsamplesディレクトリごとアップする。
$ ruby /usr/local/s3sync/s3sync.rb -r --delete /usr/local/elastic-mapreduce/samples backetname:
参考:
Amazon EC2 MapReduce FAQ
Amazon EC2 Word Count Exzmple
クラウド Amazon EC2/S3のすべて~実践者から学ぶ設計/構築/運用ノウハウ~ (ITpro BOOKs)
Amazon Web Services ガイドブック クラウドでWebサービスを作ろう!
- 関連記事
-
- Amazon EC2でAMIを生成させる
- Amazon EC2でElastic MapReduceを使う:起動(2)
- Amazon EC2でElastic MapReduceを使う:準備(1)
スポンサーサイト