Top Banner
Hadoop 第2章 MapReduce Shinichiro Hasegawa
26

Hadoop 第2章

Oct 21, 2014

Download

Documents

hadoop本読書会の第2章を担当しました。
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Hadoop 第2章

Hadoop第2章MapReduce

Shinichiro Hasegawa

Page 2: Hadoop 第2章

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 コンパイルと実行

Page 3: Hadoop 第2章

おいらのもくじ

• 本書で扱っているシンプルなMapReduceモデル• スケールアウト• Hadoop用語• データフロー• 集約関数• Hadoopストリーミング

Page 4: Hadoop 第2章

本書で扱っているアメリカの気象データ

Page 5: Hadoop 第2章

各年の最高気温を求めたいシェルだとこんな感じ

シーケンシャルでループさせている⇛とても時間がかかる

Page 6: Hadoop 第2章

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

Page 7: Hadoop 第2章

スケールアウト

•いままでは、単一のノードで実行させた話

•ローカル以外でも実行させる為には、分散ファイルシステム(ex.HDFS等)が必要

Page 8: Hadoop 第2章

keyword #1

• job• クライアントが実行する作業単位• task• jobを分割したもの• mapタスクとreduceタスクがある

Page 9: Hadoop 第2章

keyword #2

• jobtracker• tasktracker群によって実行されるタスクをスケジューリングし、全体を管理

• クラスタに1つだけ• tasktrackerのタスクの処理に問題があれば、違うノードに割り振る

• tasktracker• タスクを実行し、進行状況のレポートをjobtrackerに送信する

Page 10: Hadoop 第2章

• 入力スプリット(単にスプリットとも)

• MapReduceジョブへの入力される、固定長の断片

• 各スプリットに対し、1つのmapタスクを生成。ユーザが定義したmap関数を、スプリット中の各レコードに対して実行

• データローカリティ最適化処理

• 「なるたけローカルのデータを処理するぜ」の意

• スプリットがHDFSに「実際に」格納されているノード上でmapタスクを実行しようとする。

• スプリットサイズは、HDFSのブロックサイズがベター

keyword #3

Page 11: Hadoop 第2章

単一のreduceタスクにおけるMapReduceデータフロー

ごめん><図が描けなかったので30pを参考にして!

Page 12: Hadoop 第2章

複数のreduceタスクを持つMapReduceデータフロー

またまた、ごめん><図が描けなかったので31pを参考にして!

Page 13: Hadoop 第2章

Hadoopストリーミング

Page 14: Hadoop 第2章

Hadoopストリーミングとは?

•標準入出力をインタフェースとする、map/reduce処理を書けるHadoopのAPI

•(書き方によっては)awkの7倍早い

Page 15: Hadoop 第2章

本書サンプルそのままでは面白く無いので

Page 16: Hadoop 第2章
Page 17: Hadoop 第2章

?!

Page 18: Hadoop 第2章

電力使用料推移(累計)のデータを処理してみることに

こちらで公開されているものですhttp://denki.cuppat.net/

Page 19: Hadoop 第2章

やること

•日にちごとの電力使用量ピークをリストアップ

•本文はjavaとpythonとrubyのサンプルがあったので、あえてperlで書いてみる

Page 20: Hadoop 第2章

元データ

Page 21: Hadoop 第2章

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 }

Page 22: Hadoop 第2章

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";

Page 23: Hadoop 第2章

テスト実行$ cat all.csv |perl map.pl |sort |perl reduce.pl20110323,375020110324,385020110325,375020110326,370020110327,3700...

Page 24: Hadoop 第2章

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

• ↑しかし、これはなぜかこける・・・

Page 25: Hadoop 第2章

まとめ•MapReduce(自体)は、難しいことをしなければ簡単です

•テストコードの対象をaccess_log解析にすればよかったと、書いてから後悔したので、そのうちやります

•ちゃんと動かない件も調べます。。。

Page 26: Hadoop 第2章

おしまい