Post on 21-Oct-2014
description
2章のもくじ2章 MapReduce 2.1 気象情報データセット 2.1.1 データフォーマット 2.2 Unixのツールによるデータ分析 2.3 Hadoopによるデータの分析 2.3.1 mapとreduce 2.3.2 Java MapReduce 2.4 スケールアウト 2.4.1 データフロー 2.4.2 集約関数 2.4.3 分散MapReduceジョブの実行 2.5 Hadoopストリーミング 2.5.1 Ruby 2.5.2 Python 2.6 Hadoop Pipes 2.6.1 コンパイルと実行
MapReduceでの処理
03329088...58203845...85904380...80438509...
(000,039088...)(106,520385...)(212,043180...)(424,381509...)
(1950,00)(1950,22)(1950,01)(1944,23)(1943,30)
(1950,[0,22...])(1944,[23,-1,...])(1943,[30,4,...])
(1949,111)(1950,22)
1949,1111950,22
key行番号
value
| map | sort | reduceinput(cat) > output
keyword #2
• jobtracker• tasktracker群によって実行されるタスクをスケジューリングし、全体を管理
• クラスタに1つだけ• tasktrackerのタスクの処理に問題があれば、違うノードに割り振る
• tasktracker• タスクを実行し、進行状況のレポートをjobtrackerに送信する
• 入力スプリット(単にスプリットとも)
• MapReduceジョブへの入力される、固定長の断片
• 各スプリットに対し、1つのmapタスクを生成。ユーザが定義したmap関数を、スプリット中の各レコードに対して実行
• データローカリティ最適化処理
• 「なるたけローカルのデータを処理するぜ」の意
• スプリットがHDFSに「実際に」格納されているノード上でmapタスクを実行しようとする。
• スプリットサイズは、HDFSのブロックサイズがベター
keyword #3
map.pl 1 use strict; 2 use warnings; 3 4 while (chomp(my $line = <STDIN>) ) { 5 my ($date,@s) = split(/,/,$line); 6 foreach my $s (@s) { 7 print "$date,$s\n"; 8 } 9 }
reduce.pl 1 use strict; 2 use warnings; 3 4 my $flag = 0; 5 my $date2 = ""; 6 my $value2 = ""; 7 while (my $line = <STDIN> ) { 8 my (my $date,my $value) = split(/,/,$line); 9 10 if($flag == 0){ 11 $date2 = $date; 12 $value2 = $value; 13 } 14 15 if($date2 == $date){ 16 if($value2 < $value){ 17 $value2 = $value; 18 } 19 } else { 20 print "$date2,$value2"; 21 $date2 = $date; 22 $value2 = 0; 23 } 24 $flag = 1; 25 } 26 print "$date2,$value2";
テスト実行$ cat all.csv |perl map.pl |sort |perl reduce.pl20110323,375020110324,385020110325,375020110326,370020110327,3700...
Hadoopにて実行• 解析対象ファイルを配置
• # hadoop dfs -put /tmp/all2.csv /usr
• 解析の実行
• # hadoop jar /usr/lib/hadoop/contrib/streaming/hadoop-streaming-0.20.2-CDH3B4.jar -input /usr/all2.csv -output /usr/result4.txt -mapper /usr/bin/perl /tmp/map.pl -reducer /usr/bin/perl /tmp/reduce.pl -inputformat TextInputFormat -file /tmp/map.pl -file /tmp/reduce.pl
• ↑しかし、これはなぜかこける・・・
まとめ•MapReduce(自体)は、難しいことをしなければ簡単です
•テストコードの対象をaccess_log解析にすればよかったと、書いてから後悔したので、そのうちやります
•ちゃんと動かない件も調べます。。。