Mais conteúdo relacionado Semelhante a 今さら聞けないHadoop セントラルソフト株式会社(20120119) (20) 今さら聞けないHadoop セントラルソフト株式会社(20120119)7. セミナーの目的
Hadoop 初心者の方に、動作概念をロールプレイを
通して理解してもらう。
7
8. アジェンダ
データの大規模化
Hadoop
HDFS
ロールプレイ HDFS 編
MapReduce
ロールプレイ MapReduce 編
まとめ
8
10. 世界のデジタルデータの推移
2006年で18万ペタバイト
2009年で80万ペタバイト
2011年で2ゼタ(200万ペタ)バイト
2020年で35ゼタ(3500万ペタ)バイト(予想)
10
13. 大量データへの対応(2)
転送時間を短縮する方法。
100台のドライブに 1/100 ずつデータを保
管。
保管したデータを並列に取り出す。
転送時間が2時間半から2分以内に短縮。
ただし、次の問題が発生する。
障害の発生する確率が増える。
データを結合する仕組みが必要。
13
15. 問題の解決
耐障害性
分割したデータをコピーして複数台のマシンに保存する
ため、一部のストレージサーバが故障しても正常に稼
働。
デフォルトのコピー数は3。
データ結合
分散ファイルシステム。
15
16. スケーラビリティ
RDB とは異なり、並列台数を増やしただけ性能が向
上
(
合
計
処
理
能
力
)
(マシンの台
数)
Bitqull: Data harvesting with MapReduceか
ら
16
18. Hadoopとは
ビッグデータを分散処理するためのミドルウェア
ビッグデータ:大量・非定型・リアルタイム性の高い
データ
Google の GFS 論文と MapReduce 論文を元に作成
Java で記述
オープンソース
18
20. Hadoop を使った事例
Hadoop 適用前 適用後
楽天 120時間 5時間
(1日の購入履歴) (1/24)
クックパッド 7000時間
(1年分のデータ処理) 30時間
(1/233)
Yahoo 624時間
(3年分のログ解析)
20分
VISA 720時間
(1/1872)
(2年分のデータ解析)
13分
20 (1/3323)
23. HDFS
(Hadoop Distributed File System)
複数のストレージにファイルを分散する
クライアントから HDFS を通してみると、一
つの
ファイルのように見える
二種類のサーバで構成される
ネームノード(NameNode)
データノード(DataNode)
23
27. クライアント
クライアントがファイルをネームノードに渡す。
クライアント ネームノード
28. ネームノード
渡されたファイルをデータノードの数に分割しそれ
ぞれに渡す。
データノード
ネームノード
31. クライアント
クライアントがファイルをネームノードに渡す。
クライアント ネームノード
32. ネームノード
渡されたファイルをデータノードの数に分割しそれ
ぞれに渡す。
データノード
ネームノード
33. 補足
実際はレプリケーションと呼ばれる、データのコ
ピーを
複数のノードへの保存が行われる。(デフォルトは3
データノード
か所)
ネームノード
35. MapReduceとは
大量のデータを分散処理するフレームワーク。
各ノードが自身の持つデータを処理する。
3種類のフェーズから構成される。
Map
Shuffle & Sort
Reduce
35
36. ワードカウントとは
ある文書中にある単語数をカウントし、単語ごとに
使われた回数を結果として出力する。
36
38. Map
入力データの中で自身のノードが持っているデータ
を
処理し、中間データとして出力する。
入出力の形式は key と value のペア。
入力デー <key A , value B>
タ
処理 Map
中間デー <key C , value D>
タ
38
39. ワードカウントの Map(入力データ)
ファイルの1行を読み込んで Map の入力にする
key :行の先頭文字がファイルの開始から何文字目かの
数値
(バイトオフセット)
入力ファイル(実ファ
value :1行の内容そのまま
入力ファイル(HDFS 入力データ(<key ,
イル) value>)
上)
ノード1 dog cat cat <0 , “dog cat cat” >
dog cat cat
ノード2 bird dog
bird dog <12 , “bird dog” >
dog dog dog
ノード3 cat dog dog
dog <21 , “dog dog dog”>
cat dog
<33 , “cat” >
cat
ノード4
cat dog <37 , “cat dog” >
39
40. ワードカウントの Map(処理・中間データ)
入力の value を単語に分割して、それを中間データ
の key 、数字の1を value にする
ノード4上の処理
入力データ 中間データ
(<key , value>) (<key , value>)
< “cat” , 1 >
<33 , “cat” >
< “cat” , 1 >
<37 , “cat dog” >
< “dog” , 1 >
40
41. ワードカウントの Map(全体の流れ)
ノード4上の処理
< “cat” , 1 >
<33 , “cat” > Map 処
cat < “cat” , 1 >
cat dog <37 , “cat 理
dog”> < “dog” , 1 >
ファイルからのデータの読み込み
1行を単語へ分割 中間データの出力
41
42. Shuffle & Sort
Map が終了すると、生成された中間データを
Reduce に渡す前に Shuffle & Sort が行われる。
Shuffle & Sort ではデータの key に基づいて、ソー
トとvalue の集約、 ハッシュを用いて Reduce への
データの割り振りを行う。
Map
Reduce
Map
Shuffle &
Sort
Map
Reduce
Map
42
43. ワードカウントの Shuffle & Sort
Map の出力を同じ key の value を一つに集約し、 key
の順にソート、ハッシュでどちらの Reduce へ渡すのか
決める
ノード1の Map 出 ノード3の Map 出 Reduce1 の入力
力 力
< “dog” , 1 > < “dog” , 1 >
< “dog” , {1,1,1,1,1,1} >
< “cat” , 1 > < “dog” , 1 >
< “cat” , 1 > < “dog” , 1 >
ノード2の Map 出 ノード4の Map 出 Reduce2 の入力
力 力
< “cat” , 1 >
< “bird” , 1 > < “bird” , {1} >
< “cat” , 1 >
< “cat” , {1,1,1,1} >
< “dog” , 1 >
< “dog” , 1 >
43
44. Reduce
Shuffle & Sort で処理されたデータを受け取り、処理
を行って HDFS 上に結果を書きだす。
入出力の形式は key と value のペア。
B は同じ key A の
value (B1,B2,…) の集ま
り
処理されたデータ <key A , values B>
処理 Reduce
出力 key C value D
44
45. ワードカウントの Reduce (処理・出力)
入力の value にある1の数を数えて、ファイルに key
と
ペアで出力する。
Reduce2 の処理
入力 出力(HDFS 上)
< “bird” , {1} > bird 1
cat 4
< “cat” , {1,1,1,1} >
45
48. クライアント
ネームノードにワードカウントを命令する
クライアント ネームノード
49. ネームノード
データノードに処理を指示する。
データノード
ネームノード
50. Map
入力データの単語ごとに、それぞれの単語をkeyに
して、valueに1とする。
keyごとにソートしまとめる。
ネームノードにまとめたデータを渡す。
中間データ
入力データ <“bird”,1> ネームノード
<“cat”,1>
dog cat <“cat”,1>
dog bird cat Map
dog <“dog”,1>
…
<“dog”,1>
<“dog”,1>
51. ネームノード
中間データをマージします。
マージしたデータを二つを分ける。
Reduceに渡す。
Reduce
中間データ
<“bird”,1>
<“cat”,1> <“dog” ,{1,1,1}>
<“bird” , {1}>
<“cat”,1>
<“cat” ,{1,1}>
<“dog”,1> <“dog” ,{1,1,1}>
<“bird” , {1}>
<“dog”,1> <“cat” ,{1,1}>
<“dog”,1>
51
52. Reduce
単語ごとにまとめられたvalueを足して出力する。
ネームノードに渡す。
Reduce
ネームノード
<“dog” ,3>
<“cat” ,2>
<“bird” , 1>
53. ネームノード
出力結果をデータノードにそれぞれ渡す。
データノード
ネームノード
53
54. クライント
ネームノードに対し、結果のファイルを要求する。
クライアント ネームノード
54
55. ネームノード
出力結果のファイルを渡すように指示する。
ネームノード データノード
55
56. データノード
ネームノードにファイルを渡す。
データノード ネームノード
56
57. ネームノード
ファイルをクライアントに渡す。
ネームノード クライアント
57
58. クライアント
受け取ったファイルの確認をする。
出力ファイ
クライアント ル
確認
bird 1
cat 2
dog 3
…
58
60. クライアント
ネームノードにワードカウントを命令する
クライアント ネームノード
61. ネームノード
データノードに処理を指示する。
データノード
ネームノード
62. Map
入力データの単語ごとに、それぞれの単語をkeyに
して、valueに1とする。
keyごとにソートしまとめる。
ネームノードにまとめたデータを渡す。
中間データ
入力データ <“bird”,1> ネームノード
<“cat”,1>
dog cat <“cat”,1>
dog bird cat Map
dog <“dog”,1>
…
<“dog”,1>
<“dog”,1>
63. ネームノード
中間データをマージします。
マージしたデータを二つを分ける。
Reduceに渡す。
Reduce
中間データ
<“bird”,1>
<“cat”,1> <“dog” ,{1,1,1}>
<“bird” , {1}>
<“cat”,1>
<“cat” ,{1,1}>
<“dog”,1> <“dog” ,{1,1,1}>
<“bird” , {1}>
<“dog”,1> <“cat” ,{1,1}>
<“dog”,1>
63
64. Reduce
単語ごとにまとめられたvalueを足して出力する。
ネームノードに渡す。
Reduce
ネームノード
<“dog” ,3>
<“cat” ,2>
<“bird” , 1>
65. ネームノード
出力結果をデータノードにそれぞれ渡す。
データノード
ネームノード
65
66. クライント
ネームノードに対し、結果のファイルを要求する。
クライアント ネームノード
66
67. ネームノード
出力結果のファイルを渡すように指示する。
ネームノード データノード
67
68. データノード
ネームノードにファイルを渡す。
データノード ネームノード
68
69. ネームノード
ファイルをクライアントに渡す。
ネームノード クライアント
69
70. クライアント
受け取ったファイルの確認をする。
出力ファイ
クライアント ル
確認
bird 1
cat 2
dog 3
…
70
73. まとめ
Hadoop はデータの分散処理システムであり、
HDFS と MapReduce で構成される
HDFS はデータファイルを分散管理するシステムで
あり以下のような構成である
分割したデータの保存場所を管理する「ネームノード」
実際にデータを保存する「データノード」
MapReduce は以下の3つのフェーズで構成される
入力データの加工を行う「Map」
データの整理と分配を行う「Shuffle & Sort」
まとめられたデータに対して処理を行う「Reduce」
73
74. 今後の発表ネタ
MapReduce 関連
アルゴリズム
転置インデックス ・・・基本的な MapReduce
TF-IDF ・・・複数回の MapReduce
k-means 法 ・・・条件による MapReduce の分岐
MapReduce プログラミング手法
複数ファイルのデータのマージ
パラメータ引渡し
etc
Hadoop 関連のシステム(エコシステム)
HBase
Hive
74