hdfsネームノードのhaについて #hcj13w
DESCRIPTION
Hadoop Conference Japan 2013 Winter で発表した、ネームノードHA についての資料です。10分だったのでかなり限定的な説明に終わっています。TRANSCRIPT
![Page 1: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/1.jpg)
1
High Availability for the HDFS NameNode
Cloudera 株式会社 カスタマーオペレーションズエンジニア小林 大輔2013 年 1 月 21 日
![Page 3: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/3.jpg)
3
ネームノード HA とは?
![Page 4: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/4.jpg)
4
従来のネームノードの問題点
• 従来の Hadoop ではネームノードは単一障害点(SPOF) だった
• ネームノードは、ファイルシステムのメタデータを管理している (edits ログ /fsimage など )
• ネームノードがダウンしたらデータが読み込めず、クラスタ自体が利用不可になる
![Page 5: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/5.jpg)
5
従来のネームノードの問題点
• 従来の Hadoop ではネームノードは単一障害点(SPOF) だった
• ネームノードは、ファイルシステムのメタデータを管理している (edits ログ /fsimage など )
• ネームノードがダウンしたらデータが読み込めず、クラスタ自体が利用不可になる
HA 対応してほしいという需要
![Page 6: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/6.jpg)
6
ネームノード HA の要件
• メタデータの保存先として、カスタムハードウェアに依存しないこと
• アクティブ / スタンバイ構成において、メタデータの同期が容易であること
• デプロイが容易であること• スプリットブレインシンドロームを避けられる
こと• SPOF がないこと• 既存の Hadoop クラスタの資産を無駄にしないこ
と
![Page 7: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/7.jpg)
7
ネームノード HA の要件
要は
![Page 8: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/8.jpg)
8
ネームノード HA の要件
( 比較的 ) 簡単に既存の Hadoop の仕組みを
無駄にすることなくHA 構成を作れること
![Page 9: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/9.jpg)
9
ネームノード HA
• Apache Hadoop2.0 ではネームノード HA が導入されました
• CDH4.1 にも含まれてます
![Page 10: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/10.jpg)
10
ネームノード HA
• クォーラムベースジャーナリング• 外部のハードウェアに依存しない
• 自動フェイルオーバー• 障害発生時にも自動で切り替え可能
![Page 11: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/11.jpg)
11
今日は、、
• クォーラムベースジャーナリング• 外部のハードウェアに依存しない
• 自動フェイルオーバー• 障害発生時にも自動で切り替え可能
![Page 12: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/12.jpg)
12
クォーラムベースジャーナリングについて
![Page 13: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/13.jpg)
13
クォーラムベースジャーナリング
• ネームノードのメタデータ (edits ログ ) を複数の場所で保管
• ネームノードはクライアントとして、 edits を書き込む
• 複数の書き込み先のうち、過半数( クォーラム数 ) のノードに成功すればedits はコミットとみなす
![Page 14: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/14.jpg)
14
NameNode
QuorumJournalManager
クォーラムベースジャーナリングの導入
![Page 15: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/15.jpg)
15
NameNode
QuorumJournalManager
クォーラムベースジャーナリングの導入
edits ログの書き込み先として、ジャーナルノード (JN) の導入
![Page 16: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/16.jpg)
16
NameNode
QuorumJournalManager
クォーラムベースジャーナリングの導入
複数のノード上でスタンドアロンのデーモンが動作
![Page 17: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/17.jpg)
17
NameNode
QuorumJournalManager
クォーラムベースジャーナリングの導入
各 JN はローカルディスクに edits を書き込む
![Page 18: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/18.jpg)
18
NameNode
QuorumJournalManager
クォーラムベースジャーナリングの導入
追加でノードが必要なわけではないアクティブ / スタンバイネームノード、jobtracker( 比較的信頼性の高いノード )
の 3 台にデプロイ
![Page 19: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/19.jpg)
19
クォーラムベースジャーナリングの導入
クライアント側はクォーラムジャーナルマネージャ (QJM)
NameNode
QuorumJournalManager
![Page 20: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/20.jpg)
20
クォーラムベースジャーナリングの導入
各ネームノード上にデプロイ
NameNode
QuorumJournalManager
![Page 21: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/21.jpg)
21
では、、
edits はどのように
書き込まれるのか?
![Page 22: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/22.jpg)
22
edits 書き込みのフロー
ネームノードはedits をローカルディスクに書き込む
Localdisk
![Page 23: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/23.jpg)
23
edits 書き込みのフロー
書き込みよろー
QJM は、 logSync() メソッドを使用してすべての JN へ edits を同期する
![Page 24: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/24.jpg)
24
edits 書き込みのフロー
書き込んだった
書き込んだったクォーラム数の JN から成功の ACK が返ると
edits の書き込みに成功したとみなす
![Page 25: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/25.jpg)
25
edits 書き込みのフロー
書き込んだったクォーラム数未満の JN からしか成功の ACK が返ってこなければ
edits の書き込みに失敗したとみなす
![Page 26: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/26.jpg)
26
ところで、、
ネームノード HA はアクティブ / スタンバイ構成
![Page 27: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/27.jpg)
27
ところで、、
両ネームノードから edits が書き込まれる恐れはないの?
![Page 28: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/28.jpg)
28
これは、、
両ネームノードから同時に書き込んでしまうと
データに不整合が生じてしまう
![Page 29: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/29.jpg)
29
ファイルシステムとしての信頼性が損なわれる
![Page 30: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/30.jpg)
30
最悪データ破損も招きかねないので
非常に危険!
![Page 31: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/31.jpg)
31
JounalNode JounalNode JounalNode
NameNode
QuorumJournalManager
NameNode
QuorumJournalManager
![Page 32: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/32.jpg)
32
JounalNode JounalNode JounalNode
NameNode
QuorumJournalManager
NameNode
QuorumJournalManager
![Page 33: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/33.jpg)
33
JounalNode JounalNode JounalNode
NameNode
QuorumJournalManager
NameNode
QuorumJournalManager
どのネームノードがアクティブなのかJournalNode が判断できなければ
両ノードからの書き込みを許してしまう
![Page 34: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/34.jpg)
34
そこで、、
クォーラムベースジャーナリングにはフェンシングの
仕組みがある
![Page 35: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/35.jpg)
35
そこで、、
フェンシング:edits を書き込めるネームノードは
常にただ 1 つだけであることを保証する仕組み
![Page 36: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/36.jpg)
36
QJM のフェンシング
エポック番号を使う
![Page 37: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/37.jpg)
37
エポック番号
JN がアクティブネームノードを
一意に識別するために使う番号
![Page 38: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/38.jpg)
38
エポック番号によるフェンシング
• アクティブになるたびに新しいエポック番号が割り振られる
• 両ネームノードが同時に同じエポック番号をもつことはない
• JN は最新のエポック番号を保存する
![Page 39: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/39.jpg)
39
エポック番号によるフェンシング
時系列でみてみると ...
![Page 40: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/40.jpg)
40
エポック番号によるフェンシングネームノード 1 ネームノード 2
時間 時間
起動時
1
2
3
フェイルオーバー
フェイルオーバー
アクティブになった
![Page 41: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/41.jpg)
41
エポック番号によるフェンシング
JounalNode JounalNode JounalNode
NameNode
QuorumJournalManager
NameNode
QuorumJournalManager
![Page 42: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/42.jpg)
42
エポック番号によるフェンシング
JounalNode JounalNode JounalNode
NameNode
QuorumJournalManager
NameNode
QuorumJournalManager
2 2 2
![Page 43: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/43.jpg)
43
エポック番号によるフェンシング
JounalNode JounalNode JounalNode
NameNode
QuorumJournalManager
NameNode
QuorumJournalManager
俺、” 1” だわ 俺、” 2” だわ
21
2 2 2
![Page 44: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/44.jpg)
44
エポック番号によるフェンシング
JounalNode JounalNode JounalNode
NameNode
QuorumJournalManager
NameNode
QuorumJournalManager
“1” は低いので却下“2” の書き込みを採用しま
す
“1” は低いので却下“2” の書き込みを採用しま
す
![Page 45: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/45.jpg)
45
エポック番号によるフェンシング
JounalNode JounalNode JounalNode
NameNode
QuorumJournalManager
NameNode
QuorumJournalManager
クォーラム数からのレスポンスを得ることで、 edits の書き込みに
成功する
書き込めた!
![Page 46: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/46.jpg)
46
まとめ
• クォーラムベースジャーナリングを使用したネームノード HA を紹介しました
• edits を複数ノードで分散して保存することで信頼性が高まっています
• エポック番号を使用することで、両ネームノードから書き込みが発生することを防いでいます。
![Page 47: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/47.jpg)
47
宣伝
• Cloudera Manager を使用することでネームノード HA への移行が非常に簡単にできます
• Cloudera 社のブースでデモを行なっているので、立ち寄ってみてください
![Page 48: HDFSネームノードのHAについて #hcj13w](https://reader035.vdocuments.net/reader035/viewer/2022062405/5565fccbd8b42a2a4d8b4bb6/html5/thumbnails/48.jpg)
48