FSNamesystem几个重要的成员变量

2019-03-28 13:24|来源: 网络

FSNamesystem中有几个非常重要的变量,对于理解NameNode的实现具有重要意义。下面,我们看一下这几个变量和他的作用。

 

  • lblocksMap:blocksMap是类BlocksMap的实例,其代表了Block→{INodedatanodes}的映射。具体代表了每一个Block在哪一个DataNode上存储。
  • datanodeMap:datanodeMap是类NavigableMap的实例,代表了datanode→block之间的映射关系。该mapkeyStorageIDvalueDatanodeDescriptor,即<String, DatanodeDescriptor>。该Map一般在下面三种情况下会被修改:

 

1.added to the map if it is a new storage id

2.Updated with a new datanode started as a replacement for the old one with the  same storage id

3.Remove if and only if an existing datanode is restarted to serve a different  storage id

 

  • corruptReplicas:corruptReplicasCorruptReplicasMap的一个实例。corruptReplicas保存了文件系统中所有的损坏block。注意,只有一个block的所有备份存储都损坏才认为该block是损坏的。其保存的形式如下,一个block和所有保存该blockdatanodeBlock→TreeSet<DatanodeDescriptor> 
  • host2DataNodeMap:host2DataNodeMap是类Host2NodesMap的实例,它保存了主机名到datanode之间的映射关系,即ip:port→DatanodeDescriptor的映射关系。
  • dir:dirFSDirectory的实例,他里面包含了INodeFileINodeDirectory的层次结构。INodeFileINodeDirectory分别对应硬盘上的文件和目录。每一个INodeFile都包含了该文件所拥有的所有的数据块,即dir保存了file→blocks的映射。

相关问答

更多
  • 由队长王浩、副队长赵泳鑫、团员檀健次、肖顺尧、池约翰五个男孩组合而成。
  • 当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关。 静态数据成员的用途之一是统计有多少个对象实际存在。 静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在够造函数中初始化该成员,因为静态数据成员为类的各个对象共享,那么每次创建一个类的对象则静态数据成员都要被重新初始化。
  • 跟定义单例中的对象一样,用private static final修饰就可以了啊。。。增加get方法(set方法加不了,因为是不可改变的),这样他的成员变量你直接用类名来点相应的get方法就可以了。。。唯一的不可变的
  • 方法是没有访问级别的,跟ObjectiveC跟C(不是C++)是类似的。 C里面定义了方法,但是如果不给出声明,别人调用时候是找不到的(虽然自己声明一个一模一样的方法也可以)。ObjectiveC也是一样,所有方法都没有访问保护级别(@property属性也是方法的一种) 只有一种有访问级别,就是大括号里面定义的成员变量,里面有public和private,貌似是没有protected的概念(可能有,但是我完全不用的)。 ObjectiveC 2.0以上已经很少需要自己定义成员变量了。@synthesize ...
  • 有时vc编译器会莫名其妙出问题,尤其是6.0。建议你clean清除项目,重新编译。
  • 不是的,,成员变量相当于程序集变量,,而全局变量是指在这个整个的程序内都可以使用这一个变量。而成员变量如果切换到另一个程序集后就不能使用了,纯属手打望最佳
  • 实际上,java里面,在同一个作用域下,不能定义一样的标识符(也就是你做说的变量名)。为什么呢?因为,他需要保证你在某个作用于下使用某个标识符的时候,JVM能够正确进行区分!所以,实际上,全局变量和局部变量和内存并不存在绝对直接的关系。实际上,不管是全局的还是局部的变量,他的标识都是保存在栈里面的。 成员变量作用域在整个类,方法中为什么可以再重复定义? 因为在java中,局部定义的变量能够覆盖全局范围内的变量。在局部使用某个变量的时候JVM会优先找和当前使用位置"近"的变量的的定义!如果在局部定义了和全局变 ...
  • 是否应该使用受保护的成员变量? 取决于你对隐藏状态的挑剔。 如果你不想要任何内部状态的泄漏,那么将所有的成员变量声明为私有的就是要走的路。 如果你真的不在乎子类可以访问内部状态,那么保护就够了。 如果一个开发人员来到这个类,那么你可以把它们分类,因为他们完全不了解它们。 私人会员除了公共界面外,他们无法看到实现方式的具体细节,这些细节是如何进行的,这些细节可以让您稍后进行更改。 Should you ever use protected member variables? Depends on how pi ...
  • 这是因为您已经通过类的__init__方法将board分配给了Game类,而不是单个实例,从而导致Game每个实例共享相同的Game.board属性。 为了确保每个实例都有自己的独立值,需要使用__init__ : def __init__(self, name): self.name = name self.board = [1, 2, 3] 如果你希望board成为具有潜在违约价值的可转让论证,如果你写了类似的东西,你将再次陷入类似的陷阱 def __init_ ...