hdfs (fsimage and edits) in cdh3,cdh4
DESCRIPTION
CDH3とCDH4におけるfsimage、editsの違いをまとめてみましたTRANSCRIPT
CDH3/CDH4 における fsimage とeditsTatsuo Kawasaki@kernel023
はじめにCDH3 と CDH4 の HDFS では fsimage, edits の管理の仕方が若干異なっています。
このスライドはそれらの違いを簡単に紹介することを目的としています。(一部検証が不十分な点がありますので、間違いを発見したらお知らせ下さい)
CDH3 のメタデータ[root@localhost ~]# ls -ltr /var/lib/hadoop-0.20/cache/hadoop/dfs/name/current/total 1100-rw-r--r-- 1 hdfs hdfs 101 Jan 30 00:21 VERSION-rw-r--r-- 1 hdfs hdfs 8 Jan 30 00:21 fstime-rw-r--r-- 1 hdfs hdfs 57248 Jan 30 00:21 fsimage-rw-r--r-- 1 hdfs hdfs 1048580 Jan 31 16:16 edits
after checkpoint[root@localhost ~]# ls -ltr /var/lib/hadoop-0.20/cache/hadoop/dfs/name/current/total 84-rw-r--r-- 1 hdfs hdfs 101 Feb 5 14:37 VERSION-rw-r--r-- 1 hdfs hdfs 8 Feb 5 14:37 fstime-rw-r--r-- 1 hdfs hdfs 66760 Feb 5 14:37 fsimage-rw-r--r-- 1 hdfs hdfs 4 Feb 5 14:37 edits
メタ情報の更新 (CDH3)
fsimage fsimage.ckpt fsimage
edits edits.new edits
fstime fstime
t0 t1 t2 t3 t4
put file
edits 更新メモリ上のメタ情報更新
CheckPointstart
CheckPointDone
NameNode
Secondary NameNode
作成
fsimage
edits
fsimage.ckptマージ
取得 転送
リネーム
リネーム
時刻更新
Secondary NN Web UI (CDH3)
CDH4 のメタデータHDFS フォーマット直後-bash-4.1$ ls -l /var/lib/hadoop-hdfs/cache/hdfs/dfs/name/current/total 1040-rw-r--r-- 1 hdfs hdfs 1048576 Feb 5 01:35 edits_inprogress_0000000000000000001-rw-rw-r-- 1 hdfs hdfs 119 Feb 5 01:33 fsimage_0000000000000000000-rw-rw-r-- 1 hdfs hdfs 62 Feb 5 01:33 fsimage_0000000000000000000.md5-rw-r--r-- 1 hdfs hdfs 2 Feb 5 01:35 seen_txid-rw-rw-r-- 1 hdfs hdfs 202 Feb 5 01:33 VERSION
-bash-4.1$ hexdump -C /var/lib/hadoop-hdfs/cache/hdfs/dfs/name/current/seen_txid 00000000 31 0a |1.|00000002
seen_txid にはトランザクション ID が
含まれる
ファイル追加後の挙動を確認[training@localhost ~]$ hadoop fs -put /etc/hosts hosts[training@localhost ~]$
oiv - fsimage viewer
-bash-4.1$ hdfs oiv -i /var/lib/hadoop-hdfs/cache/hdfs/dfs/name/current/fsimage_0000000000000000000 -o aaa-bash-4.1$ cat aaadrwxr-xr-x - hdfs supergroup 0 1969-12-31 19:00 /
checkpoint が発生していないのでput したファイルは
まだ fsimage に書き込まれていない
oev – edits viewer-bash-4.1$ hdfs oev -i /var/lib/hadoop-hdfs/cache/hdfs/dfs/name/current/edits_0000000000000000020-0000000000000000027 -o bbbcat bbb<?xml version="1.0" encoding="UTF-8"?><EDITS> <EDITS_VERSION>-40</EDITS_VERSION> <RECORD> <OPCODE>OP_START_LOG_SEGMENT</OPCODE> <DATA> <TXID>20</TXID> </DATA> </RECORD> <RECORD> <OPCODE>OP_SET_GENSTAMP</OPCODE> <DATA> <TXID>21</TXID> <GENSTAMP>1003</GENSTAMP> </DATA> </RECORD> <RECORD> <OPCODE>OP_ADD</OPCODE> <DATA> <TXID>22</TXID> <LENGTH>0</LENGTH> <PATH>/user/training/hosts._COPYING_</PATH> <REPLICATION>1</REPLICATION> <MTIME>1360046220628</MTIME> <ATIME>1360046220628</ATIME> <BLOCKSIZE>67108864</BLOCKSIZE> <CLIENT_NAME>DFSClient_NONMAPREDUCE_1911533003_1</CLIENT_NAME> <CLIENT_MACHINE>127.0.0.1</CLIENT_MACHINE> <PERMISSION_STATUS> <USERNAME>training</USERNAME> <GROUPNAME>supergroup</GROUPNAME> <MODE>420</MODE> </PERMISSION_STATUS> </DATA> </RECORD>
トランザクション ID
ここからput トランザクション
開始トランザクション ID
oev – edits viewer (cont)ファイル名 edits_0000000000000000020-0000000000000000027 <RECORD> <OPCODE>OP_SET_GENSTAMP</OPCODE> <DATA> <TXID>23</TXID> <GENSTAMP>1004</GENSTAMP> </DATA> </RECORD> <RECORD> <OPCODE>OP_UPDATE_BLOCKS</OPCODE> <DATA> <TXID>24</TXID> <PATH>/user/training/hosts._COPYING_</PATH> <BLOCK> <BLOCK_ID>-3498739165311848505</BLOCK_ID> <NUM_BYTES>0</NUM_BYTES> <GENSTAMP>1004</GENSTAMP> </BLOCK> </DATA> </RECORD> <RECORD> <OPCODE>OP_CLOSE</OPCODE> <DATA> <TXID>25</TXID> <LENGTH>0</LENGTH> <PATH>/user/training/hosts._COPYING_</PATH> <REPLICATION>1</REPLICATION> <MTIME>1360046220735</MTIME> <ATIME>1360046220628</ATIME> <BLOCKSIZE>67108864</BLOCKSIZE> <CLIENT_NAME></CLIENT_NAME> <CLIENT_MACHINE></CLIENT_MACHINE> <BLOCK> <BLOCK_ID>-3498739165311848505</BLOCK_ID> <NUM_BYTES>83</NUM_BYTES> <GENSTAMP>1004</GENSTAMP> </BLOCK>
oev – edits viewer (cont)ファイル名: edits_0000000000000000020-0000000000000000027
<PERMISSION_STATUS> <USERNAME>training</USERNAME> <GROUPNAME>supergroup</GROUPNAME> <MODE>420</MODE> </PERMISSION_STATUS> </DATA> </RECORD> <RECORD> <OPCODE>OP_RENAME_OLD</OPCODE> <DATA> <TXID>26</TXID> <LENGTH>0</LENGTH> <SRC>/user/training/hosts._COPYING_</SRC> <DST>/user/training/hosts</DST> <TIMESTAMP>1360046220738</TIMESTAMP> </DATA> </RECORD> <RECORD> <OPCODE>OP_END_LOG_SEGMENT</OPCODE> <DATA> <TXID>27</TXID> </DATA> </RECORD></EDITS>
最終トランザクション ID
チェックポイント後チェックポイント後-bash-4.1$ ls -l /var/lib/hadoop-hdfs/cache/hdfs/dfs/name/current/total 1376-rw-r--r-- 1 hdfs hdfs 1317 Feb 5 01:36 edits_0000000000000000001-0000000000000000019-rw-r--r-- 1 hdfs hdfs 471 Feb 5 01:37 edits_0000000000000000020-0000000000000000027-rw-r--r-- 1 hdfs hdfs 30 Feb 5 01:38 edits_0000000000000000028-0000000000000000029-rw-r--r-- 1 hdfs hdfs 30 Feb 5 01:39 edits_0000000000000000030-0000000000000000031-rw-r--r-- 1 hdfs hdfs 30 Feb 5 01:40 edits_0000000000000000032-0000000000000000033-rw-r--r-- 1 hdfs hdfs 30 Feb 5 01:41 edits_0000000000000000034-0000000000000000035(略)-rw-r--r-- 1 hdfs hdfs 30 Feb 5 02:53 edits_0000000000000000178-0000000000000000179-rw-r--r-- 1 hdfs hdfs 30 Feb 5 02:54 edits_0000000000000000180-0000000000000000181-rw-r--r-- 1 hdfs hdfs 30 Feb 5 02:55 edits_0000000000000000182-0000000000000000183-rw-r--r-- 1 hdfs hdfs 30 Feb 5 02:56 edits_0000000000000000184-0000000000000000185-rw-r--r-- 1 hdfs hdfs 30 Feb 5 02:58 edits_0000000000000000186-0000000000000000187-rw-r--r-- 1 hdfs hdfs 1048576 Feb 5 02:58 edits_inprogress_0000000000000000188-rw-rw-r-- 1 hdfs hdfs 119 Feb 5 01:33 fsimage_0000000000000000000-rw-rw-r-- 1 hdfs hdfs 62 Feb 5 01:33 fsimage_0000000000000000000.md5-rw-r--r-- 1 hdfs hdfs 1211 Feb 5 02:58 fsimage_0000000000000000187-rw-r--r-- 1 hdfs hdfs 62 Feb 5 02:58 fsimage_0000000000000000187.md5-rw-r--r-- 1 hdfs hdfs 4 Feb 5 02:58 seen_txid
-bash-4.1$ hexdump -C /var/lib/hadoop-hdfs/cache/hdfs/dfs/name/current/seen_txid 00000000 31 38 38 0a |188.|00000004
seen_txid にはトランザクション ID が
含まれる
oiv - fsimage viewer-bash-4.1$ hdfs oiv -i /var/lib/hadoop-hdfs/cache/hdfs/dfs/name/current/fsimage_0000000000000000187 -o aaa-bash-4.1$ cat aaadrwxr-xr-x - hdfs supergroup 0 2013-02-05 01:35 /drwxr-xr-x - hdfs supergroup 0 2013-02-05 01:35 /userdrwxr-xr-x - mapred supergroup 0 2013-02-05 01:35 /vardrwxrwxrwt - hdfs supergroup 0 2013-02-05 01:37 /user/training-rw-r--r-- 1 training supergroup 83 2013-02-05 01:37 /user/training/hostsdrwxr-xr-x - mapred supergroup 0 2013-02-05 01:35 /var/libdrwxr-xr-x - mapred supergroup 0 2013-02-05 01:35 /var/lib/hadoop-hdfsdrwxr-xr-x - mapred supergroup 0 2013-02-05 01:35 /var/lib/hadoop-hdfs/cachedrwxr-xr-x - mapred supergroup 0 2013-02-05 01:35 /var/lib/hadoop-hdfs/cache/mapreddrwxr-xr-x - mapred supergroup 0 2013-02-05 01:35 /var/lib/hadoop-hdfs/cache/mapred/mapreddrwx------ - mapred supergroup 0 2013-02-05 01:35 /var/lib/hadoop-hdfs/cache/mapred/mapred/system-rw------- 1 mapred supergroup 4 2013-02-05 01:35 /var/lib/hadoop-hdfs/cache/mapred/mapred/system/jobtracker.info
checkpoint が発生したので fsimage に書き込
まれている
oev – edits viewer-bash-4.1$ hdfs oev -i /var/lib/hadoop-hdfs/cache/hdfs/dfs/name/current/edits_inprogress_0000000000000000188 -o bbb-bash-4.1$ cat bbb<?xml version="1.0" encoding="UTF-8"?><EDITS> <EDITS_VERSION>-40</EDITS_VERSION> <RECORD> <OPCODE>OP_START_LOG_SEGMENT</OPCODE> <DATA> <TXID>188</TXID> </DATA> </RECORD></EDITS>
開始トランザクション ID
メタ情報の更新 (CDH4)-1
fsimage_0
edits_inprogress_1 edits_inprogress_11 edits_inprogress_33
t0 t1 t2
ロール ロールNameNode
Secondary NameNode
( トランザクションが 10 回あった )
edits_1-10 edits_1-101-10 までのトランザクションをファイナライズしてリネーム
新しいトランザクション ID で新規作成
( トランザクションが 22 回あった )
edits_11-32
11-32 までのトランザクションをファイナライズしてリネーム最初の 10 回+今回のトラザクション 22 回
新しいトランザクション ID で新規作成
ロールの発生タイミング1) NN の開始2) saveNameSpace3) SecondaryNN の CheckPoint4) 失敗したストレージ領域が利用
可能になった5) 管理コマンド
メタ情報の更新 (CDH4)-2
t4 t5 t6
CheckPointstart
CheckPointDone
NameNode
Secondary NameNode
作成
fsimage_ckpt_33マージ
取得
転送
リネームedits_inprogress_33 edits_inprogress_34
edits_1-10 edits_1-10 edits_11-32 edits_11-32
fsimage_0 fsimage_0
edits_33-33
fsimage_ckpt_33 fsimage_33
メタ情報の更新 (CDH4)-3
edits_inprogress_34edits_1-10 edits_11-32
fsimage_0
edits_33-33
fsimage_33
保持する世代数dfs.namenode.num.extra.edits.retained
保持する世代数dfs.namenode.num.checkpoints.retained
チェックポイントを行う間隔 dfs.namenode.checkpoint.periodチェックポイントを行うトランザクション数 dfs.namenode.checkpoint.txnsSecondaryNameNode が NameNode をポーリングする間隔 dfs.namenode.checkpoint.check.period
※ ファイル名にトランザクション ID が付与されるため、fstime は不要となった
Secondary NN web UI (CDH4)
リカバリ• クラッシュなどからの復旧時の挙動• _inprogress が名前に付いているファイルが存在するディレ
クトリ• Invalid になったファイルを含むディレクトリがある場合
NameNode はそのディレクトリへの書き込みを中止• 複数のストレージディレクトリがあり、一部のディレクトリだけ壊
れているようなケース• アクティブな編集ログのセットを含んでいる場合は NameNode
がクラッシュしているということ• 起動時にリプレイが必要
失敗時のファイル名• ログリカバリ失敗• edits_inprogress_N_corrupt
• イメージリカバリ• fsimage_ckpt_N
参考資料• HDFS のパラメータ一覧• http://archive.cloudera.com/cdh4/cdh/4/hadoop/hadoop-
project-dist/hadoop-hdfs/hdfs-default.xml• HDFS-1073• https://issues.apache.org/jira/secure/attachment/12478323/
hdfs1073.pdf• O’Reilly Hadoop: The definitive Guide, 2nd edition