Hadoop FSImage文件初始结构

    Namenode格式化后,会生成FSImage文件,位于dfs.name.dir参数指定目录的current目录中,记录了最初文件系统元数据的信息,随着系统运行,系统文件会越来越多,如果我们有一个要统计HDFS文件数的需求,通过shell或API来遍历都是比较麻烦的,HDFS经常跑离线数据处理,如果延时一段时间可以接受的话,我们可以通过直接解析FSIMAGE的方法来统计相关信息,这时统计的信息是来自上次checkpoint后的,下面是通过源码跟踪记录的FSIMAGE文件内容,本身是二进制文件,不能用普通的文本编辑器打开,hadoop源码版本1.0.4。

格式化时,会把format参数传递给namenode,经历过参数解析后会执行相应的format函数,调用流程比较简单,下面是格式化后的日志:

13/08/17 15:42:17 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host =ts08/192.168.0.43
STARTUP_MSG:   args =[-format]
STARTUP_MSG:   version =1.0.4
STARTUP_MSG:   build =https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1393290;compiled by 'hortonfo' on Wed Oct  305:13:58 UTC 2012
************************************************************/
Re-format filesystem in C:\hadoop\hname ? (Y or N) Y
13/08/17 15:42:21 INFO util.GSet: VM type       = 32-bit
13/08/17 15:42:21 INFO util.GSet: 2% max memory = 1.27125 MB
13/08/17 15:42:21 INFO util.GSet: capacity      = 2^18 = 262144 entries
13/08/17 15:42:21 INFO util.GSet: recommended=262144,actual=262144
13/08/17 15:42:21 INFO namenode.FSNamesystem:fsOwner=Administrator
13/08/17 15:42:21 INFO namenode.FSNamesystem:supergroup=supergroup
13/08/17 15:42:21 INFO namenode.FSNamesystem:isPermissionEnabled=true
13/08/17 15:42:21 INFO namenode.FSNamesystem:dfs.block.invalidate.limit=100
13/08/17 15:42:21 INFO namenode.FSNamesystem:isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s),accessTokenLifetime=0 min(s)
13/08/17 15:42:21 INFO namenode.NameNode: Caching file namesoccuring more than 10 times
13/08/17 15:42:21 INFO common.Storage: Image file ofsize 119 saved in 0 seconds.
13/08/17 15:42:21 INFO common.Storage: Storage directoryC:\hadoop\hname has been successfully formatted.
13/08/17 15:42:21 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ts08/192.168.0.43
************************************************************/
可以看到对于FSImage文件供写入了119字节,通过跟踪可以得出该文件的结构,上图:



                                                                                                                                         FSImage初始结构
偏移量长度元素名数据类型源码文件名源码位置代码
04LAYOUT_VERSIONint-32FSImage.java1048out.writeInt(FSConstants.LAYOUT_VERSION);
44namespaceIDint1114775793FSImage.java1049out.writeInt(namespaceID);
88 INodeDirectoryWithQuota
nsCount
long1FSImage.java1050out.writeLong(fsDir.rootDir.numItemsInTree());
168timestamplongxxxxxxxxFSImage.java1051out.writeLong(fsNamesys.getGenerationStamp());
   Inode    
242nameLenshort0FSImage.java1350out.writeShort(nameLen);
262replicationshort0FSImage.java1367out.writeShort(0); // replication
288ModificationTimelongxxxxxxxxFSImage.java1368out.writeLong(node.getModificationTime());
368access timelong0FSImage.java1369out.writeLong(0);  // access time
448preferred block sizelong0FSImage.java1370out.writeLong(0);  // preferred block size
524# of blocksint0FSImage.java1371 out.writeInt(-1);   // # of blocks
568NameSpace quotalong-1FSImage.java1372out.writeLong(node.getNsQuota());
648disk space quotalong-1FSImage.java1373out.writeLong(node.getDsQuota());
721username lengthbyte13Text.java411WritableUtils.writeVInt(out, length);
7313usernamearray[]administratorText.java412out.write(bytes.array(), 0, length);
861groupname lengthbyte10Text.java411WritableUtils.writeVInt(out, length);
8710groupname array[]supergroupText.java412out.write(bytes.array(), 0, length);
972permissionshort493PermissionStatus.java111permission.write(out);
994paths in leaseint0FSNameSystem.java5443out.writeInt(leaseManager.countPath());
1034currentIdint0DelegationTokenSecretManager.java120    out.writeInt(currentId);
1074allKeysint0DelegationTokenSecretManager.java244    out.writeInt(allKeys.size());
1114delegationTokenSequenceNumberint0DelegationTokenSecretManager.java122    out.writeInt(delegationTokenSequenceNumber);
1154CurrentTokensint0DelegationTokenSecretManager.java123saveCurrentTokens(out);
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值