fc2ブログ

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サービスを作ろう!





関連記事
スポンサーサイト



コメントの投稿

管理者にだけ表示を許可する

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます
プロフィール

kumagonjp2

Author:kumagonjp2
Python,Django,R,Mongo,MySQL,Struts,Spring,データマイニングなどサーバー関係のメモを残していきます。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
雪が3Dで降るブログパーツ ver2

マウスで見る方向変えられます

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR