Upload
shin-matsumoto
View
528
Download
0
Embed Size (px)
Citation preview
Cloud Specialist Program Initiative for Reality-based Advanced Learning
分野・地域を越えた実践的情報教育協働ネットワーク
ビッグデータ講義
神戸大学
まつ本 真佑
佐伯 幸郎
柗本 真佑まつしん
@shinsuke_mat
シュノーケリング
メタル・ロック
プログラミング
まつしん
柗本 真佑
@shinsuke_mat
シュノーケリング
メタル・ロック
プログラミング
2014 @Grand Canyon, US
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トライアル 演
重要なこと諸々
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結果が一台のワーカに集約される
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で指定した出力フォルダ名を打ち込む