Block是HDFS中的最基本单位是对数据块的抽象,它通过一个final long(blkid)来进行标识。一个Block拥有三个longs,它们分别是block-id 、block length和generation stamp。Block名的格式是”blk”+blkid。通过set和get等方法能够得到关于Block的id、name、len等信息
一个Block对应着两个文件,其中一个存数据,一个存放元数据信息。它的元数据信息文件的格式如下:”blk_”+blkid+”_”+version.meta
和Block相关的类如下所示:
private long blockId;
例如${hadoop.tmp.dir}/dfs/data/current /blk_826540629399449945,这一串数字就是blockId
blockId 是block编号
private long numBytes;
blockId 是文件实际大小
private long generationStamp;
类似个时间戳,每次修改加1
在equals中用到 generationStamp
在hashcode没有用到generationStamp
文件名称和block的转换
static long filename2id(String name) {
return Long.parseLong(name.substring("blk_".length()));
}
public boolean public boolean equals(Object o) { if (!(o instanceof Block)) { return false; } final Block that = (Block)o; //Wildcard generationStamp is ALLOWED here return this.blockId == that.blockId && GenerationStamp.equalsWithWildcard( this.generationStamp, that.generationStamp); }
/** {@inheritDoc} */ public int hashCode() { //GenerationStamp is IRRELEVANT and should not be used here return 37 * 17 + (int) (blockId^(blockId>>>32)); }(Object o) { if (!(o instanceof Block)) { return false; } final Block that = (Block)o; //Wildcard generationStamp is ALLOWED here return this.blockId == that.blockId && GenerationStamp.equalsWithWildcard( this.generationStamp, that.generationStamp); }
/** {@inheritDoc} */ public int hashCode() { //GenerationStamp is IRRELEVANT and should not be used here return 37 * 17 + (int) (blockId^(blockId>>>32)); }
分享到:
相关推荐
### Microsoft Data Access Application Block 源代码解析 #### 标题与描述中的核心知识点 - **Microsoft Data Access Application Block**:这是一个由微软提供的用于简化数据访问逻辑的应用程序块,主要面向.NET...
这个【标题】"hadoop-2.0.4官方源代码"代表着Hadoop的2.0.4版本的原始代码,这是一次重要的发布,因为它引入了许多改进和新特性。【描述】"hadoop-2.0.4官方源代码"简洁明了地指出了该压缩包的内容,即Hadoop的源码...
【俄罗斯方块Java源代码】是一个关于编程领域的项目,它提供了使用Java语言实现经典游戏“俄罗斯方块”的全部源代码。这个项目对于学习Java编程、游戏开发或者对算法有兴趣的人来说非常有价值。通过阅读和理解这些源...
在深入分析Linux MTD源代码之前,我们需要理解一些基本概念。 1. **MTD层次结构**:MTD将闪存设备分为几个层次,包括设备层、分区层和块层。设备层直接对应物理设备,如NAND或Nor闪存;分区层是对设备的逻辑划分,...
例如,当用户按下左箭头键时,源代码会调用Block的move方法向左移动当前的方块。 除了基本的游戏逻辑,一个完整的MFC俄罗斯方块程序还可能包含一些额外的功能,如设置菜单、音效支持、高分保存等。这些功能可以通过...
在GitHub上的YOLOv5源代码提供了完整的训练、测试和部署流程,方便开发者进行自定义数据集的训练和模型优化。 **YOLOv5的架构** YOLO(You Only Look Once)系列的目标检测框架以其单阶段检测方法著称,即直接预测...
标题提及的"FreeBSD 7.0 内核源代码2"表明这是该版本内核源代码的第二部分,由于文件大小限制被分割。这部分源代码包括多个子目录,每个子目录对应内核的不同组件或子系统,下面将逐一介绍这些子目录及其包含的知识...
《俄罗斯方块源代码解析:探索游戏编程的绝对简单之道》 俄罗斯方块,这款经典的电子游戏,以其独特的魅力和简单的玩法风靡全球。对于初学者来说,它是一个绝佳的入门项目,因为其源代码相对简洁,易于理解。本文将...
这个项目的源代码是学习和理解CSS布局、样式和设计原则的宝贵资源。以下是对这个项目及其源代码的详细解读: 1. **CSS基础知识**:在源代码中,你可以看到CSS如何定义元素的字体、颜色、大小、位置等属性,从而理解...
【标题】:俄罗斯方块是经典的电子游戏,其java源代码是学习编程和游戏开发的宝贵资源。在Java编程环境中,开发者可以理解如何利用面向对象编程原则构建游戏逻辑,实现图形用户界面(GUI)以及处理事件。 【描述】...
《俄罗斯方块源代码》是基于C#编程语言实现的一款经典游戏。俄罗斯方块作为一款流传广泛的休闲益智游戏,其源代码具有重要的学习价值,尤其是对于初学者来说,能够帮助他们理解游戏开发的基本原理和C#编程的核心概念...
源代码中可能包含了游戏的核心逻辑类,如“Block”(方块)、“Board”(游戏板)和“Game”(游戏控制)等,每个类都封装了相应的功能。 MFC是微软为Windows平台提供的一个C++库,用于简化Windows应用程序的开发。...
Fatal Python error: PyFrame_BlockPop: block stack underflow 源代码
Linux 0.11 源代码是 Linux 内核早期的一个版本,它为学习和理解操作系统内核的运作机制提供了宝贵的资源。这个版本的源代码对于初学者来说是一个很好的起点,因为它相对简单且易于理解,同时伴随着丰富的注释教程,...
YOLOv8的源代码是该算法的核心部分,它包含了模型架构、训练脚本、数据预处理逻辑以及推理模块等关键组件。下面我们将详细探讨YOLOv8源代码中的关键知识点。 首先,YOLOv8的模型架构是对先前YOLO版本的改进和优化。...
### 深入云计算 Hadoop源代码分析 #### 一、引言 随着大数据时代的到来,数据处理成为了各个领域中的关键技术之一。Hadoop作为一个开源的大数据处理框架,因其优秀的分布式计算能力,在业界得到了广泛的应用。...
源代码中会包含多个类,如GameBoard(游戏板)、Block(方块)、Player(玩家)等,这些类通过封装各自的数据和行为,实现了游戏的各个组件。同时,可能会有继承关系,比如一个基础的Shape类,其他具体的方块形状类...
【Linux0.01内核源代码及注释】是早期Linux操作系统的核心代码,它展示了Linux发展的起点。这个源代码包含了一系列的汇编语言和C语言编写的基本系统组件,用于启动计算机、初始化硬件、管理内存、处理输入输出设备...