cloudspiral 2014年度 ビッグデータ講義

107
Cloud Specialist Program Initiative for Reality-based Advanced Learning 分野・地域を越えた実践的情報教育協働ネットワーク ビッグデータ講義 神戸大学 まつ本 真佑 佐伯 幸郎

Upload: shin-matsumoto

Post on 14-Jul-2015

528 views

Category:

Education


0 download

TRANSCRIPT

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク

ビッグデータ講義

神戸大学

まつ本 真佑

佐伯 幸郎

柗本 真佑まつしん

@shinsuke_mat

シュノーケリング

メタル・ロック

プログラミング

まつしん

柗本 真佑

@shinsuke_mat

シュノーケリング

メタル・ロック

プログラミング

2014 @Grand Canyon, US

100GBのデータあるけど明日までに分析できるよね

AWS使ってやっときます

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 5

ビッグデータの処理方法を修得する Hadoop/MapReduceプログラミング

分散処理の基礎• 集計等

• 機械学習

• 統計処理

• ・・・

AWSを使ったHadoop環境立ち上げ

MRの投入

講義の目標

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 6

アルゴリズム系講義 MR座学 → MRゲーム & 思考 → MRプログラミング

プログラミングは本質ではない プログラムはアルゴリズムを表現する方法の一つ

まずはMapReduceアルゴリズムを理解することが重要

教え合い歓迎,教員へのヘルプも歓迎 Tryチームビルディング

TAをこき使ってください

3コマでおもろい・おいしい部分だけを教えます

留意点

ビッグデータビッグデータの定義

事例紹介

Hadoop/MapReduce誕生の背景

Hadoop概要

MapReduce概要

MapReduceゲーム 演

POSデータマイニング 演

EMRトライアル 演

重要なこと諸々

ビッグデータビッグデータの定義

事例紹介

Hadoop/MapReduce誕生の背景

Hadoop概要

MapReduce概要

MapReduceゲーム 演

POSデータマイニング 演

EMRトライアル 演

重要なこと諸々

Big Data?

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 11

ビッグデータ = 3Vを満たすデータのこと

Volume (量) Variety (種類) Velocity (速度)

t

t

Big Data (3V)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 12

Amazon 大量の購入履歴・閲覧履歴を使った宣伝 (推薦システム)

国土交通省 橋に大量のセンサーを設置

• ひずみ,振動,劣化状況…

交通インフラの老朽化を迅速に察知

ビッグデータの活用事例 1/2

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 13

貧乏&弱小球団 アスレチックス データに基づくチーム作成

• 選手の能力をデータ化,コスパの良い選手をスカウト

経験や勘によるバイアスを完全に排除• 才能がある,今後伸びる,フォームが悪い

オバマ大統領 データに基づく選挙キャンペーン

• 「オバマだけど質問ある?」 @Reddit

ビッグデータの活用事例 2/2

* http://www.reddit.com/comments/z1c9z

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 14

3Vを満たすデータ データを計測して分析し,そこから価値を生む行為

意味のない議論 何GBあれば/何種類あればビッグデータなのか?

基本はデータ計測とデータマイニング 巨大になりがちなので工夫が必須

意味の変わりつつある 「ビッグデータ」

講義のポイント

対象

データを活用した取り組み

ビッグデータビッグデータの定義

事例紹介

Hadoop/MapReduce誕生の背景

Hadoop概要

MapReduce概要

MapReduceゲーム 演

POSデータマイニング 演

EMRトライアル 演

重要なこと諸々

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 16

何でもデータ化できる時代

メールGPS温度湿度加速度

会員情報アクセスログサービス利用状況

card電子マネー履歴POS履歴

つぶやき写真動画

交通状況道路状況橋の状態

DaaS起動時間学習状況受講アンケートコミットログ開発進捗状況

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 17

ストレージの低価格化・大容量化

NoSQLの登場 RDBは高機能なクエリ言語(SQL)を持つが大量データに弱い

SQLやDBとしての厳格さを捨てる代わりに高速化・大規模化

何でも蓄積できる時代

$0.01

$1.00

$100.00

$10,000.00

$1,000,000.00

1970 1980 1990 2000 2010 2020

1GB当たりのHDDの値段*

¥5¥1,000,000

* http://www.statisticbrain.com/average-cost-of-hard-drive-storage/

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 18

蓄えたデータをどう処理するか?

どう処理するか?

generating storing mining

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 19

検索エンジンは正にビッグデータ処理

Googleの場合

web pages indexweb

crawlingindexing/

page ranking

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 21

検索エンジンは正にビッグデータ処理

Googleの場合

20,000,000,000,000,000 bytes / day !*

20PB.1台のHDD (SATA3接続) だと読み込みだけで400日弱

web pages indexweb

crawlingindexing/

page ranking

20PBをどう処理するか?

* J. Dean and S. Ghemawat, MapReduce: simplified data processing on large clusters, Comm. ACM, vol.51, no.1, pp107-113, 2008

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 22

100台で処理すれば100倍の速度! 複数マシンで分散処理すればよい

分散しよう

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 23

100台で処理すれば100倍の速度! 複数マシンで分散処理すればよい

• 複数台並べて高速化

• マシンの性能を上げて高速化

分散しよう

世の中の潮流はこっちスケールアウト

スケールアップ (補足)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 24

分散環境の管理 障害をどう検知するか?

ファイルをどう分散配置するか?

タスクをどうスケジューリングするか?

プログラムの開発 データのどこからどこまでをどのワーカが担当するか?

ワーカの同期をどうするか?

処理中にワーカが故障したときにどうするか?

開発者が処理の本質以外を気にかける必要あり

分散処理は難しい

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 25

1~10000の総和を並列計算するプログラム

(参考) FortranとMPIによる分散処理

program sumnuse mpiimplicit noneinteger :: n,i,istart,iend,isum,isum1integer :: nprocs,myrank,ierrcall mpi_init(ierr)call mpi_comm_size(MPI_COMM_WORLD,nprocs,ierr)call mpi_comm_rank(MPI_COMM_WORLD,myrank,ierr)if (myrank==0) n=10000call mpi_bcast(n,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr)istart=n*myrank/nprocs+1iend=n*(myrank+1)/nprocsisum=0do i=istart, iend

isum=isum+iend docall mpi_reduce(isum,isum1,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,ierr)if (myrank==0) print *, 'sum =', isum1call mpi_finalize(ierr)

end program sumn

本質データのどこからどこまでをだれが担当するかを決める

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 26

大規模データの分散処理フレームワーク =MapReduceを実行するためのフレームワーク

分散処理の難しさを軽減してくれる

開発者を処理の本質に集中させる

手軽でオープンな分散処理環境

高い実績 Yahoo!, Facebook, IBM, Last.fm, ・・・

2つの主要コンポーネント HDFS & MapReduce

Hadoop

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 27

HDFSでデータを分散配置

MapReduceでデータを分散処理

Hadoop全体像

Map Reduce

Map Reduce

Map Reduce

Map Reduce

Map Reduce

Shuffle

データ

結果

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 28

HDFSでデータを分散配置

MapReduceでデータを分散処理

Hadoop全体像

Map Reduce

Map Reduce

Map Reduce

Map Reduce

Map Reduce

Shuffle

データ

結果

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 29

HDFSでデータを分散配置

MapReduceでデータを分散処理

Hadoop全体像

Map Reduce

Map Reduce

Map Reduce

Map Reduce

Map Reduce

Shuffle

データ

結果

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 30

分散データを処理するプログラミングモデル 開発者は Mapper と Reducer を定義するだけでよい

全てのワーカで同じMapperとReducerが実行される

MapperとReducer

• KeyとValueを受け取り,複数のKey’とValue’のペアを出力する関数

単純で汎用的 MとRだけで分散処理を実現

複雑な処理をしたい場合は? → MRを複数組み合わせる

MapReduce

map(key, value) → [{key’, value’}]reduce(key, value) → [{key’, value’}]

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 31

MapReduceの流れ (ワードカウントの場合)

説明題材 テキストデータのワードカウント (単語の数え上げ) をする

dog dog dog catdog catpig fox

{dog, 4}

{cat, 2}

{pig, 1}

{fox, 1}

Hadoop(MapReduce)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 32

MapReduceの流れ (ワードカウントの場合)

dog dog dog cat

{dog, 1}

dog catfox pig

{dog, 1}

{dog, 1}

{cat, 1}

{dog,[1,1,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 33

MapReduceの流れ (ワードカウントの場合)

dog dog dog cat

{dog, 1}

dog catfox pig

{dog, 1}

{dog, 1}

{cat, 1}

{dog,[1,1,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

HDFSがデータを分散配置(ワーカー2台)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 34

MapReduceの流れ (ワードカウントの場合)

dog dog dog cat

{dog, 1}

dog catfox pig

{dog, 1}

{dog, 1}

{cat, 1}

{dog,[1,1,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

key value

入力={バイト数, テキスト1行} 出力={単語, 1}

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 35

MapReduceの流れ (ワードカウントの場合)

dog dog dog cat

{dog, 1}

dog catfox pig

{dog, 1}

{dog, 1}

{cat, 1}

{dog,[1,1,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

key value

入力={バイト数, テキスト1行}

Map(String key, String value)for each word w in valueemit(w, 1);

出力={単語, 1}

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 36

MapReduceの流れ (ワードカウントの場合)

dog dog dog cat

{dog, 1}

dog catfox pig

{dog, 1}

{dog, 1}

{cat, 1}

{dog,[1,1,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

同じKeyのデータがまとめられる

(Shuffle)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 37

MapReduceの流れ (ワードカウントの場合)

dog dog dog cat

{dog, 1}

dog catfox pig

{dog, 1}

{dog, 1}

{cat, 1}

{dog,[1,1,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

同じKeyのデータがまとめられる

Shuffle(String key, String value)定義いらず

(Shuffle)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 38

MapReduceの流れ (ワードカウントの場合)

dog dog dog cat

{dog, 1}

dog catfox pig

{dog, 1}

{dog, 1}

{cat, 1}

{dog,[1,1,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

出力={単語, 出現回数}

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 39

MapReduceの流れ (ワードカウントの場合)

dog dog dog cat

{dog, 1}

dog catfox pig

{dog, 1}

{dog, 1}

{cat, 1}

{dog,[1,1,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

出力={単語, 出現回数}

Reduce(String key, Iterator values)sum = 0;for each v in valuessum += v; //sum += 1 でも同じ

emit(key, sum)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 40

別解を考える

dog dog dog cat

{dog, 1}

dog catfox pig

{dog, 1}

{dog, 1}

{cat, 1}

{dog,[1,1,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 41

別解を考える

dog dog dog cat

{dog, 2}

dog catfox pig

{dog, 1}

{cat, 1}

{dog,[2,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 42

別解を考える

dog dog dog cat

{dog, 2}

dog catfox pig

{dog, 1}

{cat, 1}

{dog,[2,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

Map(String key, String value)for each word w in valuehash[w]++;

for each key w in hashemit(w, hash[w]);

Map(String key, String value)for each word w in valueemit(w, 1);

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 43

別解を考える

dog dog dog cat

{dog, 2}

dog catfox pig

{dog, 1}

{cat, 1}

{dog,[2,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

Map(String key, String value)for each word w in valuehash[w]++;

for each key w in hashemit(w, hash[w]);

Map(String key, String value)for each word w in valueemit(w, 1);

・ コード複雑さ: M ↑ R -・ 処理速度: M ↓ R ↑・ 通信量: 削減・ MでOutOfMemoryErrorの恐れあり

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 44

さらに別解を考える

dog dog dog cat

{dog, 1}

dog catfox pig

{dog, 1}

{dog, 1}

{cat, 1}

{dog,[1,1,1,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 45

さらに別解を考える

dog dog dog cat

dog catfox pig

{dog, 3}

{cat, 1}

{dog,[3,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 46

さらに別解を考える

dog dog dog cat

dog catfox pig

{dog, 3}

{cat, 1}

{dog,[3,1]}

{dog, 1}

{cat, 1}

{pig, 1}

{fox, 1}

{cat, [1,1]}

{dog, 4}

S

{0, dog dog}

{16, dog cat}

{8, dog cat}

{24, pig fox}{pig, [1]}

{fox, [1]}

{cat, 2}

{pig, 1}

{fox, 1}

M R

dog dog dog catdog catpig fox

複数の{key, value}をまたがった処理はひとまず禁止(実際は可能,後述)

ビッグデータビッグデータの定義

事例紹介

Hadoop/MapReduce誕生の背景

Hadoop概要

MapReduce概要

MapReduceゲーム 演

POSデータマイニング 演

EMRトライアル 演

重要なこと諸々

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 48

トランプの記号ごとの出現回数を数えよう

意味づけ

演習1: MapReduceゲームクソゲー

♥ 30♦ 42♣ 38♠ 20

♥♠♥♠◎♠♠♥☂◎♥♠☆♥☆♥◎☂♣♣☆♣♥♪♣♥♣☆♣♪♣♣♥♥♥♪☂☂♣☂◎☂◎◎♦♪♣♪☂♪♪◎♣・・・

処理対象のデータ 結果

♥4 {♥, 4}

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 49

Hadoop環境のセットアップ HDFSのリーダー (NameNode) を決める

全ワーカーにIDを降る (1~6)

ステップ0. 準備

1 2 3 4 5 6

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 50

Hadoopへのデータ投入 Hadoop利用者がNameNodeへデータを投入する

NameNodeはデータを分割して振り分ける• 4行ずつ分割.上から順にワーカ1から6に振り分ける

• 余りもワーカ1から順に渡す

ステップ0. 準備

♥♠♥♠◎♠♠♥☂◎♥♠☆♥☆♥◎☂♣♣☆♣♥♪♣♥♣☆♣♪♣♣♥♥♥♪☂☂♣☂◎☂◎◎♦♪♣♪☂♪♪◎♣

♣◎♣♦♦♦♦♣♪♣♣♦♣☆♪☆☆☆♣◎♣♣☆◎☂◎☂☆☆☆☂◎☆☆♪◎☂☂♪☂☆♦♦◎♦◎♦☂♦◎☆☆◎◎♪♦♦

♪♪☂♣♣◎☆☂♪♪♣☆☂♣☂◎♪♣☂☆♣☂◎♥☆☂◎♥◎☆☂☂♪☂☂♥☂☂♦♦♦♦☂◎♪♪◎☆♦☆☂☂♪♦

1

2

3

♥♠♥♠◎♠♠♥☂◎♥♠☆♥☆♥◎☂♣♣☆♣♥♪♣♥♣☆♣♪♣♣♥♥♥♪☂☂♣☂◎☂◎◎♦♪♣♪☂♪♪◎♣♣◎♣♦♦♦♦♣♪♣♣♦♣☆♪☆☆☆♣◎♣♣☆◎☂◎☂☆☆☆☂◎☆☆♪◎☂☂♪☂☆♦♦◎♦◎♦☂♦◎☆☆◎◎♪♦♦♪♪☂♣♣◎☆☂♪♪♣☆☂♣☂◎♪♣☂☆♣☂◎♥☆☂◎♥◎☆☂☂♪☂☂♥☂☂♦♦♦♦☂◎♪♪◎☆♦☆☂☂♪♦♪☂♣♥☂♣♥♥♥♥♣☆♣♣♥♥♥♥

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 51

全ワーカはMapperを実行する 上から順に一行ずつMap処理すること

処理結果はトランプのカード で表すこと

処理結果は手元に

ステップ1. Mapフェーズ

♥♠♥♠◎♠♠♥☂◎♥♠☆♥☆♥◎☂♣♣☆♣♥♪♣♥♣☆♣♪♣♣♥♥♥♪☂☂♣☂◎☂◎◎♦♪♣♪☂♪♪◎♣

♥6 ♠5

♥5 ♣8

♦1 ♣3

♦4♦4♦4

Map(String key, String value)for each suit w in valueif(!isSuit(w)) continue;hash[w]++;

for each key w in hashemit(w, hash[w]);

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 52

同一Keyをまとめる

データを交換する 交換ルール: ♥ワーカ2 ♦ワーカ5 ♠ワーカ3 ♣ワーカ4

ステップ2. Shuffleフェーズ

♥4 ♠5

♦1 ♣3

♥J ♠3

♦9 ♣3

2

♥4

♥4♥4♥4♥4♥4♥4♥4♠5♥4♥4

♥6 ♥3 ♠1

♥4 ♥J

♥6 ♥3♥1

♥8 ♥J

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 53

手持ちのデータの総和を計算する

ステップ3. Reduceフェーズ

2

♥4♥4♥4♥4♥4♥4♥4♥4♥=30

Reduce(String key, Iterator values)sum = 0;for each v in valuessum += v;

emit(key, sum)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 54

MapReduceゲームの流れ (再確認)

{♥, 30}

{0, ♥♠♥♠◎}

{16, ♣◎♣♥♥}

{8, ◎☂♣♣☆}

{24, ☆◎☂◎☂}

M R

♥♠♥♠◎◎☂♣♣☆♪☂☂♣☂

♥♠♥♠◎◎☂♣♣☆♪☂☂♣☂♣◎♣♥♥☆◎☂◎☂♦♦◎♦◎♪♪☂♣♣☂◎♥☆☂♦♦♦♦☂♪☂♣♥☂

♣◎♣♥♥☆◎☂◎☂♦♦◎♦◎

♥2

♠2

♣2

♥2♥2♥2♥2

♣2♣2♣2♣2 {♣, 30}

♥2

♣2

S

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 55

以下のMRアルゴリズムを考えよう トランプの記号ごとの出現回数をカウントする (MRゲームと同じ)

ただし,偶数行と奇数行ごとにカウントすること• データには行番号が記述されているものとする

演習2: MRアルゴリズムを考えよう

1 ♥♠♥♠◎♠♠♥☂◎♥♠☆♥☆♥2 ◎☂♣♣☆♣♥♪♣♥♣☆♣♪♣♣♥♥♥3 ♪☂☂♣☂◎☂◎◎♦♪♣♪☂♪♪◎♣4 ・・・

偶数行 奇数行♥ 9 8♦ 13 9♣ 5 16♠ 2 15

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 56

以下処理フローの を埋めてみよう

考え方

M

R

S

{ , }

{ , }

{ , }

{ , }

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 57

MRゲームの場合

M

R

S

{ , }

♥ [2,3,5,1]

記号 [出現回数]

{ , }

♥ 2♠ 2

記号 出現回数

{ , }

♥ 11

記号 総数

{ , }

0 ♥♠♥♠◎☆

バイト数 テキスト

記号4種類をそれぞれ数える記号ごとに回数をemitする

総和を取って記号と共にemitする

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 58

演習2: 回答a

{ , }

♥奇 [2,3,5,1]

記号+偶奇 [出現回数]

{ , }

♥奇 2♠奇 2

記号+偶奇 出現回数

{ , }

♥奇 11

記号+偶奇 総数

{ , }

0 ♥♠♥♠◎☆

バイト数 テキスト

Map(String key, String value)if (value[0] % 2 == 0)label = “偶”;

elselabel = “奇”;

for each suit w in valuehash[w]++;

for each key w in hashemit(w + label, hash[w]);

{♥偶, 2} (Mapperの出力より)

パターン名 答

M

R

S

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 59

演習2: 回答b

{ , }

♥奇 [1,1,1,1,1,1]

記号+偶奇 [出現回数]

{ , }

♥奇 1♥奇 1♠奇 1

記号+偶奇 出現回数

{ , }

♥奇 11

記号+偶奇 総数

{ , }

0 ♥♠♥♠◎☆

バイト数 テキストMap(String key, String value)if (value[0] % 2 == 0)label = “偶”;

elselabel = “奇”;

for each key w in valueemit(w + label, 1);

{♥偶, 1}

パターン名 答

M

R

S

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 60

演習2: 回答c

M

R

S

{ , }

♥ [奇,奇,奇,偶]

記号 [偶奇]

{ , }

♥ 奇♠ 奇

記号 偶奇

{ , }

♥奇 11♥偶 4

記号+偶奇 総数

{ , }

0 ♥♠♥♠◎☆

バイト数 テキストMap(String key, String value)if (value[0] % 2 == 0)label = “偶”;

elselabel = “奇”;

for each suit w in valueemit(label, w);

答{♥, 奇}

パターン名

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 61

演習2: 回答c

M

R

S

{ , }

奇 [♥,♠,♥,...]

偶数 [出現回数]

{ , }

奇 ♥奇 ♠

偶奇 記号

{ , }

♥奇 11♠奇 2

記号+偶奇 総数

{ , }

0 ♥♠♥♠◎☆

バイト数 テキストMap(String key, String value)if (value[0] % 2 == 0)label = “偶”;

elselabel = “奇”;

for each suit w in valueemit(w, label);

答{奇, ♥}

パターン名

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 62

回答a, b, c, dの違いを考えよう 回答a

回答b

回答c

回答d

考えるポイント (一例) MapとReduceそれぞれについて

• プログラミングの難しさは?

• 処理の分散効率は?

Shuffleで発生する通信量は?

・・・

演習3: さらに考えてみよう

{♥偶, 2}

{♥, 偶}

{偶, ♥}

{♥偶, 1}

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 63

mapper実装難度 b = c = d < a

mapper速度 b = c = d > a

shuffle通信量 a < b = c = d

reducer実装難度 a = b = c = d

reducer並列化効率 a = b > c > d理由: reducerに渡るKeyの種類

a = 8 (スーツ4 x 偶奇2)

b = 8 (スーツ4 x 偶奇2)

c = 4 (スーツ4)

d = 2 (偶奇2)

演習3: 回答

{♥偶, 2}

{♥, 偶}

{偶, ♥}

{♥偶, 1}

回答a

回答b

回答c

回答d

答badgood

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 64

日別のおにぎりの売上額を求めるMRを考えよう

演習4: POSデータ処理を考えよう

レシートID yyyy mm dd 商品名 分類名 個数 値段

123456 2014 9 1梅おにぎり おにぎり 2 105

123456 2014 9 1六甲の水 飲料水 4 130

123456 2014 9 1歯ブラシ 日用品 1 298

222222 2014 9 1メロンパン 菓子パン 1 105

222222 2014 9 1無糖ブラック 飲料水 1 90

990777 2014 9 2明太子おにぎり おにぎり 3 105

990777 2014 9 2コーラ 飲料水 1 130

693200 2014 9 3大阪の水 飲料水 1 105

693200 2014 9 3サンドイッチ 菓子パン 1 390

レシート

20140901 220140902 3

入力データ

結果

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 65

演習4: 回答

M

R

S

{ , }

20140901 [380,420,・・・]

日付 [売上げ数]

{ , }

20140901 380

日付 売上げ額

{ , }

20140901 51000

記号+偶奇 総数

{ , }

0 123,2014,9,1・・・

バイト数 テキスト

・ 分類名 != おにぎりなら終了・ yyyymmddの文字列を作る・ emit(yyyymmdd, 個数*値段)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 66

説明題材 全おにぎりの販売個数カウント

example.OnigiriCountクラス

実装するメソッドは3つ

JavaでMapReduceを実装する

OnigiriCount.java

main()

map()

reduce()

M

R

S

{ , }

onigiri [2,3,1,1,・・・]

onigiri [販売個数]

{ , }

onigiri 2

onigiri 販売個数

{ , }

onigiri 300

onigiri 総数

{ , }

0 123,2014,9,1・・・

バイト数 テキスト

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 67

public static void main(String[] args) throws ... {

// MapperクラスとReducerクラスを指定Job job = new Job(new Configuration());job.setJarByClass(OnigiriCount.class); // ★このファイルのメインクラスの名前job.setMapperClass(MyMapper.class);job.setReducerClass(MyReducer.class);job.setJobName("2014901"); // ★自分の学籍番号

// 入出力フォーマットをテキストに指定job.setInputFormatClass(TextInputFormat.class);...

// 入出力ファイルを指定String inputpath = "posdata";String outputpath = "out/onigiriCount"; // ★MRの出力先...

}

main関数

OnigiriCount.java

main()

map()

reduce()

MR実行のための準備を行うmain関数★の部分3行だけ変更すればよい

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 68

map関数

public static class MyMapper extends Mapper<LongWritable, Text, CSKV, CSKV> {protected void map(LongWritable key, Text value, Context context) ... {

// csvファイルをカンマで分割して,配列に格納するString csv[] = value.toString().split(",");

// おにぎりでないレシートは無視if (csv[PosUtils.ITEM_CATEGORY_NAME].equals("おにぎり・おむすび") == false) {return;

}

// valueとなる販売個数を取得String count = csv[PosUtils.ITEM_COUNT];

// emitする (emitデータはCSKVオブジェクトに変換すること)context.write(new CSKV("onigiri"), new CSKV(count));

}}

▲ csvデータの列番号はPosUtilsにセット済み例:年度の列を取り出す場合は csv[PosUtils.YEAR]

▲ emitするデータはCSKVオブジェクトに変換することおにぎりの総売上計算なのでKeyは常に同じもの

OnigiriCount.java

main()

map()

reduce()

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 69

reduce関数

public static class MyReducer extends Reducer<CSKV, CSKV, CSKV, CSKV> {protected void reduce(CSKV key, Iterable<CSKV> values, ...) {

// 売り上げを合計int count = 0;for (CSKV value : values) {count += value.toInt();

}

// emitcontext.write(key, new CSKV(count));

}}

▲ valuesの総和を取る

OnigiriCount.java

main()

map()

reduce()

▲ mapperと同様CSKVオブジェクトでemit

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 70

emitのKeyとValueを表す汎用オブジェクト 開発を容易にするためのCloudSpiral特化のオブジェクト

CloudSpiral-KeyValueの略• 一般的ではないことに注意

CSKVオブジェクト

M

S

{ , }

onigiri 2

onigiri 販売個数

{ , }

0 123,2014,9,1・・・

バイト数 テキスト

CSKV CSKV

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 71

CSKVへの変換 int → CSKV: cskv = new CSKV(i);

long → CSKV: cskv = new CSKV(l);

double → CSKV: cskv = new CSKV(d);

String → CSKV: cskv = new CSKV(s);

CSKVからの変換 CSKV → int: i = cskv.toInt();

CSKV → long: l = cskv.toLong();

CSKV → double: d = cskv.toDouble();

CSKV → String: s = cskv.toString();

型変換 (参考資料)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 72

Stringへの変換 int → String: str = String.valueOf(i);

long → String: str = String.valueOf(l);

double → String: str = String.valueOf(d);

Stringからの変換 String → int: i = Integer.parseInt(str);

String → long: l = Long.parseLong(str);

String → double: d = Double.parseDouble(str);

型変換 (参考資料)

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 73

演習4 (日別おにぎり売り上げ) をJavaで実装しよう

Eclipseを起動

C:¥pbl¥eclipse.lnk

ひな形プロジェクトをSVNからチェックアウト

http://192.168.100.10/svn/20140xx/bigdata

OnigiriSalesByDate.java を開発する• posmining.enshu パッケージを使うこと

• posmining.example.OnigiriCount.java をベースにして良い

演習5: Javaで実装しよう演

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 74

種類別のおにぎりの売り上げ数を数えよう Q. 梅と昆布どっちが売れているか?

Q. イロモノおにぎりの売れ行きは?• うにめし,うなぎおむすび,・・・

ヒント: 梅っぽい商品名の判定方法

演習6: POSデータの処理+演

// itemNameのどこかに "梅" か "うめ" が入っていればif (itemName.matches(".*(梅|(うめ)).*")) {...

}

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 75

男女別の平均購入金額の計算方法を考えよう 男性:xxx円 女性:yyy円

仮説も立てよう どっちが多いか?

それぞれいくらくらいか?

ただし今までのMRでは計算できない なぜできないのか?

どうすればできるようになるか?

本当に不可能か?

演習7: POSデータの処理++演

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 76

なぜ計算できないのか?

Shuffleフェーズでのデータ交換=

M→S→R では1つのKeyしか集約できない

どうすればできるか?(=どこでもう1回集約するか)

案1: MRを2回やる (多段MR)

案2: Reducerで一度集約する (今までのやり方でも実装可能)

案3: Mapperで一度集約する (in-mapper combining)P.43 「行をまたいだ処理は禁止」と説明した部分

案4: MR+Excelで処理する

演習7: 回答

集約すべきKeyが2種類あるから (レシートID & 性別)

集約

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 77

案1: 多段MR 1段目

M

R

S{ , }

123 [“男,380”, “男,105”]333 [“女,98”, “女,280”]555 [“男,900”]

レシートID [性別,金額]

{ , }

123 男,380

レシートID 性別,金額

{ , }

男 485女 378男 900

性別 合計金額

{ , }

0 123,2014,9,1・・・

バイト数 テキスト・ 値段*個数を売り上げとする・ 性別と売り上げをカンマで繋

いだ文字列を作り,Valueとしてemit

・ valueをカンマで分割し性別と売り上げを取り出す

・ 売り上げの総和を取る・ 性別をKey,総和をValueとして

emit

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 78

案1: 多段MR 2段目

M

R

S{ , }

男 [485, 900, ・・・]女 [378, 280, ・・・]

性別 [合計金額]

{ , }

男 485女 378

性別 合計金額

{ , }

男 510女 500

性別 平均

{ , }

0 男 48511 女 37839 男 900

バイト数 テキスト

・ {性別, 金額} をemit

・ 平均を計算してemit

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 79

男女別の平均購入金額を多段MRで処理しよう

2つのjavaを実装する 1段目 AveragePaymentBySex_1st.java

2段目 AveragePaymentBySex_2nd.java

各フォルダの指定 1段目

• 入力フォルダ: “posdata” 出力フォルダ: “paymentBySex”

2段目• 入力フォルダ: “paymentBySex” 出力フォルダ: “avgPaymentBySex”

演習8: 多段MR演

同一にすること

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 80

案2を実装しよう かなり難しいが今までの知識で実装可能

計算効率はどうか?

OutOfMemoryExceptionは発生しないか?

ヒント: Mapperの出力

演習9: Reducerでの集約パターン演

{ , }

男 123,380男 123,105女 333,98女 333,105男 555,900

性別 レシートID,値段

"男"をKeyとしたmap結果が一台のワーカに集約される

Big Dataの価値?

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 82

EMR: Elastic MapReduce Amazonの提供するIaaS型のHadoop環境

= Hadoopインストール済みのAMIを使ったEC2

グループワーク ステップ0: 代表者を決める & USBディスプレイをつなげる

ステップ1: EMRを立ち上げる

ステップ2: build.xmlを編集する

ステップ3: MRを投入する

ステップ4: 結果を確認する

演習10: AWSでMRを実行しよう演

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 83

演習環境 (=開発環境)

環境がどう変わるか?

ローカル

MRコード

POSデータ

実行

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 84

演習環境 (=開発環境)

EMR環境 (=ステージング環境)

環境がどう変わるか?

ローカル

MRコード

POSデータ

EMR S3ローカル

実行

転送&実行

MRコード

POSデータ

POSデータ10年分,4GB

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 85

AWSログイン https://cspiral.signin.aws.amazon.com/console

ステップ1: EMRの立ち上げ

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 86

Cluster Configuration Cluster name → グループ番号 (C0~C9) 入力

Logging → Enabledを外す

Software Configuration Hadoop distribution → AMI version を 2.4.7 に

Applications to be installed → Hive, Pig 両方 × を押して消す

Hardware Configuration Network → vpc-9150b9f4

EC2 Subnet → subnet-b99e9eff

Master → c1.medium Core → c1.medium

ステップ1: EMRの立ち上げ

間違えないこと

間違えないこと

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 87

Security And Access EC2 key pair → CloudSpiral_Key を選択

Create Clusterを押す

ステップ1: EMRの立ち上げ

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 88

立ち上がるのを待つ

ステップ1: EMRの立ち上げ

EMRのDNS名 (どこかにメモしておくこと)

WaitingになればOK

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 89

build.xmlでやっていること ソースをコンパイルする

jarに固めてEMRに転送(scp)する

SSHでEMRにログインし,HadoopコマンドでMRを実行する

ステップ2: build.xmlの編集

EMR S3ローカル

転送&実行

MRコード

POSデータ

POSデータ10年分,4GB

この部分

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 90

build-common.xml Hadoop接続先のサーバ名を変更する

build.xml タスクを追加する

ステップ2: build.xmlの編集

<property name="ssh.server" value="ec2-...compute.amazonaws.com" /><property name="ssh.user" value="hadoop" /><property name="ssh.pass" value="" />

<!-- おにぎり総数 --><target name="run.OnigiriCount" depends="prepare"><sshexec host="${ssh.server}" username="${ssh.user}" keyfile=...command="hadoop jar main.jar posmining.example.OnigiriCount s3://..."

/></target>

▲立ち上げたEMRの

DNS名に変更

実行するMRクラス ▲

▼ タスク名.“run.実行MRクラス名” が分かりやすい

MRの入力データを指定▲s3://cspiral-posdata/

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 91

ステップ3: MRを投入する

run.xxx を指定して実行

実行中にステップ3-4を試す →

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 92

PacketiXよりVPN設定 (次のステップ5~7に必須)

ステップ4: VPN設定 & 接続

ホスト名: 54.64.84.176

仮想HUB名: VPN

ユーザ名: student

パスワード:

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 93

ブラウザから http://DNS名:9100 にアクセス MapReduce関係の情報を確認できる

ステップ5: MRの実行過程を見る

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 94

ステップ6: 入力データを確認する

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 95

ブラウザから http://DNS名:9101 にアクセス HDFS関係の情報を確認できる (MRの出力結果もここから)

ステップ7: 結果を取得する

"Browse the filesystem"

のリンクから→ /user/hadoop/out/

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 96

自由に触ってみよう 別の自作MRを投入する

• ちゃんと動くか?

• 実行時間は?処理結果は?

HadoopのWebコンソールを読み解く• http://DNS名:9100

• http://DNS名:9101

立ち上げたEMR環境がEC2側からどう見えるか?• 3台構成のEMR = 3台のEC2インスタンス

EMRワーカ数の変更は禁止 次の講義でやります

自由時間

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 97

男女平均の結果がマイナスになる → int でビッグデータの集計できますか?

INT_MAX=21億

本当にそこで平均計算必要ですか? 出力はこっちの方が役立ちませんか?

• {key=性別, value="合計金額,合計レシート枚数"}

中間処理としてのHadoop/MapReduceの使い方

案2でOutOfMemoryError → 連想配列巨大すぎませんか?

案2はビッグデータの処理方法として適切ですか?

演習後のいろいろ

ビッグデータビッグデータの定義

事例紹介

Hadoop/MapReduce誕生の背景

Hadoop概要

MapReduce概要

MapReduceゲーム 演

POSデータマイニング 演

EMRトライアル 演

重要なこと諸々

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 99

集計 合計,平均,分散,集約,・・・

機械学習 クラスタリング分析,ニューラルネット・・・

自然言語処理 構文解析,形態素解析,係り受け解析,・・・

画像処理

・・・

Hadoopでできる処理

今日の講義

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 100

できること(得意なこと)

できないこと(苦手なこと)

バッチ処理 リアルタイム処理

大規模データの処理 小規模データの処理(オーバーヘッドが大きい)

データが多い処理(ログ解析など)

計算が多い処理(科学計算など)

分割できる処理 分割できない処理(グラフ構造のデータなど)

データ処理基盤としての利用 データベースとしての利用(単一故障点がある)

構造/非構造データの処理(表形式,画像・動画問わず)

Hadoopは万能ではない

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 101

Hadoopは巨大データ処理方法の一つ Hadoopのシェアは大きいが・・・

巨大なデータを処理できればなんでもよい

別のアイデアも生まれつつある• リアルタイムMapReduce (Presto)

• MapReduceを生成するSQLライクな言語 (Pig)

• Hadoop/MapReduceとは全く別の分散処理技術 (Spark)

「ビッグデータ」 はバズワード臭い 言葉はなくなるかもしれない

概念は残る• 何でもかんでもデータを計測 → ビッグデータ → 発掘

• データに基づく意志決定,ビジネス戦略

重要なこと

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 102

共通する点 流行ってる

名前がふわっとしてる• 解釈ばらばら,非エンジニア的なネーミングセンス

たくさんの技術の集合で成り立つ概念• クラウド: 仮想化,分散システム,SOA,HTTP,REST,…

• ビッグデータ: NoSQL,Hadoop,MapReduce,…

相性最高 クラウドで貯めた巨大なデータをHadoopで分析する

クラウド(IaaS)でHadoop環境を手軽に立ち上げられる

クラウドとビッグデータ

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 103

でかいことにも価値がある データが大きければ単純な集計だけでも有益な結果が得られる

ビッグデータの価値

Volume (量) Variety (種類) Velocity (速度)

t

t

アイデア次第!

つづきはPBLで!

分野・地域を越えた実践的情報教育協働ネットワーク

Cloud Specialist Program Initiative for Reality-based Advanced Learning

参考資料

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 105

同時に飲料水を購入した全レシートデータ 飲料水 ∈ {コーヒー飲料,緑茶飲料,炭酸飲料,清涼飲料,水}

含まれないレシート• 「ガムだけを買った」,「雑誌とパンを買った」・・・

店舗数: 4店舗 オフィス街1,駅前1,ロードサイド1,住宅街1

期間: 2003年1月1日~2012年12月31日 丸9年,月ごとに集計

計120ファイル,4.22GB

POSデータの概要

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 106

店舗立地 (オフィス街1,駅前1,ロードサイド1,住宅街1)

レシート番号(全データに一意なID)

曜日フラグ (1=月,2=火,3=水,4=木,5=金,6=土,7=日)

休日フラグ (1=祝日/日曜日)

購入者性別フラグ (1=男性,2=女性)

購入者年齢フラグ (1=子供,2=若者,3=大人,4=実年)

購入商品名

JANコード http://www.dsri.jp/jan/

単価

個数

値段 (単価 * 個数)

メーカー名

分類コード・分類名 (日経商品ディクショナリー)http://t21help.nikkei.co.jp/reference/docs/POSCodeBook18.pdf

POSデータの属性の意味

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 107

TeraTerm起動 C:¥pbl¥ttermpro.lnk

SSHでHadoopを操作

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 108

認証情報

SSHでHadoopを操作

C:¥pbl¥ssh_key¥CloudSpiral_Key.pem

passphraseは空

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 109

SSH接続成功

SSHでHadoopを操作

Cloud Specialist Program Initiative for Reality-based Advanced Learning

分野・地域を越えた実践的情報教育協働ネットワーク© Cloud Spiral partners 2014/5/9 110

MRの出力結果 (=HDFS) の確認コマンド hadoop dfs

HDFSのファイルリストを取得する hadoop dfs -ls /user/hadoop/out/

hadoop dfs -lsr /user/hadoop/out/

MRの処理結果を取得する hadoop dfs –cat /user/hadoop/out/xxx/

SSHでHadoopを操作

xxxにはMRで指定した出力フォルダ名を打ち込む