`
GQM
  • 浏览: 24928 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[笔记]hdfs namenode FSImage分析1

阅读更多
元数据文件fsimage的分析
fsimage为元数据镜像文件,存储的是某一时刻NameNode内存元数据信息,包括所有的INode信息、正在写入的文件信息以及其他的一些状态信息等。
引用
  /**
   * Save current image and empty journal into {@code current} directory.
   */
  protected void saveCurrent(StorageDirectory sd) throws IOException

当StorageDirectory的类型为NameNodeFile.IMAGE时,将FSImage持久化为../current/fsimage文件。
fsimage的部分结构分析如下:
intintlonglong...
LAYOUT_VERSIONnamespaceIDnumItemsInTreetimestampinodes

inodes为目录时的结构
shortbinaryshortlonglonglongintlonglongpermission
namelenname0modificationTime00-1nsquotadsquotapermission

inodes为文件时的结构
shortbinaryshortlonglonglongint...permission
namelennamereplicationmodificationTimeaccessTimepreferredBlockSizenumBlocksInFileblockspermission

permission的结构
TextTextshort
usernamegroupnamepermission

blocks的结构
longlonglong
blockIdnumBytestimestamp


解析某fsimage的结果
LAYOUT_VERSION:-41
namespaceID:1167023747
numItemsInTree:19
generationStamp:1012

node:{name:, modtime:1377679793059, nsquota:2147483647, dsquota:-1, permission:hue supergroup 755}
node:{name:/test, modtime:1377679792720, nsquota:-1, dsquota:-1, permission:hue supergroup 755}
node:{name:/tmp, modtime:1377679793059, nsquota:-1, dsquota:-1, permission:hue supergroup 755}
node:{name:/test/input, modtime:1377679736766, nsquota:-1, dsquota:-1, permission:hue supergroup 755}
node:{name:/test/output, modtime:1377679792720, nsquota:-1, dsquota:-1, permission:hue supergroup 755}
node:{name:/test/input/chapter1.txt, copys:2, blksize:67108864, blk:[{3939378972164311396,8976,1002}], modtime:1377679736766, acctime:1377679736766, permission:hue supergroup 644}
node:{name:/test/output/_SUCCESS, copys:2, blksize:67108864, blk:[], modtime:1377679792720, acctime:1377679792720, permission:hue supergroup 644}
node:{name:/test/output/_logs, modtime:1377679773673, nsquota:-1, dsquota:-1, permission:hue supergroup 755}
node:{name:/test/output/part-r-00000, copys:2, blksize:67108864, blk:[{5401467920515552367,6128,1011}], modtime:1377679787973, acctime:1377679787973, permission:hue supergroup 644}
node:{name:/test/output/_logs/history, modtime:1377679773673, nsquota:-1, dsquota:-1, permission:hue supergroup 755}
node:{name:/test/output/_logs/history/job_201308281640_0001_1377679773095_hue_word+count, copys:2, blksize:67108864, blk:[{-7275418827867675308,13833,1012}], modtime:1377679773322, acctime:1377679773322, permission:hue supergroup 644}
node:{name:/test/output/_logs/history/job_201308281640_0001_conf.xml, copys:2, blksize:67108864, blk:[{-4116164172580388309,47105,1010}], modtime:1377679773673, acctime:1377679773673, permission:hue supergroup 644}
node:{name:/tmp/hadoop-hue, modtime:1377679793059, nsquota:-1, dsquota:-1, permission:hue supergroup 755}
node:{name:/tmp/hadoop-hue/mapred, modtime:1377679793059, nsquota:-1, dsquota:-1, permission:hue supergroup 755}
node:{name:/tmp/hadoop-hue/mapred/staging, modtime:1377679793059, nsquota:-1, dsquota:-1, permission:hue supergroup 755}
node:{name:/tmp/hadoop-hue/mapred/system, modtime:1377679793049, nsquota:-1, dsquota:-1, permission:hue supergroup 700}
node:{name:/tmp/hadoop-hue/mapred/staging/hue, modtime:1377679793059, nsquota:-1, dsquota:-1, permission:hue supergroup 755}
node:{name:/tmp/hadoop-hue/mapred/staging/hue/.staging, modtime:1377679793059, nsquota:-1, dsquota:-1, permission:hue supergroup 700}
node:{name:/tmp/hadoop-hue/mapred/system/jobtracker.info, copys:2, blksize:67108864, blk:[{-7415943897866965603,4,1001}], modtime:1377679253906, acctime:1377679253906, permission:hue supergroup 600}

解析代码如下:
try (DataInputStream in = new DataInputStream(new BufferedInputStream(
				new FileInputStream(fileName)))) {
	System.out.printf("LAYOUT_VERSION:%s\n", in.readInt());
	System.out.printf("namespaceID:%s\n", in.readInt());
	long nodes = in.readLong();
	System.out.printf("numItemsInTree:%s\n", nodes);
	System.out.printf("generationStamp:%s\n\n", in.readLong());

	byte[] byteStore = new byte[4 * FSConstants.MAX_PATH_LENGTH];
	for (long i = 0; i < nodes; i++) {
		printINode(in, byteStore);
		Arrays.fill(byteStore, (byte) 0x00);
	}
}

	void printINode(DataInputStream in, byte[] byteStore)
			throws IOException {
		boolean isDir = true;
		short namelen = in.readShort();
		in.read(byteStore, 0, namelen);
		short replication = in.readShort();
		long modTime = in.readLong();
		long accessTime = in.readLong(); // access time
		long blockSize = in.readLong(); // preferred block size
		int blocks = in.readInt(); // # of blocks
		StringBuilder sb = new StringBuilder();
		long nsQuota = 0;
		long dsQuota = 0;
		if (blocks >= 0) {
			isDir = false;
			sb.append("[");
			for (int i = 0; i < blocks; i++) {
				sb.append("{").append(in.readLong()).append(",")
						.append(in.readLong()).append(",")
						.append(in.readLong()).append("}");
				if (i + 1 != blocks) {
					sb.append(",");
				}
			}
			sb.append("]");
		} else {
			nsQuota = in.readLong();
			dsQuota = in.readLong();
		}
		String userName = Text.readString(in);
		String groupName = Text.readString(in);
		short permit = in.readShort();
		if (isDir) {
			System.out
					.printf("node:{name:%s, modtime:%s, nsquota:%s, dsquota:%s, permission:%s %s %s}\n",
							new String(byteStore, 0, namelen), modTime,
							nsQuota, dsQuota, userName, groupName,
							Integer.toOctalString(permit));
		} else {
			System.out
					.printf("node:{name:%s, copys:%s, blksize:%s, blk:%s, modtime:%s, acctime:%s, permission:%s %s %s}\n",
							new String(byteStore, 0, namelen), replication,
							blockSize, sb.toString(), modTime, accessTime,
							userName, groupName, Integer.toOctalString(permit));
		}

	}
分享到:
评论

相关推荐

    个人笔记_hadoop-hdfs架构详解.docx

    HDFS的设计旨在处理超大文件,支持流式数据访问,具备高吞吐率、低成本、易扩展和高容错性等特点,为大数据分析提供了坚实的基础。 HDFS的核心特性之一是数据的分布式存储。在处理超过单台机器存储能力的数据集时,...

    大数据学习笔记

    1. Namenode的作用 Namenode是HDFS的主要组件,负责管理文件系统的名字空间。Namenode上保存着HDFS的名字空间,包括数据块到文件的映射、文件的属性等。Namenode使用EditLog来记录所有对文件系统元数据的修改操作,...

    hadoop3.x笔记.docx

    1. 启动 NameNode,加载 edits 和 fsimage。 2. 客户端传入元数据的增删改查请求,进入 NameNode 的 edits 中。 3. fsimage 每隔一段时间备份 edits 中的数据。 4. SecondaryNameNode 启动,检查是否需要把 edits 中...

    3.Hadoop学习笔记.pdf

    - NameNode的元数据信息存储在称为fsimage的文件中,而块的位置信息则通过DataNode报告。 - SecondaryNameNode并不是NameNode的热备份,它的主要作用是帮助合并编辑日志,以减少NameNode重启时加载元数据的时间。 ...

    Hadoop云计算2.0笔记第一课Hadoop介绍

    Secondary Namenode 负责并非 NameNode 的热备,辅助 NameNode,分担其工作量,定期合并 fsimage 和 fsedits,推送给 NameNode,在紧急情况下,可以辅助恢复 NameNode。 4. MapReduce(分布式计算框架): ...

    炼数成金,hadoop经典案例,1-4章书面作业

    删除新NameNode的fsimage文件,从SecondaryNameNode复制fsimage到NameNode的current目录下,最后重启集群,从而恢复NameNode的运行,并能够重新查看HDFS上的文件和目录。 4. HDFS块大小的调整 在HDFS中,块大小是...

    安装笔记:hadoop+hbase+sqoop2+phoenix+kerberos

    在Hadoop的HDFS系统中,NameNode维护的fsimage和edits文件是关键。fsimage是系统启动时加载的数据快照,而edits是之后的所有更改记录。SecondaryNameNode的作用在于定期合并fsimage和edits,创建检查点,以避免edits...

    hadoop笔记

    - **序列化并上传元数据**:将合并后的元数据序列化到磁盘,并上传给Namenode以替换原有的FsImage文件。 #### 三、Namenode启动流程 - **加载镜像文件**:加载FsImage文件,还原Checkpoint时间点前的元数据信息。 ...

    hadoop-day01-day03笔记

    - **Secondary NameNode**:辅助NameNode,周期性地合并fsimage和editlog文件,减小NameNode启动时间。 **安装HDFS集群的步骤**: 1. **准备Linux服务器**:选择合适的虚拟机或者物理机作为集群节点。 2. **配置...

    BJFU-大数据考点+PPT摘录.docx

    ### 大数据基础复习知识点详解 ...综上所述,本篇笔记全面介绍了大数据的基本概念、Hadoop的核心技术、HDFS的结构和功能、以及HDFS的特性和通信协议等方面的知识点,为大数据领域的学习者提供了详尽的学习资料。

Global site tag (gtag.js) - Google Analytics