设为首页 收藏本站
查看: 1141|回复: 0

[经验分享] hadoop 1.0.4 fsimage 文件格式分析

[复制链接]

尚未签到

发表于 2016-12-12 11:17:44 | 显示全部楼层 |阅读模式
  本文转载自: http://abloz.com/2013/01/08/hadoop-1-0-4-fsimage-file-format.html 
fsimage文件存放在NameNode中,保存HDFS中文件的meta信息。fsimage和edits 文件格式是一样的。都是二进制存储。具有文件头,目录信息,文件信息。本文分析一下fsimage文件的格式。不同版本的fsimage文件格式会略有差异。
我的hdfs的一个目录和一个文件信息如下:
目录信息
drwxr-xr-x   - zhouhh supergroup          0 2012-12-25 18:37 /hbase
文件信息
-rw-r–r–   2 zhouhh supergroup       1381 2012-09-26 14:03 /user/zhouhh/README.txt
fsimage文件描述:
一、首先是一个image head,其中包含:
1.imgVersion(int):当前image的版本信息
2.namespaceID(int):用来确保别的HDFS instance中的datanode不会误连上当前NN
3.numFiles(long):整个文件系统中包含有多少文件和目录
4.genStamp(long):生成该image时的时间戳信息。
文件头的imgVersion,namespaceID在新版的fsImage中准备移除。
文件头,顺序格式

名称imgVersion
 
(int)

namespaceID
 
(int)

numFiles
 
(long)

genstamp
 
(long)

值举例ffff ffe04e0a 6aed0000 0000 0000 00460000 0000 0000 044f
 
(Thu Jan 01 08:00:01 CST 1970)


 
二、目录
接下来便是目录和文件的元数据信息
而且紧跟文件头的是一个无名目录,即目录名称长度为0的根目录。
目录包含以下信息:
1.namelen(short):该目录的路径长度
2.Name(bytes): 该目录的路径,如”/user/zhouhh/data”
3.replications(short):副本数,目录为0
4.mtime(long):该目录的修改时间的时间戳信息
5.atime(long):该目录的访问时间的时间戳信息
6.blocksize(long):目录的blocksize都为0
7.numBlocks(int):实际有多少个文件块,目录的该值都为-1即ffff ffff表示目录
8.nsQuota(long)namespace Quota值,若没加Quota限制则为-1
9.dsQuota(long)disk Quota值,若没加限制则也为-1
10.username(String):该目录的所属用户名,前面有个可变长度的长度描述,最长为int
11.group(String):该目录的所属组,前面有个可变长度的长度描述,最长为int
12.permission(short):该目录的权限信息,如644,和POSIX权限保持一致
 
目录,按顺序格式

名称nameLen
 
(short)

name
 
(bytes)

Replication
 
(short)

ModificationTime
 
(long)

access time
 
(long)

值举例00062f 6862 6173 65(/hbase)000000 0001 3c0a df04 30
 
(“Sat Jan 05 21:20:53 CST 2013″)

0000 0000 0000 0000

 

名称preferred block size
 
(long)

Blocks
 
(int)

NsQuota
 
(long)

DsQuota
 
(long)

值举例0000 0000 0000 0000ffff ffffffff ffff ffff ffffffff ffff ffff ffff

 

名称UsernameLen(var)Username
 
(bytes)
 

Groupname Len(var)Groupname
 
(bytes)

Permission
 
(short)

值举例067a68 6f75 6868
 
(zhouhh)

0a7375 7065 7267 726f 7570
 
(supergroup)

01ed

 
 
三、若从fsimage中读到的item是一个文件,则还会额外包含如下信息:
1.namelen(short):该文件的路径长度
2.Name(bytes): 该文件的路径,如”/user/zhouhh/README.txt”
3.replications(short):副本数,为dfs.replication配置数目,缺省为3
4.mtime(long):该文件的修改时间戳信息
5.atime(long):该文件的访问时间戳信息
6.blocksize(long)文件的blocksize,由dfs.block.size配置,缺省67108864,即0×4000000
7.numBlocks(int):实际有多少个文件块,文件的该值都>=1-1表示目录
8.blockid(long):属于该文件的blockblockid
9.numBytes(long):该block的大小
10.genStamp(long):该block的时间戳
11.username(String):该文件的所属用户名,前面有个可变长度的长度描述,最长为int
12.group(String):该文件的所属组,前面有个可变长度的长度描述,最长为int
13.permission(short):该文件的permission信息,如644,和POSIX权限保持一致
 
其中789三个部分是可以循环的,因为一个文件可以存在于多个block。文件没有配额信息。
文件,按顺序格式
我配的dfs.replication2

名称nameLen
 
(short)

name
 
(bytes)

Replication
 
(short)

ModificationTime
 
(long)

access time
 
(long)

值举例00172f75 7365 722f 7a68 6f75 6868 2f52 4541 444d 452e 7478 74 (/user/zhouhh/README.txt)000200 0001 3a01 2c3f 7800 0001 3bcb aba6 ca

 
 

名称preferred block size
 
(long)

Blocklen
 
(int)

值举例00 0000 0004 0000 000000 0001

 
Block 数据,循环 Blocklen

名称blockId(long)numBytes(long)generationStamp(long)
值举例00 0200 0001 3a01 2c00 0001 3a01 2c3f 7800 0001 3bcb aba6 ca

 
 

名称Usernamlen(var)Username
 
(bytes)
 

Groupnamelen(var)Groupname
 
(bytes)

Permission
 
(short)

值举例067a68 6f75 6868
 
(zhouhh)

0a7375 7065 7267 726f 7570
 
(supergroup)

01 a4

 
一个fsimage 16进制文件的一部分:

0000000: ffff ffe0 4e0a 6aed 0000 0000 0000 0046  ....N.j........F
0000010: 0000 0000 0000 044f 0000 0000 0000 013c  .......O.......<
0000020: 0adf 0430 0000 0000 0000 0000 0000 0000  ...0............
0000030: 0000 0000 ffff ffff 0000 0000 7fff ffff  ................
0000040: ffff ffff ffff ffff 067a 686f 7568 680a  .........zhouhh.
0000050: 7375 7065 7267 726f 7570 01ed 0005 2f64  supergroup..../d
0000060: 6174 6100 0000 0001 3c08 82c4 7e00 0000  ata.....
其中版本-32的值打印如下:

>>> vs=-32
>>> print "0x%08x"%(vs&0xffffffff)
0xffffffe0
public interface FSConstants {
public static int MAX_PATH_LENGTH = 8000;
public static final int LAYOUT_VERSION = -32;
}
  
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-313243-1-1.html 上篇帖子: Hadoop应用系列2--MapReduce原理浅析(上) 下篇帖子: Hadoop Hive sql语法详解5--HiveQL与SQL区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表