HiiHahWIKI - making some notes for... -
Python:Hadoop:MapReduceサンプル
をテンプレートにして作成
開始行:
*Python:Hadoop:MapReduceサンプル [#y3cf2253]
HadoopのMapReduceのプログラムをHadoopStreamingを使ってPyt...
※CDH環境で実行してますので、実行時のパス等は適当に読み替...
Reducerの処理は一工夫必要だけど、簡単に書けます。
ログの集計とか、Hadoop使ってやるとほんと簡単に実行できる...
***処理対象データの一部 [#w1fb1b7a]
こんな感じのデータが入力で、時刻(分)単位のレスポンスタ...
■''test.txt''
#refpre(test.txt,,1);
:第一カラム|時刻(ミリ秒まで出力されている)
:第四カラム|レスポンスタイム(ミリ秒)
***ソース [#s43aec4d]
こんな感じです。
■''map.py''
#refpre(map.py,,1);
ほんとは、入力値チェックをして、エラーレコードを除外する...
■''reduce.py''
#refpre(reduce.py,,1);
reduceの方のコードのほうが、javaで実装するときと違ってひ...
詳細はしたの方で解説。。。
***まずはhadoopを使わないで動作確認 [#y866be9d]
3つのファイルを同じディレクトリにおいて、こんな感じで単体...
$ cat test.txt | python ./map.py | sort | python ./reduc...
2011/11/25-21:25 41
2011/11/26-02:00 32
2011/11/26-06:05 62
すると、各時刻(分)毎のレス分すタイムの平均値が出力され...
こんな感じで、お手軽に動作確認することができます。
ちなみに、hadoop-streamingでreduceに引き渡されるレコード...
具体的には
$ cat test.txt | python ./map.py | sort
の出力が引き渡されることになります。大体w
javaの場合は
-key毎のvalueのリストが渡されるため
-処理の中では「特定のkey」が引き渡される想定で処理を書け...
ですが、hadoop-streamingでは
-reduce側でも常に「key,value」のペアが引き渡されることに...
-reduce側で、複数種類のkeyが引き渡されることに注意
して実装する必要があります。
これを意識しての、ソースコードのポイント①~③です。
:ポイント①|まず、current_dateがkeyとして引き渡された時刻...
一致する場合は、同じ時刻ということで、総数のカウントアッ...
&br;
一致しない場合、最初のレコードか、もしくは引き渡されたkey...
:ポイント②|一致しなかった場合、current_dateが存在するかを...
&br;
存在する場合、keyが次のkeyに切り替わったこととなるため、...
&br;
また、初回にしろ、keyが切り替わったにしろ、そのキーの初回...
:ポイント③|このロジックで行くと、一番最後のkeyの集計値は...
文章だと非常にわかりにくいが、ポイント③以降を削除し実行す...
***Hadoopクラスタ上で実行 [#s4557883]
スクリプトを以下のディレクトリに格納し、
/home/mapred/tools/hadoop-streaming
データをhdfs上の以下のディレクトリに格納した場合、
/tmp/test1/input
hadoop-streamingの実行コマンドラインは以下のような形にな...
$ hadoop jar /usr/lib/hadoop/contrib/streaming/hadoop-st...
まあ、実行時の出力は以下の通り。
$ hadoop jar /usr/lib/hadoop/contrib/streaming/hadoop-st...
packageJobJar: [/home/mapred/tools/hadoop-streaming/map....
11/11/29 18:30:12 WARN util.NativeCodeLoader: Unable to ...
11/11/29 18:30:12 WARN snappy.LoadSnappy: Snappy native ...
11/11/29 18:30:12 INFO mapred.FileInputFormat: Total inp...
[GC 31872K->1712K(122304K), 0.0093920 secs]
11/11/29 18:30:13 INFO streaming.StreamJob: getLocalDirs...
11/11/29 18:30:13 INFO streaming.StreamJob: Running job:...
11/11/29 18:30:13 INFO streaming.StreamJob: To kill this...
11/11/29 18:30:13 INFO streaming.StreamJob: /usr/lib/had...
11/11/29 18:30:13 INFO streaming.StreamJob: Tracking URL...
11/11/29 18:30:14 INFO streaming.StreamJob: map 0% red...
11/11/29 18:30:28 INFO streaming.StreamJob: map 50% re...
11/11/29 18:30:32 INFO streaming.StreamJob: map 100% r...
11/11/29 18:30:41 INFO streaming.StreamJob: map 100% r...
11/11/29 18:30:42 INFO streaming.StreamJob: Job complete...
11/11/29 18:30:42 INFO streaming.StreamJob: Output: /tmp...
よくできましたw
***参考サイト [#bb2bb6df]
-http://www.michael-noll.com/tutorials/writing-an-hadoop-...
終了行:
*Python:Hadoop:MapReduceサンプル [#y3cf2253]
HadoopのMapReduceのプログラムをHadoopStreamingを使ってPyt...
※CDH環境で実行してますので、実行時のパス等は適当に読み替...
Reducerの処理は一工夫必要だけど、簡単に書けます。
ログの集計とか、Hadoop使ってやるとほんと簡単に実行できる...
***処理対象データの一部 [#w1fb1b7a]
こんな感じのデータが入力で、時刻(分)単位のレスポンスタ...
■''test.txt''
#refpre(test.txt,,1);
:第一カラム|時刻(ミリ秒まで出力されている)
:第四カラム|レスポンスタイム(ミリ秒)
***ソース [#s43aec4d]
こんな感じです。
■''map.py''
#refpre(map.py,,1);
ほんとは、入力値チェックをして、エラーレコードを除外する...
■''reduce.py''
#refpre(reduce.py,,1);
reduceの方のコードのほうが、javaで実装するときと違ってひ...
詳細はしたの方で解説。。。
***まずはhadoopを使わないで動作確認 [#y866be9d]
3つのファイルを同じディレクトリにおいて、こんな感じで単体...
$ cat test.txt | python ./map.py | sort | python ./reduc...
2011/11/25-21:25 41
2011/11/26-02:00 32
2011/11/26-06:05 62
すると、各時刻(分)毎のレス分すタイムの平均値が出力され...
こんな感じで、お手軽に動作確認することができます。
ちなみに、hadoop-streamingでreduceに引き渡されるレコード...
具体的には
$ cat test.txt | python ./map.py | sort
の出力が引き渡されることになります。大体w
javaの場合は
-key毎のvalueのリストが渡されるため
-処理の中では「特定のkey」が引き渡される想定で処理を書け...
ですが、hadoop-streamingでは
-reduce側でも常に「key,value」のペアが引き渡されることに...
-reduce側で、複数種類のkeyが引き渡されることに注意
して実装する必要があります。
これを意識しての、ソースコードのポイント①~③です。
:ポイント①|まず、current_dateがkeyとして引き渡された時刻...
一致する場合は、同じ時刻ということで、総数のカウントアッ...
&br;
一致しない場合、最初のレコードか、もしくは引き渡されたkey...
:ポイント②|一致しなかった場合、current_dateが存在するかを...
&br;
存在する場合、keyが次のkeyに切り替わったこととなるため、...
&br;
また、初回にしろ、keyが切り替わったにしろ、そのキーの初回...
:ポイント③|このロジックで行くと、一番最後のkeyの集計値は...
文章だと非常にわかりにくいが、ポイント③以降を削除し実行す...
***Hadoopクラスタ上で実行 [#s4557883]
スクリプトを以下のディレクトリに格納し、
/home/mapred/tools/hadoop-streaming
データをhdfs上の以下のディレクトリに格納した場合、
/tmp/test1/input
hadoop-streamingの実行コマンドラインは以下のような形にな...
$ hadoop jar /usr/lib/hadoop/contrib/streaming/hadoop-st...
まあ、実行時の出力は以下の通り。
$ hadoop jar /usr/lib/hadoop/contrib/streaming/hadoop-st...
packageJobJar: [/home/mapred/tools/hadoop-streaming/map....
11/11/29 18:30:12 WARN util.NativeCodeLoader: Unable to ...
11/11/29 18:30:12 WARN snappy.LoadSnappy: Snappy native ...
11/11/29 18:30:12 INFO mapred.FileInputFormat: Total inp...
[GC 31872K->1712K(122304K), 0.0093920 secs]
11/11/29 18:30:13 INFO streaming.StreamJob: getLocalDirs...
11/11/29 18:30:13 INFO streaming.StreamJob: Running job:...
11/11/29 18:30:13 INFO streaming.StreamJob: To kill this...
11/11/29 18:30:13 INFO streaming.StreamJob: /usr/lib/had...
11/11/29 18:30:13 INFO streaming.StreamJob: Tracking URL...
11/11/29 18:30:14 INFO streaming.StreamJob: map 0% red...
11/11/29 18:30:28 INFO streaming.StreamJob: map 50% re...
11/11/29 18:30:32 INFO streaming.StreamJob: map 100% r...
11/11/29 18:30:41 INFO streaming.StreamJob: map 100% r...
11/11/29 18:30:42 INFO streaming.StreamJob: Job complete...
11/11/29 18:30:42 INFO streaming.StreamJob: Output: /tmp...
よくできましたw
***参考サイト [#bb2bb6df]
-http://www.michael-noll.com/tutorials/writing-an-hadoop-...
ページ名: