`

namenode维护的变量有哪些

 
阅读更多

  之前的blog都是讲namenode的动态行为,今天来分析下静态数据,例如namenode到底维护了哪些变量。

namenode的主要工作都在FSNamesystem这个类中(有4749行代码),这里为了分析方便,我将用真实的例子来讲,例如我将文件的分块大小设置为512字节,这样是为了方便测试,然后我从本地copy了一个622字节的文件到hdfs文件系统上,这样文件就会被分为2块了,从datanode的存储数据目录看(/home/dikar/hadoop/tmp/dfs/data/current)一共生成了2个块文件,第一个块文件大小为512字节,第二个块文件大小为110字节(比较悲剧的是我的文件按照字节截取后再合起来就不是我之前的那个文件了,他没有考虑到我文件自身换行的完整性),我这里有2个datanode节点,第一个节点的ip是10.0.18.121 第二个节点的ip是10.0.18.122。以下是datanode中各个文件的信息

121节点上的  VERSION文件

Java代码   收藏代码
  1. #Sat Mar  12   15 : 55 : 05  CST  2011   
  2. namespaceID=1257554030   
  3. storageID=DS-863408884 - 127.0 . 0.1 - 50010 - 1299916505769   
  4. cTime=0   
  5. storageType=DATA_NODE  
  6. layoutVersion=-18   

 122节点上的  VERSION文件

Java代码   收藏代码
  1. #Sat Mar  12   15 : 54 : 37  CST  2011   
  2. namespaceID=1257554030   
  3. storageID=DS-2139341662 - 127.0 . 0.1 - 50010 - 1299916477580   
  4. cTime=0   
  5. storageType=DATA_NODE  
  6. layoutVersion=-18   

 这里127.0.0.1是我的机器名对应的ip,因为在host文件里有127.0.0.1和机器名的对应关系,故先取的127.0.0.1这个ip了,其实应该是取真实的eth接口上的ip地址,不过这个只是显示的问题。

注意到namespaceID都是一样的,其实这个是namenode上的id,我们可以看下namenode上VERSION文件的内容

Java代码   收藏代码
  1. #Sat Mar  12   21 : 59 : 56  CST  2011   
  2. namespaceID=1257554030   
  3. cTime=0   
  4. storageType=NAME_NODE  
  5. layoutVersion=-18   

 我上传到hdfs上保存的文件名是test55,然后因为分块在datanode上生成了2个文件(2个datanode上的都是一样),2个分块后的文件名是

Java代码   收藏代码
  1. blk_- 3134592920494009076   
  2. blk_-6874669727371532738   

 有了上面的信息描述,那么我们就进入到FSNamesystem中看它在内存中维护了哪些变量。

 

Java代码   收藏代码
  1. // datanode networktoplogy   
  2. NetworkTopology clusterMap = new  NetworkTopology();  

   这个维护网络拓扑关系,因为我对机架采取的是默认配置,故都在一个机架上,这里保存的内容如下

 

Java代码   收藏代码
  1. Number of racks:  1   
  2. Expected number of leaves:2   
  3. /default -rack/ 10.0 . 18.122 : 50010   
  4. /default -rack/ 10.0 . 18.121 : 50010   

   针对取最近节点的算法还是不错的,以后专门写一篇来分析下。

Java代码   收藏代码
  1. DNSToSwitchMapping dnsToSwitchMapping  

   这个保存的数据内容如下:(比较简洁)

 

Java代码   收藏代码
  1. 10.0 . 18.122 =/ default -rack  
  2. 10.0 . 18.121 =/ default -rack  

   以上2个都是和节点网络远近算法相关的数据。

 

Java代码   收藏代码
  1. Host2NodesMap host2DataNodeMap =  new  Host2NodesMap()  

   这个保存的是datanode的ip与datanode描述对象的一个映射关系,保存的数据内容如下

Java代码   收藏代码
  1. 10.0 . 18.122 =org.apache.hadoop.hdfs.server.namenode.DatanodeDescriptor; @18e95d9   
  2. 10.0 . 18.121 =org.apache.hadoop.hdfs.server.namenode.DatanodeDescriptor; @10098b   

 针对DatanodeDescriptor对象我会单独一篇文章来讲。

接下来是最重要的2个数据变量了,也是占内存比较大的。

Java代码   收藏代码
  1. /**  
  2.    * Stores the datanode -> block map.  
  3.    * <p>  
  4.    * Done by storing a set of {@link DatanodeDescriptor} objects, sorted by  
  5.    * storage id. In order to keep the storage map consistent it tracks  
  6.    * all storages ever registered with the namenode.  
  7.    * A descriptor corresponding to a specific storage id can be  
  8.    * <ul>  
  9.    * <li>added to the map if it is a new storage id;</li>  
  10.    * <li>updated with a new datanode started as a replacement for the old one  
  11.    * with the same storage id; and </li>  
  12.    * <li>removed if and only if an existing datanode is restarted to serve a  
  13.    * different storage id.</li>  
  14.    * </ul> <br>  
  15.    * The list of the {@link DatanodeDescriptor}s in the map is checkpointed  
  16.    * in the namespace image file. Only the {@link DatanodeInfo} part is  
  17.    * persistent, the list of blocks is restored from the datanode block  
  18.    * reports.  
  19.    * <p>  
  20.    * Mapping: StorageID -> DatanodeDescriptor  
  21.    */   
  22.   
  23.   NavigableMap<String, DatanodeDescriptor> datanodeMap =  
  24.     new  TreeMap<String, DatanodeDescriptor>();  

   内存里数据格式大概如下

 

Js代码   收藏代码
  1. {  
  2. key:"DS-2139341662-127.0.0.1-50010-1299916477580"   
  3. value:DatanodeDescriptor{  
  4.         storageId:DS-2139341662-127.0.0.1-50010-1299916477580  
  5.         blockInfo{  
  6.             INodeFile{  
  7.             name:test55  
  8.             blocks:[blk_-3134592920494009076_1002,      
  9.                         blk_-6874669727371532738_1002]  
  10.             }  
  11.         }  
  12.   
  13. }  
  14. key:"DS-863408884-127.0.0.1-50010-1299916505769"   
  15. value:DatanodeDescriptor{  
  16.          storageId:DS-863408884-127.0.0.1-50010-1299916505769  
  17.          blockInfo{  
  18.             INodeFile{  
  19.             name:test55  
  20.             blocks:[blk_-3134592920494009076_1002,      
  21.                         blk_-6874669727371532738_1002]  
  22.             }  
  23. }  
  24. }  

 

   DatanodeDescriptor中保存了block的信息,这个等分析DatanodeDescriptor再说。

 

Java代码   收藏代码
  1. /**  
  2.  * This class maintains the map from a block to its metadata.  
  3.  * block's metadata currently includes INode it belongs to and  
  4.  * the datanodes that store the block.  
  5.  */   
  6. BlocksMap blocksMap   

    BlocksMap中具体管存储的是

 

Java代码   收藏代码
  1. Map<BlockInfo, BlockInfo> map  

    对于BlockInfo我也会在后面安排专门的文章来分析。

    我们来看下BlocksMap里的内存数据

    因为map里的key value都是一样的,故只列出key

Java代码   收藏代码
  1. {  
  2. key1/value1 :BlockInfo{  
  3.         blockId:-6874669727371532738   
  4.         INodeFIle{  
  5.              name:test55  
  6.               blocks:[blk_-3134592920494009076_1002,  
  7.                           blk_-6874669727371532738_1002]  
  8.          }  
  9.       }  
  10. key2/value2:BlockInfo{  
  11.         blockId:-3134592920494009076   
  12.         INodeFIle{  
  13.              name:test55  
  14.               blocks:[blk_-3134592920494009076_1002,  
  15.                           blk_-6874669727371532738_1002]  
  16.          }  
  17.       }  
  18.   
  19. }  

 针对INodeFile也需要单独的一篇来分析。

更多信息请查看 java进阶网 http://www.javady.com

分享到:
评论

相关推荐

    [hadoop] ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes

    同时,其他变量如`HDFS_DATANODE_USER` 对应DataNode用户,`HADOOP_SECURE_DN_USER` 用于安全DNS,以及`HDFS_SECONDARYNAMENODE_USER` 是备用NameNode的用户。 3. 同样的,对于处理YARN(Yet Another Resource ...

    hadoop集群安装、配置、维护文档

    以上各步骤都需要对Hadoop架构有深入理解,包括HDFS、YARN和MapReduce的工作原理。在实际操作中,还要考虑集群的安全性,如设置防火墙规则,使用安全认证机制如Kerberos,以及监控和日志管理。维护Hadoop集群还包括...

    Hadoop源代码分析(三七)

    在这一过程中,NameNode和Secondary NameNode的存储系统经历了一系列状态转换,这些状态转移有助于确保数据的一致性和完整性。同时,文件系统上的目录也会相应变化,如edits和fsimage文件的更新。 通过以上分析,...

    Hadoop大数据平台构建、HDFS配置、启动与验证教学课件.pptx

    在构建Hadoop大数据平台的过程中,HDFS(Hadoop Distributed File System)是至关重要的组件,它提供了高容错性和高吞吐量的数据存储解决方案。...理解这些步骤对于管理和维护Hadoop集群至关重要。

    大数据开发技术.pdf

    1. 元数据管理:NameNode维护整个HDFS的目录树结构,即文件的目录结构及文件分块位置信息,这被称为元数据。它记录了每个文件对应的block块信息,如block ID和所在的DataNode服务器。 2. 文件块映射:NameNode负责...

    GZ-2019032-F卷-评分标准.pdf

    【知识点详解】 本文档涉及的是全国职业院校技能大赛高职组“大数据技术与应用”赛项中的Hadoop High Availability (HA) 部署与管理,主要涵盖了...理解并熟练掌握这些知识,有助于构建和维护高可用的大数据处理系统。

    Hadoop源代码分析(二七)

    在本篇文章中,我们将深入探讨Hadoop中的NameNode组件,特别是`NameNode.java`文件中的关键成员变量及其功能实现。此外,我们还将讨论与这些成员变量相关的接口,并通过具体的例子来说明它们是如何工作的。 #### 二...

    Hadoop知识点笔记

    * Secondary Namenode:负责辅助Namenode,维护文件系统的元数据的副本。 2. YARN(Yet Another Resource Negotiator) YARN是Hadoop的资源管理器,主要负责管理Hadoop集群的资源分配和任务调度。YARN的主要组件...

    hadoop多集群搭建.docx

    masters文件在Hadoop中用于标识哪些节点是NameNode。在搭建多集群环境时,由于JournalNode(JN)将接管NameNode的角色,因此不再需要masters文件,需要删除。 3. **配置HDFS-site.xml**: 这是Hadoop分布式文件...

    hdfs-3.3.1安装及维护

    配置 Hadoop 的 Java 环境,包括设置 JAVA_HOME、HDFS_NAMENODE_USER、HDFS_DATANODE_USER、HDFS_SECONDARYNAMENODE_USER 等环境变量。 2.4 配置 core-site.xml 配置 core-site.xml 文件,包括设置 fs.defaultFS ...

    Apache Hadoop面试题

    #### 一、启动Hadoop集群会分别启动哪些进程?各自的作用是什么? 1. **NameNode**: - **功能**:维护整个HDFS文件系统的目录树结构,记录文件与目录之间的层级关系。它还负责记录文件中各个数据块在DataNode上的...

    大数据技术之Hadoop(生产调优手册)V3.3.pdf

    2. **Hadoop 2.x系列配置**:在Hadoop 2.x版本中,可以通过编辑`hadoop-env.sh`文件中的`HADOOP_NAMENODE_OPTS`变量来设置NameNode的最大堆内存(`-Xmx`参数)。 3. **Hadoop 3.x系列配置**:Hadoop 3.x版本中,...

    【大数据】Hadoop常用启动命令.pdf

    这对于有针对性的故障排查和维护非常有用。 当首次启动Hadoop集群或需要遵循特定顺序启动时,建议按照以下步骤进行: 1. 首先启动HDFS的守护进程: - `hadoop-daemons.sh start namenode`: 启动NameNode,它是...

    hadoop2.4.1

    相较于之前的版本,Hadoop 2.4.1在性能、稳定性以及安全性方面都有显著提升。 #### 二、Hadoop HA(High Availability) Hadoop HA是指在一个Hadoop集群中,通过配置多个NameNode来实现系统的高可用性。在Hadoop ...

    Hadoop_HDFS安装和管理.pdf

    - **修改主机名**:确保每个节点有唯一的主机名,这有助于在集群环境中区分各个节点。 - **创建HDFS用户**:创建一个统一的`hdfs`用户账户,便于后续的操作和维护。 - **更新/etc/hosts文件**:在所有节点上更新/etc...

    Hadoop-0.21.0分布式集群配置

    【Hadoop-0.21.0分布式集群配置...总之,配置Hadoop-0.21.0分布式集群需要对网络配置、目录结构、环境变量、配置文件和启动流程有深入理解。正确配置后,Hadoop可以提供高扩展性和容错性,为大数据处理提供强大的支撑。

    04-大数据技术之高频面试题9.0.5.pdf

    - NameNode维护着整个文件系统的元数据,包括文件和目录的信息以及Block的分布情况。 - 为了提高性能,NameNode将所有元数据加载到内存中。 - 需要合理配置内存大小以支持大量文件和目录的管理。 #### 1.2.6 纠删码...

    hadoop面试题汇总

    - **解释**: NameNode维护着文件系统的元数据,并将这些信息存储在内存中以及硬盘上的两个文件中:日志文件和命名空间镜像文件。 #### 14. Namenode与数据块信息 - **知识点**: Namenode不会直接存储数据块信息。 -...

    HA-Hadoop集群搭建教程(图文+视频)1

    在实际操作中可能会遇到各种问题,如网络不通、配置错误等,记录并解决这些问题的经验,有助于提高部署和维护效率。 总结来说,这个教程覆盖了从基础环境准备到集群配置、启动、监控和故障恢复的整个流程,对理解...

Global site tag (gtag.js) - Google Analytics