*Python:Hadoop:MapReduceサンプル [#y3cf2253]
HadoopのMapReduceのプログラムをHadoopStreamingを使ってPythonで書いてみました。
Reducerの処理は一工夫必要だけど、簡単に書けます。
ログの集計とか、Hadoop使ってやるとほんと簡単に実行できるなーと実感した限りです。
***処理対象データの一部 [#w1fb1b7a]
こんな感じのデータが入力で、時刻(分)単位のレスポンスタイムの平均を求めたいです。
2011/11/25-21:25:58.900,/mnt/dfs/da/C/0/000/007,4096,32
2011/11/25-21:25:58.931,/mnt/dfs/da/C/0/000/008,4096,28
2011/11/25-21:25:58.960,/mnt/dfs/da/C/0/000/009,4096,24
2011/11/25-21:25:58.988,/mnt/dfs/da/C/0/000/010,4096,25
・・・・
2011/11/26-02:00:07.704,/mnt/dfs/da/C/0/262/145,8192,32
2011/11/26-02:00:07.754,/mnt/dfs/da/C/0/262/146,8192,32
2011/11/26-02:00:07.803,/mnt/dfs/da/C/0/262/147,8192,32
2011/11/26-02:00:07.855,/mnt/dfs/da/C/0/262/148,8192,34
・・・・
2011/11/26-06:05:03.007,/mnt/dfs/da/C/0/458/759,16384,62
2011/11/26-06:05:03.118,/mnt/dfs/da/C/0/458/760,16384,64
2011/11/26-06:05:03.224,/mnt/dfs/da/C/0/458/761,16384,56
・・・・
:第一カラム|時刻(ミリ秒まで出力されている)
:第四カラム|レスポンスタイム(ミリ秒)
***ソース [#s43aec4d]
こんな感じです。
■Map.py
#!/usr/bin/env python
import sys
# input comes from STDIN (standard input)
for line in sys.stdin:
line = line.strip()
data = line.split(",")
print '%s\t%s' % (data[0][0:16],data[3])
■