一. INode类图
二. INode
- We keep an in-memory representation of the file/block hierarchy.This is a base INode class containing common fields for file and directory inodes.INode是文件层次结构的反应。
- INode两个子类:INodeDirectory代表文件目录;INodeFile对应文件。INodeDirectoryWithQuota代表带容量限制的目录,限制了INodeDirectory的使用空间,包含namespace和磁盘空间;INodeFileUnderConstruction代表正在构建的文件,因为有些文件创建时间比较长,目录系统用INodeFileUnderConstruction维护这一信息。
- INode
abstract class INode implements Comparable<byte[]> { protected byte[] name; //文件/目录名 protected INodeDirectory parent; //父目录 protected long modificationTime; //最后修改时间 protected long accessTime; //最后访问时间 private long permission; //permission是访问权限。HDFS采用了和UNIX/Linux类似的访问控制机制。 //系统维护了一个类似于UNIX系统的组表(group)和用户表(user),并给每一个组和用户一个ID //permission在INode中是long型,它同时包含了组和用户信息。 }
三. INodeDirectory
- INodeDirectory是HDFS管理的目录的抽象。
- INodeDirectory维护着多个INode。其方法不外乎增删改查这些INode。
private List<INode> children;
四.DatanodeID
- DatanodeID代表一个DataNode,包含了DataNode的配置信息。
public String name; // hostname:port (data transfer port) public String storageID; // unique per cluster storageID protected int infoPort; // info server port public int ipcPort; // ipc server port
五.DatanodeInfo
- DatanodeInfo继承DatanodeID。
- DatanodeInfo增加了一些动态信息。
protected long capacity; protected long dfsUsed; protected long remaining; protected long lastUpdate; protected int xceiverCount;
六.DatanodeDescriptor
- DatanodeDescriptor继承DatanodeInfo。
- DatanodeDescriptor增加了DataNode上block的动态信息。
- DatanodeDescriptor.BlockTargetPair:代表一个block和此block所处DataNodes的信息的对应关系。
public final Block block; public final DatanodeDescriptor[] targets;
- DatanodeDescriptor.BlockQueue:维护者一系列BlockTargetPair。
private final Queue<BlockTargetPair> blockq = new LinkedList<BlockTargetPair>();
- DatanodeDescriptor维护者一个BlockInfo和两个BlockQueue和一个Set<Block>。
private volatile BlockInfo blockList = null; /** A queue of blocks to be replicated by this datanode */ //该DataNode上正在复制(replicateBlocks)的Block private BlockQueue replicateBlocks = new BlockQueue(); /** A queue of blocks to be recovered by this datanode */ //该DataNode上正在Lease恢复(recoverBlocks)的Block private BlockQueue recoverBlocks = new BlockQueue(); /** A set of blocks to be invalidated by this datanode */ //该DataNode上已经失效的Block private Set<Block> invalidateBlocks = new TreeSet<Block>();
七.BlockInfo
- BlockInfo继承Block。
- BlockInfo保存了该Block归属的INodeFile和DatanodeDescriptor,同时还包括了它的前继和后继Block。
private INodeFile inode; private Object[] triplets;
- 一个BlockInfo结构如下,tripltes[0]指向此BlockInfo所在的DatanodeDescriptor,tripltes[1]指前继BlockInfo,tripltes[2]指向后继BlockInfo。
八.BlocksMap
- BlocksMap保存了一系列Block到BlockInfo对应关系的。
private GSet<Block, BlockInfo> blocks;
- 结合上图可知,有了BlocksMap,就可以通过Block找对应的文件和这个Block所存放的DataNode的相关信息。
九.INodeFile
- INodeFile是HDFS管理文件的抽象。
- 一个INodeFile对应着多Block。如上图示。
protected BlockInfo blocks[]
十.分析一条线
- http://zy19982004.iteye.com/blog/1890775文中三.8我们提到:定期调用namenode.blockReport()发送block report 告诉NameNode此DataNode上的block信息。接着分析:
- 看看远程RPC代理类NameNode的blockReport()方法,调用namesystem.processReport(DatanodeRegistration, blockList)。
public DatanodeCommand blockReport(DatanodeRegistration nodeReg, long[] blocks) throws IOException { namesystem.processReport(nodeReg, blist); }
- FSNamesystem的processReport方法:找到是哪个DataNode发送过来的信息;执行此DataNode的reportDiff方法,找出和现在FSNamesystem维护着的block的差别;FSNamesystem修改差别。
public synchronized void processReport(DatanodeID nodeID, BlockListAsLongs newReport ) throws IOException { DatanodeDescriptor node = getDatanode(nodeID); // // Modify the (block-->datanode) map, according to the difference // between the old and new block report. // node.reportDiff(blocksMap, newReport, toAdd, toRemove, toInvalidate); ... }
- DatanodeDescriptor.reportDiff(...newReport...):分析差别。因为DatanodeDescriptor保存着此DataNode上所有Block的动态信息,把newReport(就是2里面的blockList)与之比较即可。
十一.说明
本文有些地方并没有完全区分BlockInfo和Block,为了理解的方便,我会把BlockInfo当成Block;同样的我会把DatanodeDescriptor,DatanodeInfo当成DaNode。
相关推荐
在Hadoop技术中,HDFS(Hadoop Distributed File System)是一个关键组件,它为大规模数据存储提供了可扩展、可靠的分布式文件系统。本篇主要聚焦于HDFS的目录树结构及其管理,帮助理解如何在Hadoop环境中操作文件和...
### Hadoop学习总结之二:深入理解HDFS读写过程 #### 一、HDFS文件读取流程详解 Hadoop的分布式文件系统(HDFS)是大数据存储与处理的重要基石,其读写机制的设计旨在优化大规模数据集的访问效率与容错性。本文将...
在 Tomcat 中观察运行结果,可以发现出现了 Exception“org.apache.hadoop.security.AccessControlException: Permission denied: user=bikun,access=WRITE, inode="/user":user:supergroup:drwxr-xr-x”。...
本文将详细解析HDFS的读取和写入过程,基于标题"《Hadoop学习总结之二:HDFS读写过程解析》"和描述中提到的代码分析。 1. **文件的打开** 当客户端想要打开一个HDFS文件时,它会调用`DistributedFileSystem.open`...
hadoop-hdfs Hadoop分布式文件系统hdfs代码分析目录介绍Datanode-数据块基本结构主要介绍了HDFS中第二关系块结构,数据块到数据中断的映射关系。退役-中断退款主要介绍了数据异步下线取消机制。INode-文件目录结构...
第1章 HDFS 1 1.1 HDFS概述 1 1.1.1 HDFS体系结构 1 1.1.2 HDFS基本概念 2 1.2 HDFS通信协议 4 1.2.1 Hadoop RPC接口 4 1.2.2 流式接口 20 1.3 HDFS主要流程 22 1.3.1 HDFS客户端读流程 22 1.3.2 ...
这个特定的错误日志"org.apache.hadoop.security.AccessControlException: Permission denied: user=xudsa, access=WRITE, inode="/uploaddemo1.txt":hadoop:supergroup:-rw-r--r--"表明用户"xudsa"试图对文件"/...
- **Hadoop文件系统**:Hadoop Distributed File System (HDFS) 是Hadoop的核心组件之一,用于存储大量数据。 - **主要数据结构**:Hadoop中的数据结构主要包括文件块(Block)、文件系统元数据等。 - 文件块:HDFS...
6.2.2 Hadoop源码本地Build 6.2.3 NFS服务器构建 6.2.4 Avatar分发与部署 6.2.5 Primary(namenode0)节点配置 6.2.7 Data Node节点配置 6.2.8 Client节点配置 6.2.9 创建目录 6.2.10 挂载NFS 6.2.11 启动Ucarp 6.2....
Exception in thread main org.apache.hadoop.security.AccessControlException: Permission denied: user=L.MOON, access=WRITE, inode=/user/lsy/result1/_temporary/0:lsy:supergroup:drwxr-xr-x Caused by: org....
#### 二、HDFS系统架构 **1. NameNode** - **职责**:作为HDFS集群的大脑,NameNode负责管理文件系统的命名空间和客户端对文件的访问。其内存中存储了文件系统的元数据,包括文件和目录的信息以及它们对应的block...
本文将聚焦于Hadoop中的`FSDirectory`类,它是HDFS(Hadoop分布式文件系统)核心组件之一,负责维护文件系统目录树的状态。通过分析其成员变量与方法,我们可以更好地理解HDFS是如何管理文件目录状态、数据块以及...
【HDFS Snapshot快照】是Hadoop分布式文件系统(HDFS)中的一种功能,它提供了在特定时刻对文件系统或特定目录状态的记录。与传统的数据备份不同,快照不创建数据的完整副本,而是记录文件系统在某一时刻的状态,...
- **设置HADOOP_USER_NAME环境变量:**在系统的环境变量或Java JVM变量中添加`HADOOP_USER_NAME`,其值应为具有足够权限的HDFS用户。 - **更改当前系统账户:**将当前系统账户更改为Hadoop。 - **使用HDFS命令行接口...
维护HDFS文件系统中...寻路径流程:路径信息bocks[]triplets[]Client------------》INode---------------------》BlockInfo --------------------------》DataNode。INode:文件的基本元素:文件和目录BlockInfo:文
该平台基于Apache Hadoop构建,并包含了多个重要的Hadoop生态系统项目,如MapReduce、Hadoop Distributed File System (HDFS)、HCatalog、Pig、Hive、HBase、Zookeeper等。此外,Ambari也是HDP平台的重要组成部分之...
* 机器学习:Ambari 能够帮助用户快速部署和管理 Hadoop 集群,用于机器学习和数据挖掘 结论 Ambari 是一个功能强大且易于使用的集群管理平台,能够帮助用户快速部署、管理和监控 Hadoop 集群。通过学习 Ambari ...
HDP集成了Hadoop生态系统中的核心项目,如 **MapReduce**、**Hadoop Distributed File System (HDFS)**、**HCatalog**、**Pig**、**Hive**、**HBase** 和 **Zookeeper** 等,并且包括了 **Ambari** 这样的管理工具。...