Pivotal Knowledge Base

フォローする

HDFS データレイアウト

NameNode データファイル群

 

図 1.FSIMAGEバイナリの内容

NameNodeのデータファイルはHadoopクラスタのメタデータを格納する。これらのデータは "dfs.name.dir" パラメータ( "hdfs-site.xml" で設定)で指定されたディレクトリにある。メタデータ情報を格納しているファイルは "fsimage" と "version"、"edits" である。

NameNodeの "fsimage" ファイルはNameNodeのcatalogイメージを含んでいる。このcatalogはHadoop HDFS ファイルシステム内で蓄えられたファイルのメタデータから構成されている。

NameNodeが起動しない限り "fsimage"ファイルは更新されない。"fsimage" はファイル、ディレクトリ、権限、などがHDFSで変更されても静的なファイルである。では、もしNameNodeのプロセスが突然消えてしまったらどうなるのであろうか!? ここで、"edits"ファイルの出番である。HDFSへの変更があるたびにNameNodeは新しい情報をメモリオブジェクトに対し更新し、HDFSジャーナルログとしても知られている "edits"ファイルを更新する。

静的な "fsimage" に "edits" ファイルからHDFSの変更点をマージするためには2つの方法しかない。1つ目の方法はNameNodeを起動すること。NameNodeは "fsimage" と "edites" の両方のファイルの内容をメモリに読み込む。それから変更点のマージを実行する。マージが完了すると、NameNodeは更新されたものを "fsimage" に上書きする。もう1つの方法はSecondaryNameNodeサービスによる1時間毎のチェックポイント機構による方法である。

"version" ファイルは最後のNameNodeフォーマットからのHDFSの現ヴァージョンを表す。もしdatanodeがHDFSの記録に失敗したら、DataNodeのHDFSヴァージョンとNameNode上のヴァージョンが適合しているかどうか確かめる。

 

 DataNode データ ファイル群

図2 . DataNodeのHDFSレイアウト 

典型的なDataNodeはJBOD設定で個別のドライバを持っているだろう。Linuxはそれぞれのディスクでデバイスを作り、XFS、ext3などでファイルシステムを作る。ファイルをHDFSに書くときはNameNodeはブロックをどのDataNodeに入れるか決める。ブロックは、既存のファイルシステム層(例えば、XFS)の上にファイルとして保存される。root権限でデータノードへアクセスすると、ファイルを一覧表示し、それらがどのように作成されているかを確認することができる。 " dfs.data.dir "パラメータ(設定ファイル "hdfs-site.xml" )で指定されたディレクトリのリストは次のようになる :

hadoop@hdw1:/data/dfs/data/current$ ls -l
total 24
-rw-rw-r-- 1 hadoop hadoop  64M Nov 17 21:06 blk_-7586700455251598184
-rw-rw-r-- 1 hadoop hadoop 513K Nov 17 21:06 blk_-7586700455251598184_1015.meta
-rw-rw-r-- 1 hadoop hadoop  51M Nov 17 21:06 blk_-7878794766348260704
-rw-rw-r-- 1 hadoop hadoop 408K Nov 17 21:06 blk_-7878794766348260704_1015.meta


この例の場合HDFSブロックサイズは64MBで設定されている(1番上にリストされたファイルのサイズを確認)。それぞれのデータブロックがblk_<64ビットブロックID>という名で格納されているのを確認できる。メタデータブロックは"blk_<64ビットブロックID>_<世代スタンプ>.meta"という名で格納されているのを確認出来る。追加の世代スタンプは、最後のNameNodeの” fsimage "チェックポイントの前後どちらでデータブロックが作成されたかどうか判別するため使用される。最後のチェックポイントの前にデータブロックが作成された場合には、この番号は” fsimage "バイナリファイルに格納されているものより小さい数値となるであろう。メタファイルには、データブロックのチェックサムが含まれている。もし、読み出し動作中にチェックサムが一致しなかった場合、HDFSクライアントにエラーが返却される。

fsimage と edits ファイルの中身を出力

[gpadmin@hdm1 current]$ pwd
/data/nn/dfs/name/current
[gpadmin@hdm1 current]$ ls -l
-rw-r--r-- 1 hdfs hadoop 1048576 Feb 11 14:38 edits_inprogress_0000000000000002473
-rw-r--r-- 1 hdfs hadoop   24803 Feb 11 14:38 fsimage_0000000000000002472
-rw-r--r-- 1 hdfs hadoop      62 Feb 11 14:38 fsimage_0000000000000002472.md5
[gpadmin@hdm1 current]$ hdfs oiv -i fsimage_0000000000000002472 -o /tmp/fsimage.out [gpadmin@hdm1 current]$ hdfs oev -i edits_inprogress_0000000000000002473 -o /tmp/edits.out

 

コメント

Powered by Zendesk