hadoop streamingを使って お好きな言語でmap☆reduce!
TRANSCRIPT
![Page 1: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/1.jpg)
Hadoop Streamingを使ってお好きな言語でMap☆Reduce!
田地 将也
2016/05/19 LT資料
![Page 2: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/2.jpg)
• 氏名:田地将也(@otajisan)
• 所属:某中小SIer -> 某Web企業
• 役職:エンジニア兼スクラムマスター
• 趣味:酒、バンド、スノボー、モンハン
• よく使う言語:PHP, Perl, JavaScript
• 「アジャイルひよこくらぶ」というコミュニティの幹事メンバーやってます
• 最近ハマっていること!:スクラムによる現場改善、Python x Hadoop Streaming x Deep Learning
自己紹介
![Page 3: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/3.jpg)
皆さん、Hadoop使ってますか?
![Page 4: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/4.jpg)
Hadoopとは?
• Hadoopはデータを複数のサーバに分散し、並列して処理するミドルウェア
• 要は、1台で捌き切れないような大量のデータを、並列バッチ処理で効率よく捌けるソリューション
![Page 5: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/5.jpg)
Hadoopって
• なんか難しそう
• なんとなく敬遠
• Javaかよ!
みたいな
![Page 6: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/6.jpg)
そんなあなたに
![Page 7: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/7.jpg)
Hadoop
Streaming!
![Page 8: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/8.jpg)
Hadoop Streamingとは?
• HadoopのMap/Reduce処理は基本的にJavaで書く
• Hadoopに標準で組み込まれている「Hadoop Streaming」という機能を使うと、Unixの標準入出力を受け付けることができる
![Page 9: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/9.jpg)
つまり、好きな言語で
Map/Reduceを書ける!
![Page 10: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/10.jpg)
本LTでは、Hadoop Streamingは
色んな言語でMap/Reduce書けるよ、という様子をご紹介し、
Hadoop コワクナイヨ- という感覚を持っていただけることを目的とします。
![Page 11: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/11.jpg)
今回取り扱うサンプル(Hello World)
について
![Page 12: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/12.jpg)
HadoopのHello World
• 「ワードカウント」がHadoopでのハロワにあたります
![Page 13: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/13.jpg)
WordCout
aaa
bbb
ccc
aaa
bbb
ddd
bbb
ccc
ddd
入力ファイルたち
![Page 14: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/14.jpg)
WordCout
aaa
bbb
ccc
aaa
bbb
ddd
bbb
ccc
ddd
Map Reduce
Map
Map
Reduce
Reduce
shuffle
ごにょごにょ
![Page 15: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/15.jpg)
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!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/16.jpg)
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!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/17.jpg)
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!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/18.jpg)
書いてみた
![Page 19: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/19.jpg)
python
![Page 20: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/20.jpg)
WordCountMapper.py
![Page 21: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/21.jpg)
WordCountMapper.py
ここで標準入力を受け付けて
![Page 22: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/22.jpg)
WordCountMapper.py
ここで標準入力を受け付けて
該当行の文字列(例えばaaa)
と、1という数値を出力する
![Page 23: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/23.jpg)
WordCountReducer.py
![Page 24: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/24.jpg)
WordCountReducer.py
ここでMapperからの入力を受け付けて
![Page 25: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/25.jpg)
WordCountReducer.py
ここでMapperからの入力を受け付けて
渡ってきたkey: aaa value: 1
といった文字列を、key毎にvalueを加算する
![Page 26: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/26.jpg)
実行
![Page 27: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/27.jpg)
コマンドが長〜いのでシェルとか作るといいです
![Page 28: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/28.jpg)
作成したMapper/Reducerはこのへんに指定
![Page 29: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/29.jpg)
結果ファイルが出力されて
![Page 30: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/30.jpg)
結果
中身を見ると
![Page 31: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/31.jpg)
結果
正常にワードカウントされました!
![Page 32: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/32.jpg)
php
![Page 33: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/33.jpg)
WordCountMapper.php
![Page 34: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/34.jpg)
WordCountMapper.php
ここで標準入力を受け付けて
![Page 35: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/35.jpg)
WordCountMapper.php
ここで標準入力を受け付けて
該当行を出力
![Page 36: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/36.jpg)
WordCountReducer.php
![Page 37: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/37.jpg)
WordCountReducer.php
ここでMapperからの入力を受け付けて
![Page 38: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/38.jpg)
WordCountReducer.php
ここでMapperからの入力を受け付けて
渡ってきた文字列毎に単語数を加算
![Page 39: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/39.jpg)
結果は一緒なので割愛
![Page 40: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/40.jpg)
perl
![Page 41: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/41.jpg)
WordCountMapper.pl
もはやMapperなんか要らん!
![Page 42: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/42.jpg)
-mapperに/bin/catを指定すればおk
![Page 43: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/43.jpg)
WordCountReducer.pl
![Page 44: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/44.jpg)
WordCountReducer.pl
ここでMapperからの入力を受け付けて
![Page 45: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/45.jpg)
WordCountReducer.pl
ここでMapperからの入力を受け付けて
渡ってきた文字列毎に単語数を加算
![Page 46: Hadoop Streamingを使って お好きな言語でMap☆Reduce!](https://reader030.vdocuments.net/reader030/viewer/2022021508/5a6478b47f8b9a36568b461b/html5/thumbnails/46.jpg)
まとめ
• Hadoop Streamingを使えば、色んな言語でMap/Reduceを書ける(jsとかもできるらしい)
• お好きな言語で快適なHadoopライフを!