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