hadoop streamingを使って お好きな言語でmap☆reduce!

46
Hadoop Streamingを使って お好きな言語で MapReduce! 田地 将也 2016/05/19 LT資料

Upload: masaya-taji

Post on 21-Jan-2018

502 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

Hadoop Streamingを使ってお好きな言語でMap☆Reduce!

田地 将也

2016/05/19 LT資料

Page 2: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

• 氏名:田地将也(@otajisan)

• 所属:某中小SIer -> 某Web企業

• 役職:エンジニア兼スクラムマスター

• 趣味:酒、バンド、スノボー、モンハン

• よく使う言語:PHP, Perl, JavaScript

• 「アジャイルひよこくらぶ」というコミュニティの幹事メンバーやってます

• 最近ハマっていること!:スクラムによる現場改善、Python x Hadoop Streaming x Deep Learning

自己紹介

Page 3: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

皆さん、Hadoop使ってますか?

Page 4: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

Hadoopとは?

• Hadoopはデータを複数のサーバに分散し、並列して処理するミドルウェア

• 要は、1台で捌き切れないような大量のデータを、並列バッチ処理で効率よく捌けるソリューション

Page 5: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

Hadoopって

• なんか難しそう

• なんとなく敬遠

• Javaかよ!

みたいな

Page 6: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

そんなあなたに

Page 7: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

Hadoop

Streaming!

Page 8: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

Hadoop Streamingとは?

• HadoopのMap/Reduce処理は基本的にJavaで書く

• Hadoopに標準で組み込まれている「Hadoop Streaming」という機能を使うと、Unixの標準入出力を受け付けることができる

Page 9: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

つまり、好きな言語で

Map/Reduceを書ける!

Page 10: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

本LTでは、Hadoop Streamingは

色んな言語でMap/Reduce書けるよ、という様子をご紹介し、

Hadoop コワクナイヨ- という感覚を持っていただけることを目的とします。

Page 11: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

今回取り扱うサンプル(Hello World)

について

Page 12: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

HadoopのHello World

• 「ワードカウント」がHadoopでのハロワにあたります

Page 13: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCout

aaa

bbb

ccc

aaa

bbb

ddd

bbb

ccc

ddd

入力ファイルたち

Page 14: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCout

aaa

bbb

ccc

aaa

bbb

ddd

bbb

ccc

ddd

Map Reduce

Map

Map

Reduce

Reduce

shuffle

ごにょごにょ

Page 15: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCout

aaa

bbb

ccc

aaa

bbb

ddd

bbb

ccc

ddd

Map Reduce

Map

Map

Reduce

Reduce

shuffle

aaa 2

bbb 3

ccc 2

ddd 2

Page 16: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCout

aaa

bbb

ccc

aaa

bbb

ddd

bbb

ccc

ddd

Map Reduce

Map

Map

Reduce

Reduce

shuffle

aaa 2

bbb 3

ccc 2

ddd 2

ワードの出現回数をカウントする

Page 17: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCout

aaa

bbb

ccc

aaa

bbb

ddd

bbb

ccc

ddd

Map Reduce

Map

Map

Reduce

Reduce

shuffle

aaa 2

bbb 3

ccc 2

ddd 2

この、Map / Reduce処理を担う、「Mapper」と「Reducer」を

色々な言語で書くことができます!

Page 18: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

書いてみた

Page 19: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

python

Page 20: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountMapper.py

Page 21: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountMapper.py

ここで標準入力を受け付けて

Page 22: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountMapper.py

ここで標準入力を受け付けて

該当行の文字列(例えばaaa)

と、1という数値を出力する

Page 23: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountReducer.py

Page 24: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountReducer.py

ここでMapperからの入力を受け付けて

Page 25: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountReducer.py

ここでMapperからの入力を受け付けて

渡ってきたkey: aaa value: 1

といった文字列を、key毎にvalueを加算する

Page 26: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

実行

Page 27: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

コマンドが長〜いのでシェルとか作るといいです

Page 28: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

作成したMapper/Reducerはこのへんに指定

Page 29: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

結果ファイルが出力されて

Page 30: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

結果

中身を見ると

Page 31: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

結果

正常にワードカウントされました!

Page 32: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

php

Page 33: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountMapper.php

Page 34: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountMapper.php

ここで標準入力を受け付けて

Page 35: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountMapper.php

ここで標準入力を受け付けて

該当行を出力

Page 36: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountReducer.php

Page 37: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountReducer.php

ここでMapperからの入力を受け付けて

Page 38: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountReducer.php

ここでMapperからの入力を受け付けて

渡ってきた文字列毎に単語数を加算

Page 39: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

結果は一緒なので割愛

Page 40: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

perl

Page 41: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountMapper.pl

もはやMapperなんか要らん!

Page 42: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

-mapperに/bin/catを指定すればおk

Page 43: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountReducer.pl

Page 44: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountReducer.pl

ここでMapperからの入力を受け付けて

Page 45: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

WordCountReducer.pl

ここでMapperからの入力を受け付けて

渡ってきた文字列毎に単語数を加算

Page 46: Hadoop Streamingを使って お好きな言語でMap☆Reduce!

まとめ

• Hadoop Streamingを使えば、色んな言語でMap/Reduceを書ける(jsとかもできるらしい)

• お好きな言語で快適なHadoopライフを!