hadoopとは - redmine.syonbori.info¤ª田-hadoop... · mapreduceの挙動まとめ...
TRANSCRIPT
![Page 1: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/1.jpg)
Hadoopとは
• Hadoopの二本柱– 分散ファイルシステムHDFS(Hadoop Distributed File System)– 分散プログラミングモデルMapReduce
• Hadoopの目的– 大規模ファイル処理
• 格納,加工• ペタバイト規模• 複数計算機の協調動作
– スケーラブルシステム• 数百~数千台規模
– Key-Value store
Node Node Node Node
HDFS
MapReduce
![Page 2: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/2.jpg)
Hadoopとは
• 分散コンピューティング環境• 基本的にマスタースレーブモデル• 構成
– Namenode(HDFS)• HDFSの管理を行う
– Datanode(HDFS)• HDFSの実データ保持,応答
– Jobtracker(MapReduce)• MapReduceのスケジューリング
– Tasktracker(MapReduce)• MapReduceの実処理
2
Node(マスタ)
Node(スレーブ)
Node(スレーブ)
Node(スレーブ)
HDFS
MapReduceJobtracker
Tasktracker
Tasktracker
Tasktracker
Namenode
Datanode
Datanode
Datanode
![Page 3: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/3.jpg)
HDFSの仕組み
• マスタースレーブモデル– マスター:全体を管理するNamenode
– スレーブ:ファイルを保持するDatanode
• ファイルの分割と多重化– ファイルはファイルブロックに分割,複数ノードに配置
• 読み出し効率化
– ファイルブロックは複製され,複数ノードに配置• 読み出し効率化
• 障害耐性
– ファイル読み出しに最適化した構成
![Page 4: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/4.jpg)
f1 f2
file
HDFSにおけるファイルの搭載
Namenode
DatanodeDatanodeSlave Node
Slave NodeDatanode
nodeselection
negotiationfile
Datanode Datanode Datanode
Selected node
f1 f2
split
duplicate duplicate
f1 f2
![Page 5: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/5.jpg)
HDFSにおけるファイルの読み出し
Namenode
DatanodeDatanodeSlave Node
Slave NodeDatanode
nodeselection
negotiationfile
Datanode Datanode Datanode
Selected node
f1 f2f1 f2
negotiation
f1 f2
transfer(file pieces)
merge
![Page 6: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/6.jpg)
HDFSの障害耐性
• 障害発生時にもデータは損失されない
–複製によるデータ保持
–障害検知時の自動再配置
Datanode Datanode Datanode
A1
B2
A2
B1 B2
A1 A2
B1
A1
B2
![Page 7: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/7.jpg)
HDFSの特徴
• 高速アクセス– 分割数(複製数)だけアクセス速度増
• スケーラビリティ,運用の省力化– 大容量ストレージ
• Datanodeの台数に応じた容量を持つ
– Datanodeを追加するだけで規模が大きくなる• コマンド一つでDatanodeとしてHDFSに参加できる
– 障害発生ノードにただちに対応しなくてよい• 障害耐性により,一部に障害が発生しても運用可能• 後日除去し,新たなノードを追加すればよい
– 障害ノードのデータ復旧はしなくてよい
![Page 8: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/8.jpg)
MapReduceの仕組み
• 入力はファイル断片がばらばらに与えられる
– HDFSのファイルブロック
• 一つずつ入力を加工する(Map)
• ソートして順序を整理する(Shuffle)
• ルールに従ってまとめ上げる(Reduce)
M
a
p
S
h
u
f
f
l
e
R
e
d
u
c
e
入力ファイル
出力ファイル
![Page 9: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/9.jpg)
MapReduceの特徴
• Key-Value store
–常にKey,Valueのペアで1レコードとして扱う
• HDFS上のファイルからの入力
– Key:ファイル上の行番号
– Value:その行のテキスト列
Value
Key
Value
Key
Value
Key
![Page 10: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/10.jpg)
MapReduceの例
map key:aa value:1
map key:bbb value:1
map key:aa value:1
shuffle
key:aa value:1 key:bbb value:1key:aa value:1
reduce reduce
key:aa value:2 key:bbb value:1
入力テキストファイル:aabbbaa
出力テキストファイル:aa 2bbb 1
key:1 value:aa
key:2 value:bbb
key:3 value:aa
入力
出力 出力
![Page 11: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/11.jpg)
MapReduceの挙動まとめ
• Map(主なプログラマー定義部分)– Key-Valueペアを入力から受け取る– 加工したKey-ValueペアをShuffleに渡す
• Shuffle– Key-Valueペアを同一Key毎にまとめる– Keyでソートする– まとめたKey-Values(複数value)をReduceに渡す
• Reduce(主なプログラマー定義部分)– 同一KeyでまとめられたValue’s’を受け取る– Valuesをまとめて加工する– Key-Valueペアとして出力する
※ Shuffleも定義可能だが,通常は必要でない※ Map,Reduceともに複数key-valueペア出力可能
![Page 12: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/12.jpg)
MapReduceの特徴
• 並列処理による効率性– 各Map処理は独立
– Mapは参加する計算機の台数だけ高速化可能
– Reduceの高速化はアルゴリズム次第• Reduceは分割数だけ出力ファイルが増える
– 日付毎解析などなら許容できるだろうが…
• 本質的に分割不可能な部分は高速化できない– 物理シミュレーションなどは全体が1step完走しないと次に進めない
– ほとんどすべての並列処理系に共通の問題
• HDFSとの連携– ファイルブロックを持つDatanode上で実行できる
• 入力データを集める際に効率的(局所性)
![Page 13: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/13.jpg)
Map処理
• public static class CountMapper extendsMapper<LongWritable, Text, Text, IntWritable>
{protected void map(LongWritable key, Text value,
Context context)throws IOException,
InterruptedException {context.write(value, new IntWritable(1));
}}
行番号 テキスト
入力 key:行番号 value:テキスト出力 key:テキスト value:1
![Page 14: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/14.jpg)
Reduce処理
• public static class CountReducer extendsReducer<Text, IntWritable, Text, IntWritable>
{protected void reduce(Text key, Iterable<IntWritable> values,
Context context) throws IOException,
InterruptedException {int count = 0;for (IntWritable i : values)
count += i.get();context.write(key, new IntWritable(count));
}}
イテレーションによる要素の取り出し
入力 key:テキスト values:1の列挙出力 key:テキスト value:上valuesの足し合わせ
同一keyでまとめられたものテキスト
![Page 15: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/15.jpg)
まとめ
• Hadoopクラスタはマスタースレーブモデル– スレーブを追加することでスケールする
• HDFS– ファイルは分割される
• ファイルブロック
– ファイルは複製される• 多重化による障害対策
• MapReduce– MapとReduce
• 通常記述する部分• Mapは独立した加工• Reduceはまとめあげる加工
– key-valueモデル• MapReduceの入力形式• データ構造に注意
– key-value組毎にMap処理が行えるよう
15
Node(マスタ)
Node(スレーブ)
Node(スレーブ)
Node(スレーブ)
HDFS
MapReduceJob
trackerTask
trackerTask
trackerTask
tracker
Namenode
Datanode
Datanode
Datanode
![Page 16: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/16.jpg)
Q&A質疑応答
![Page 17: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/17.jpg)
APPENDIXおそらくこのスライドに含めるべきではないものを一時保存する領域
![Page 18: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/18.jpg)
JobConfに与えるべきもの
InputFormat
OutputFormat
Mapper
Reducer
InputFormat<K,V>
OutputFormat<K,V>Mapper<K1,V1,K2,V2>
Interface
InterfaceInterface
Your Mapper
Class
MapReduceBase
Class
Reducer<K1,V1,K2,V2>
Interface
Your ReducerClass
MapReduceBase
Class
![Page 19: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/19.jpg)
InputFormatJobConf.setInputFormat(Class<? extends InputFormat>)
InputFormat<K,V> FileInputFormat<K,V> TextInputFormat
KeyValueTextInputFormatDBInputFormat<T>
Interface abstract class class
class
class
FileInputFormat<K,V> 継承型を利用する場合の例
conf.setInputFormat(TextInputFormat.class);FileInputFormat.setInputPaths(conf,new Path(“input”));
DBInputFormat<T> を利用する場合
Hadoopパッケージ内src/example下のDBCountPageView.javaの例を参照
<LongWritable,Text>
<Text,Text><LongWritable,T extends DBWritable>
<K,V>
![Page 20: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/20.jpg)
Mapperの総称型の制約
Mapper<K1,V1,K2,V2>
Your Mapper
Class
MapReduceBase
Class
Interface
Mapper<K,V,K2,V2>
•InputFormat<K,V>と同一
Mapper<K,V,k,v>
•Reducer<k,v,k2,v2>と同一•JobConfに指定されている場合
•MapOutputKeyClassのもの•MapOutputValueClassのもの
![Page 21: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/21.jpg)
OutputFormatJobConf.setInputFormat(Class<? extends OutputFormat>)
OutputFormat<K,V> FileOutputFormat<K,V> TextOutputFormat<K,V>
DBOutputFormat<T>
Interface abstract class class
class
FileOutputFormat<K,V> 継承型を利用する場合の例
conf.setOutputFormat(TextOutputFormat.class);FileOutputFormat.setOutputPath(conf, new Path(“output”));
DBOutputFormat<T> を利用する場合
Hadoopパッケージ内src/example下のDBCountPageView.javaの例を参照
![Page 22: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/22.jpg)
Reducerの総称型の制約
Reducer<K1,V1,K2,V2>
Your Reducer
Class
MapReduceBase
Class
Interface
Reducer<K,V,K2,V2>
•Mapper<K1,V1,K,V>と同一
Reducer<K,V,k,v>
•OutputFormat<k,v>と同一(指定されていれば)
•JobConfに指定されている場合•OutputKeyClassのもの•OutputValueClassのもの
![Page 23: Hadoopとは - redmine.syonbori.info¤ª田-Hadoop... · MapReduceの挙動まとめ •Map(主なプログラマー定義部分) –Key-Valueペアを入力から受け取る](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e20df6f9e9709154e067cfe/html5/thumbnails/23.jpg)
HDFSの障害態勢
• 「一般に」クラスタが大きくなると障害発生確率は上がる– 1台が安定動作している確率pに対してn台クラスタが安定動作している確率はpn
• 99.9%で障害なく動作する(障害発生確率0.1%)サーバ100台で構成するクラスタは9.5%の確率で障害が発生する
– 大規模クラスタではいつもどこかで障害が起きていると考えるべき
• 求められる障害態勢– 障害発生時に全体がダウンしない– 障害発生時にデータが損失しない
• Hadoopでは– システムの安全性
• スレーブがダウンした場合
– 障害発生時にもデータは損失されない• 複製によるデータ保持• 障害検知時の自動再配置