2021年 全网最细大数据学习笔记:Hadoop 之 HDFS 进程详解

Posted Amo Xiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021年 全网最细大数据学习笔记:Hadoop 之 HDFS 进程详解相关的知识,希望对你有一定的参考价值。

一、学前必备知识

  1. 2021年 全网最细大数据学习笔记(一):初识 Hadoop
  2. 2021年 全网最细大数据学习笔记(二):Hadoop 伪分布式安装
  3. 2021年 全网最细大数据学习笔记(三):Hadoop 集群的搭建与配置
  4. 2021年 全网最细大数据学习笔记(四):Hadoop 之 HDFS的基本使用
  5. 2021年 全网最细大数据学习笔记(五):Zookeeper 集群

二、HDFS 概述

在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称为 分布式文件系统 。HDFS(Hadoop Distributed File System) 是 Apache Hadoop 项目的一个子项目。Hadoop 非常适于存储大型数据(比如 TB 和 PB),其就是使用 HDFS 作为存储系统。HDFS 使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统。
在这里插入图片描述
Doug Cutting 在做 Lucene 的时候,需要编写一个爬虫服务,这个爬虫写的并不顺利,遇到了一些问题,诸如:如何存储大规模的数据,如何保证集群的可伸缩性,如何动态容错等。2003 年的时候, Google 发布了三篇论文,被称作为三驾马车,其中有一篇叫做 GFS,是描述了 Google 内部的一个叫做 GFS 的分布式大规模文件系统,具有强大的可伸缩性和容错性。Doug Cutting 后来根据 GFS 的论文,创造了一个新的文件系统,叫做 HDFS
在这里插入图片描述

三、HDFS 应用场景

1、适合的应用场景

  1. 存储非常大的文件:这里非常大指的是几百M、G、或者 TB 级别,需要 高吞吐量,对延时没有要求。
  2. 采用流式的数据访问方式:即 一次写入、多次读取,数据集经常从数据源生成或者拷贝一次,然后在其上做很多分析工作,且不支持文件的随机修改 。
  3. 运行于商业硬件上:Hadoop 不需要特别贵的机器,可运行于普通廉价机器,可以 节约成本
  4. 需要高容错性。
  5. 为数据存储提供所需的 扩展能力

2、不适合的应用场景

  1. 低延时的数据访问。对延时要求在毫秒级别的应用,不适合采用 HDFS。HDFS 是为高吞吐数据传输设计的,因此可能 牺牲延时
  2. 大量小文件。文件的元数据保存在 NameNode 的内存中,整个文件系统的文件数量会受限于 NameNode 的内存大小。经验而言,一个文件/目录/文件块一般占有 150 字节的元数据内存空间。如果有 100 万个文件,每个文件占用 1 个文件块,则需要大约 300M 的内存。因此十亿级别的文件数量在现有商用机器上难以支持。
  3. 多方读写,需要任意的文件修改。HDFS 采用追加(append-only) 的方式写入数据。不支持文件任意 offset 的修改。不支持多个写入器(writer)。

综合:正因为如此,HDFS 适合用来做大数据分析的底层存储服务,并不适合用来做网盘等应用,因为,修改不方便,延迟大,网络开销大,成本太高。

四、HDFS 的架构

HDFS 是一个 主/从(Master/Slave) 体系结构,HDFS 由四部分组成,HDFS Client、NameNode、DataNode 和 Secondary NameNode。
在这里插入图片描述
1、Client:就是客户端。

  1. 文件切分。文件上传 HDFS 的时候,Client 将文件切分成一个一个的Block,然后进行存储。
  2. 与 NameNode 交互,获取文件的位置信息。
  3. 与 DataNode 交互,读取或者写入数据。
  4. Client 提供一些命令来管理和访问 HDFS,比如启动或者关闭 HDFS。

2、NameNode:就是 master,它是一个主管、管理者。

  1. 管理 HDFS 的名称空间。
  2. 管理数据块(Block)映射信息。
  3. 配置副本策略。
  4. 处理客户端读写请求。

3、DataNode:就是 Slave。NameNode 下达命令,DataNode 执行实际的操作。

  1. 存储实际的数据块。
  2. 执行数据块的读/写操作。

4、Secondary NameNode:并非 NameNode 的热备。当 NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务。

  1. 辅助 NameNode,分担其工作量。
  2. 定期合并 fsimage 和 fsedits,并推送给 NameNode。
  3. 在紧急情况下,可辅助恢复 NameNode。

在这大家可以这样理解,公司用户:Client,公司老板 BOSS:NameNode,秘书:Secondary NameNode 员工:DataNode。

五、HDFS 的副本机制

HDFS 被设计成能够在一个大集群中跨机器可靠地存储超大文件。它将每个文件存储成一系列的数据块,这个数据块被称为 Block,除了最后一个,所有的数据块都是同样大小的。为了容错,文件的所有 Block 都会有副本。每个文件的数据块大小和副本系数都是可配置的。所有的文件都是以 Block 块的方式存放在 HDFS 文件系统当中,作用如下:

  1. 一个文件有可能大于集群中任意一个磁盘,引入块机制,可以很好的解决这个问题。
  2. 使用块作为文件存储的逻辑单位可以简化存储子系统。
  3. 块非常适合用于数据备份进而提供数据容错能力。
  4. 副本优点是安全,缺点是占空间。

在 Hadoop1.x 当中, 文件的 block 块默认大小是 64M,hadoop3.x 当中,文件的 Block 块大小默认是 128M(134217728字节)。假设文件大小是 100GB,从字节位置 0 开始,每 128MB 字节划分为一个 Block,以此类推,可以划分出很多的 Block。每个 Block 就是 128MB 大小。我们可以在/data/soft/hadoop-3.2.0/share/hadoop/hdfs/ 路径中,找到 hadoop-hdfs-3.2.0.jar 文件,这个文件中包含了 HDFS 相关的所有默认参数,咱们在配置集群的时候会修改一个 hdfs-site.xml 文件,hdfs-site.xml 文件属于 hdfs-default.xml 的一个扩展,它可以覆盖掉 hdfs-default.xml 中同名的参数。将 hadoop-hdfs-3.2.0.jar 包拉取到 Windows 桌面,解压,用记事本打开 hdfs-default.xml 文件,可以查看到 Block 块默认大小,如下:
在这里插入图片描述
Block 块的大小可以通过 hdfs-site.xml 当中的配置文件进行指定,Hadoop 默认的副本数为 3,hdfs-default.xml 查看如下:
在这里插入图片描述
我们在 hdfs-site.xml 配置副本数为,查看如下:
在这里插入图片描述
副本图示如下:
在这里插入图片描述
HDFS 副本放置策略(机架感知)

HDFS 分布式文件系统的内部有一个副本存放策略,默认副本数为 3,在这里以副本数 =3 为例:

  1. 第一副本:优先放置到离写入客户端最近的 DataNode 节点,如果上传节点就是 DataNode,则直接上传到该节点,如果是集群外提交,则随机挑选一台磁盘不太满,CPU 不太忙的节点。
  2. 第二个副本:放置在于第一个副本不同的机架的节点上(随机选择)。
  3. 第三个副本:与第二个副本相同机架的不同节点中。
    在这里插入图片描述

六、HDFS 的安全模式

安全模式是 Hadoop 的一种保护机制,用于保证集群中的数据块的安全性。当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。大家在平时操作 HDFS 的时候,有时候可能会遇到这个问题,特别是刚启动集群的时候去上传或者删除文件,会发现报错,提示 NameNode 处于safe mode。这个属于 HDFS 的安全模式,因为在集群每次重新启动的时候,HDFS 都会检查集群中文件信息是否完整,例如副本是否缺少之类的信息,所以这个时间段内是不允许对集群有修改操作的,如果遇到了这个情况,可以稍微等—会,等 HDFS 自检完毕,就会自动退出安全模式。如下图所示:
在这里插入图片描述
接下来访问 HDFS 的 web ui 界面,可以看到下面信息,on 表示处于安全模式,off 表示安全模式已结束,如下图所示:
在这里插入图片描述
还比如:假设我们设置的副本数(即参数 dfs.replication)是 3,那么在 DataNode上就应该有 3 个副本存在,假设只存在 2 个副本,那么比例就是 2/3=0.666。hdfs 默认的副本率 0.999。我们的副本率 0.666 明显小于 0.999,因此系统会自动的复制副本到其他 DataNode,使得副本率不小于 0.999。如果系统中有 5 个副本,超过我们设定的 3 个副本,那么系统也会删除多于的 2 个副本。 在安全模式状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。在当整个系统达到安全标准时,HDFS 自动离开安全模式。安全模式操作命令:

[root@bigdata01 bin]# hdfs dfsadmin -safemode get  # 查看安全模式状态
Safe mode is OFF
[root@bigdata01 bin]# hdfs dfsadmin -safemode enter  # 进入安全模式
Safe mode is ON
[root@bigdata01 bin]# hdfs dfsadmin -safemode leave  # 离开安全模式
Safe mode is OFF

七、HDFS 的数据读写流程

7.1 HDFS 写数据流程

详细步骤解析:

  1. client 发起文件上传请求,通过 RPC 与 NameNode 建立通讯,NameNode 检查目标文件是否已存在,父目录是否存在,返回是否可以上传;
  2. client请求第一个 block该传输到哪些DataNode服务器上。
  3. NameNode 根据配置文件中指定的备份数量及副本放置策略进行文件分配,返回可用的 DataNode 的地址,如:A、B、C。
  4. client 请求 3 台 DataNode 中的一台 A 上传数据(本质上是一个 RPC 调用,建立pipeline),A 收到请求会继续调用 B,然后 B 调用 C,将整个pipeline 建立完成,后逐级返回 client。
  5. client 开始往 A 上传第一个 block(先从磁盘读取数据放到一个本地内存缓存),以 packet 为单位(默认64K),A 收到一个 packet 就会传给 B,B 传给C;A 每传一个 packet 会放入一个应答队列等待应答。
  6. 数据被分割成一个个 packet 数据包在 pipeline 上依次传输,在 pipeline 反方向上,逐个发送 ack(命令正确应答),最终由 pipeline 中第一个 DataNode 节点 A 将 pipeline ack 发送给 client。
  7. 当一个 block 传输完成之后,client 再次请求 NameNode 上传第二个 block 到服务器。

详细步骤如下图:
在这里插入图片描述

7.2 HDFS 读数据流程

  1. Client 向 NameNode 发起 RPC 请求,来确定请求文件 block 所在的位置。
  2. NameNode 会视情况返回文件的部分或者全部 block 列表,对于每个 block,NameNode 都会返回含有该 block 副本的 DataNode地址。
  3. 这些返回的 DN 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时汇报的 DN 状态为 STALE,这样的排靠后。
  4. Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是DataNode,那么将从本地直接获取数据;底层上本质是建立 Socket Stream (FSDataInputStream),重复的调用父类 DataInputStream 的 read 方法,直到这个块上的数据读取完毕。
  5. 当读完列表的 block 后,若文件读取还没有结束,客户端会继续向 NameNode 获取下一批的 block 列表。
  6. 读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,客户端会通知 NameNode,然后再从下一个拥有该 block 副本的 DataNode 继续读。
  7. read 方法是并行的读取 block 信息,不是一块一块的读取;NameNode 只是返回 Client 请求包含块的 DataNode 地址,并不是返回请求块的数据;最终读取来所有的 block 会合并成一个完整的最终文件。

详细步骤图:
在这里插入图片描述

八、HDFS 的回收站

我们 Windows 系统里面有一个回收站,当想恢复删除的文件的话就可以到这里面进行恢复,HDFS 也有回收站。HDFS会为每一个用户创建一个回收站目录: /user/用户名/.Trash/,每一个被用户在 Shell 命令行删除的文件/目录,会进入到对应的回收站目录中,在回收站中的数据都有一个生存周期,也就是当回收站中的文件/目录在一段时间之内没有被用户恢复的话,HDFS 就会自动的把这个文件/目录彻底删除,之后,用户就永远也找不回这个文件/目录了。默认情况下 hdfs 的回收站是没有开启的,需要通过一个配置来开启,在 core-site.xml 中添加如下配置, value 的单位是分钟,1440 分钟表示是一天的生存周期。

【示例1】没有开启回收站删除文件。如下图所示:
在这里插入图片描述
停掉集群,开启回收站:

-- 1. 停止集群
[root@bigdata01 hadoop]# sbin/stop-all.sh
--2.cd /data/soft/hadoop-3.2.0/etc/hadoop 目录,找到 core-site.xml 文件,修改如下:
<property>
        <name>fs.trash.interval</name>
        <value>1440</value>
</property>

--3.将core-site.xml 文件同步到其他两个节点
[root@bigdata01 hadoop-3.2.0]# scp -rq etc/hadoop/core-site.xml bigdata02:/data/soft/hadoop-3.2.0/etc/hadoop/
[root@bigdata01 hadoop-3.2.0]# scp -rq etc/hadoop/core-site.xml bigdata03:/data/soft/hadoop-3.2.0/etc/hadoop/

启动集群,再执行删除文件操作:

[root@bigdata01 hadoop-3.2.0]# sbin/start-all.sh
[root@bigdata01 hadoop-3.2.0]# hadoop fs -ls /
[root@bigdata01 hadoop-3.2.0]# hadoop fs -rm /winin.txt     
2021-06-18 02:55:22,419 INFO fs.TrashPolicyDefault: Moved: 'hdfs://bigdata01:9000/winin.txt' to trash at: hdfs://bigdata01:9000/user/root/.Trash/Current/winin.txt
You have new mail in /var/spool/mail/root

此时看到提示信息说把删除的文件移到到了指定目录中,其实就是移动到了当前用户的回收站目录。回收站的文件也是可以下载到本地的。其实在这回收站只是一个具备了特殊含义的 HDFS 目录。

注意:如果删除的文件过大,超过回收站大小的话会提示删除失败。需要指定参数 -skipTrash,指定这个参数表示删除的文件不会进回收站。如下:

[root@bigdata01 hadoop-3.2.0]# hadoop fs -rm -skipTrash /test.txt 
Deleted /test.txt

九、NameNode、HDFS 的元数据辅助管理详解

首先是 NameNode,NameNode 是整个文件系统的管理节点。它主要维护着整个文件系统的文件目录树,文件/目录的信息和每个文件对应的数据块列表,并且还负责接收用户的操作请求。

  1. 目录树:表示目录之间的层级关系,就是我们在 HDFS 上执行 ls 命令可以看到的那个目录结构信息。
  2. 文件/目录的信息:表示文件/目录的的一些基本信息,所有者属组修改时间文件大小等信息。
  3. 每个文件对应的数据块列表:如果一个文件太大,那么在集群中存储的时候会对文件进行切割,这个时候就类似于会给文件分成一块一块的,存储到不同机器上面。所以 HDFS 还要记录一下一个文件到底被分了多少块,每一块都在什么地方存储着。在浏览器地址栏输入 http://bigdata01:9870/explorer.html#/ ,集群的 9870 界面查看:
    在这里插入图片描述
    随便找一个文件看一下,点击文件名称,可以看到 Blockinformation 但是文件太小,只有一个块叫 Block 0,如下图所示:

    上传一个大的文件,再来查看一下,命令:[root@bigdata01 ~]# hadoop fs -put /data/soft/hadoop-3.2.0.tar.gz /
  4. 接收用户的操作请求:其实我们在命令行使用 hdfs 操作的时候,是需要先和 NameNode 通信才能开始去操作数据的。

NameNode 是非常重要的,它的这些信息最终是会存储到文件上的,那接下来我们来看一下 NameNode 中包含的那些文件,NameNode 主要包括以下文件:

这些文件所在的路径是由 hdfs-default.xml 的 dfs.namenode.name.dir 属性控制的,搭建环境不同,则每个人的保存目录不同,如果说你在hdfs-site.xml文件中进行了配置,那你保存目录在hdfs-site.xml文件中查看。

hdfs-default.xml 文件在 2021年 全网最细大数据学习笔记(五):Zookeeper 集群 一文中,已经告知如何查找,这里笔者不再赘述。我们来查看一下这个文件中的 dfs.namenode.name.dir 属性:
在这里插入图片描述
这个属性的值是由 hadoop.tmp.dir 属性控制的,这个属性的值默认在 core-default.xml 文件中。在 2021年 全网最细大数据学习笔记(三):Hadoop 集群的搭建与配置 一文中,搭建集群的时候,修改 core-site.xml 文件时,设置的有 hadoop.tmp.dir 属性的值,值是 /data/hadoop_repo,所以说 core-site.xml 中的 hadoop.tmp.dir 属性会覆盖掉 core-default.xml 中的值。最终 dfs.namenode.name.dir 属性的值就是:/data/hadoop_repo/dfs/name,在 bigdata01 节点上查看一下:
在这里插入图片描述
current 目录,表示当前的意思,还有一个 in_use.lock 这个只是一个普通文件,但是它其实有特殊的含义,文件名后缀值 lock 表示是锁的意思,文件名是 in_use 表示这个文件现在正在使用,不允许你再启动 NameNode。当我们启动 NameNode 的时候会判断这个目录下是否有 in_use.lock 这个相当于一把锁,如果没有的话,才可以启动成功,启动成功之后就会加一把锁,停止的时候会把这个锁去掉。
在这里插入图片描述
里面有 edits 文件和 fsimage 文件。fsimage文件有两个文件名相同的,有一个后缀是 md5。 md5 是一种加密算法,这个其实主要是为了做 md5 校验的,为了保证文件传输的过程中不出问题,相同内容的 md5 是一样的,所以后期如果我把这个 fsimage 和对应的 fsimage.md5 发给你然后你根据 md5 对 fsimage 的内容进行加密,获取一个值和 fsimage.md5 中的内容进行比较,如果一样,说明你接收到的文件就是完整的。我们在网站下载一些软件的时候也会有一些 md5 文件,方便验证下载的文件是否完整。
在这里插入图片描述
在这里可以把 fsimage 拆开 fs 是文件系统 filesystem image 是镜像。说明是文件系统镜像,就是给文件照了一个像,把文件的当前信息记录下来。我们可以看一下这个文件,这个文件需要使用特殊的命令进行查看:

-i 输入文件
-o 输出文件
[root@bigdata01 current]# hdfs oiv -p XML -i fsimage_0000000000000000590 -o fsimage59.xml
2021-06-18 18:59:31,490 INFO offlineImageViewer.FSImageHandler: Loading 5 strings
2021-06-18 18:59:31,525 INFO namenode.FSDirectory: GLOBAL serial map: bits=29 maxEntries=536870911
2021-06-18 18:59:31,525 INFO namenode.FSDirectory: USER serial map: bits=24 maxEntries=16777215
2021-06-18 18:59:31,525 INFO namenode.FSDirectory: GROUP serial map: bits=24 maxEntries=16777215
2021-06-18 18:59:31,525 INFO namenode.FSDirectory: XATTR serial map: bits=24 maxEntries=16777215

把 fsimage59.xml 这个文件拉取到 Windows 上,进行查看:
在这里插入图片描述
内容如下:

<?xml version="1.0"?>
<fsimage><version><layoutVersion>-65</layoutVersion><onDiskVersion>1</onDiskVersion><oivRevision>e97acb3bd8f3befd27418996fa5d4b50bf2e17bf</oivRevision></version>
<NameSection><namespaceId>1475726213</namespaceId><genstampV1>1000</genstampV1><genstampV2>1063</genstampV2><genstampV1Limit>0</genstampV1Limit><lastAllocatedBlockId>1073741887</lastAllocatedBlockId><txid>590</txid></NameSection>
<ErasureCodingSection>
<erasureCodingPolicy>
<policyId>5</policyId><policyName>RS-10-4-1024k</policyName><cellSize>1048576</cellSize><policyState>DISABLED</policyState><ecSchema>
<codecName>rs</codecName><dataUnits>10</dataUnits><parityUnits>4</parityUnits></ecSchema>
</erasureCodingPolicy>

<erasureCodingPolicy>
<policyId>2</policyId><policyName>RS-3-2-1024k</policyName><cellSize>1048576</cellSize><policyState>DISABLED</policyState><ecSchema>
<codecName>rs</codecName><dataUnits>3</dataUnits><parityUnits>2</parityUnits></ecSchema>
</erasureCodingPolicy>

<erasureCodingPolicy>
<policyId>1</policyId><policyName>RS-6-3-1024k</policyName><cellSize>1048576</cellSize><policyState>ENABLED</policyState><ecSchema>
<codecName>rs</codecName><dataUnits>6</dataUnits><parityUnits>3</parityUnits></ecSchema>
</erasureCodingPolicy>

<erasureCodingPolicy>
<policyId>3</policyId><policyName>RS-LEGACY-6-3-1024k</policyName><cellSize>1048576</cellSize><policyState>DISABLED</policyState><ecSchema>
<codecName>rs-legacy</codecName><dataUnits>6</dataUnits><parityUnits>3</parityUnits></ecSchema>
</erasureCodingPolicy>

<erasureCodingPolicy>
<policyId>4</policyId><policyName>XOR-2-1-1024k</policyName><cellSize>1048576</cellSize><policyState>DISABLED</policyState><ecSchema>
<codecName>xor</codecName><dataUnits>2</dataUnits><parityUnits>1</parityUnits></ecSchema>
</erasureCodingPolicy>

</ErasureCodingSection>

<INodeSection><lastInodeId>16482</lastInodeId><numInodes>62</numInodes><inode><id>16385</id><type>DIRECTORY</type><name></name><mtime>1623956242604</mtime><permission>root:supergroup:0755</permission><nsquota>9223372036854775807</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16386</id><type>DIRECTORY</type><name>user</name><mtime>1617954462011</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16387</id><type>DIRECTORY</type><name>root</name><mtime>1623956122405</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16400</id><type>DIRECTORY</type><name>tmp</name><mtime>1617954463053</mtime><permission>root:supergroup:0700</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16401</id><type>DIRECTORY</type><name>hadoop-yarn</name><mtime>1617954463053</mtime><permission>root:supergroup:0700</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16402</id><type>DIRECTORY</type><name>staging</name><mtime>1617954466444</mtime><permission>root:supergroup:0700</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16403</id><type>DIRECTORY</type><name>root</name><mtime>1617954463053</mtime><permission>root:supergroup:0700</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16404</id><type>DIRECTORY</type><name>.staging</name><mtime>1617954494367</mtime><permission>root:supergroup:0700</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16410</id><type>DIRECTORY</type><name>history</name><mtime>1617954466444</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16411</id><type>DIRECTORY</type><name>done_intermediate</name><mtime>1617954466451</mtime><permission>root:supergroup:1777</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16412</id><type>DIRECTORY</type><name>root</name><mtime>1617954493336</mtime><permission>root:supergroup:0770</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16425</id><type>FILE</type><name>job_1617952142345_0001.summary</name><replication>2</replication><mtime>1617954493272</mtime><atime>1617954493257</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0770</permission><blocks><block><id>1073741843</id><genstamp>1019</genstamp><numBytes>449</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16426</id><type>FILE</type><name>job_1617952142345_0001-1617954463624-root-QuasiMonteCarlo-1617954493243-10-1-SUCCEEDED-default-1617954468038.jhist</name><replication>2</replication><mtime>1617954493299</mtime><atime>1617954493282</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0770</permission><blocks><block><id>1073741844</id><genstamp>1020</genstamp><numBytes>56010</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16427</id><type>FILE</type><name>job_1617952142345_0001_conf.xml</name><replication>2</replication><mtime>1617954493330</mtime><atime>1617954493305</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0770</permission><blocks><block><id>1073741845</id><genstamp>1021</genstamp><numBytes>218831</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16428</id><type>DIRECTORY</type><name>test</name><mtime>1623955431776</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16429</id><type>DIRECTORY</type><name>amo</name><mtime>1617963314707</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16430</id><type>DIRECTORY</type><name>demo</name><mtime>1617963314707</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16431</id><type>DIRECTORY</type><name>dir1</name><mtime>1617963606504</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16432</id><type>DIRECTORY</type><name>dir2</name><mtime>1617963606504</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16433</id><type>DIRECTORY</type><name>dir3</name><mtime>1617963606504</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16435</id><type>FILE</type><name>readme.txt</name><replication>2</replication><mtime>1618033000212</mtime><atime>1618033000108</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741847</id><genstamp>1023</genstamp><numBytes>71</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16436</id><type>FILE</type><name>readme2.txt</name><replication>2</replication><mtime>1618033191428</mtime><atime>1618033191314</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741848</id><genstamp>1024</genstamp><numBytes>71</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16437</id><type>FILE</type><name>readme3.txt</name><replication>2</replication><mtime>1618033191448</mtime><atime>1618033191436</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741849</id><genstamp>1025</genstamp><numBytes>71</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16438</id><type>DIRECTORY</type><name>etc</name><mtime>1618033427550</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16439</id><type>DIRECTORY</type><name>hadoop</name><mtime>1618033428208</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16440</id><type>FILE</type><name>hadoop-env.cmd</name><replication>2</replication><mtime>1618033427709</mtime><atime>1618033427580</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741850</id><genstamp>1026</genstamp><numBytes>3999</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16441</id><type>FILE</type><name>hadoop-metrics2.properties</name><replication>2</replication><mtime>1618033427737</mtime><atime>1618033427722</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741851</id><genstamp>1027</genstamp><numBytes>3321</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16442</id><type>FILE</type><name>hadoop-policy.xml</name><replication>2</replication><mtime>1618033427759</mtime><atime>1618033427743</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741852</id><genstamp>1028</genstamp><numBytes>11392</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16443</id><type>FILE</type><name>hadoop-user-functions.sh.example</name><replication>2</replication><mtime>1618033427778</mtime><atime>1618033427764</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741853</id><genstamp>1029</genstamp><numBytes>3414</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16444</id><type>FILE</type><name>ssl-client.xml.example</name><replication>2</replication><mtime>1618033427793</mtime><atime>1618033427782</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741854</id><genstamp>1030</genstamp><numBytes>2316</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16445</id><type>FILE</type><name>ssl-server.xml.example</name><replication>2</replication><mtime>1618033427810</mtime><atime>1618033427797</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741855</id><genstamp>1031</genstamp><numBytes>2697</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16446</id><type>FILE</type><name>log4j.properties</name><replication>2</replication><mtime>1618033427826</mtime><atime>1618033427813</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741856</id><genstamp>1032</genstamp><numBytes>13994</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16447</id><type>DIRECTORY</type><name>shellprofile.d</name><mtime>1618033427846</mtime><permission>root:supergroup:0755</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16448</id><type>FILE</type><name>example.sh</name><replication>2</replication><mtime>1618033427844</mtime><atime>1618033427833</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741857</id><genstamp>1033</genstamp><numBytes>3880</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16449</id><type>FILE</type><name>user_ec_policies.xml.template</name><replication>2</replication><mtime>1618033427864</mtime><atime>1618033427849</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741858</id><genstamp>1034</genstamp><numBytes>2642</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16450</id><type>FILE</type><name>yarn-env.cmd</name><replication>2</replication><mtime>1618033427881</mtime><atime>1618033427869</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741859</id><genstamp>1035</genstamp><numBytes>2250</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16451</id><type>FILE</type><name>yarn-env.sh</name><replication>2</replication><mtime>1618033427897</mtime><atime>1618033427886</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741860</id><genstamp>1036</genstamp><numBytes>6056</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16452</id><type>FILE</type><name>container-executor.cfg</name><replication>2</replication><mtime>1618033427913</mtime><atime>1618033427900</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741861</id><genstamp>1037</genstamp><numBytes>1940</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16453</id><type>FILE</type><name>yarnservice-log4j.properties</name><replication>2</replication><mtime>1618033427929</mtime><atime>1618033427916</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741862</id><genstamp>1038</genstamp><numBytes>2591</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16454</id><type>FILE</type><name>capacity-scheduler.xml</name><replication>2</replication><mtime>1618033427945</mtime><atime>1618033427934</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741863</id><genstamp>1039</genstamp><numBytes>8260</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16455</id><type>FILE</type><name>configuration.xsl</name><replication>2</replication><mtime>1618033427959</mtime><atime>1618033427949</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741864</id><genstamp>1040</genstamp><numBytes>1335</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16456</id><type>FILE</type><name>mapred-env.cmd</name><replication>2</replication><mtime>1618033427976</mtime><atime>1618033427963</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741865</id><genstamp>1041</genstamp><numBytes>951</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16457</id><type>FILE</type><name>mapred-env.sh</name><replication>2</replication><mtime>1618033427993</mtime><atime>1618033427981</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741866</id><genstamp>1042</genstamp><numBytes>1764</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16458</id><type>FILE</type><name>mapred-queues.xml.template</name><replication>2</replication><mtime>1618033428007</mtime><atime>1618033427997</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741867</id><genstamp>1043</genstamp><numBytes>4113</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16459</id><type>FILE</type><name>httpfs-env.sh</name><replication>2</replication><mtime>1618033428021</mtime><atime>1618033428011</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741868</id><genstamp>1044</genstamp><numBytes>1484</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16460</id><type>FILE</type><name>httpfs-log4j.properties</name><replication>2</replication><mtime>1618033428034</mtime><atime>1618033428024</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741869</id><genstamp>1045</genstamp><numBytes>1657</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16461</id><type>FILE</type><name>httpfs-signature.secret</name><replication>2</replication><mtime>1618033428048</mtime><atime>1618033428038</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741870</id><genstamp>1046</genstamp><numBytes>21</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16462</id><type>FILE</type><name>httpfs-site.xml</name><replication>2</replication><mtime>1618033428065</mtime><atime>1618033428052</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741871</id><genstamp>1047</genstamp><numBytes>620</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16463</id><type>FILE</type><name>kms-acls.xml</name><replication>2</replication><mtime>1618033428081</mtime><atime>1618033428069</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741872</id><genstamp>1048</genstamp><numBytes>3518</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16464</id><type>FILE</type><name>kms-env.sh</name><replication>2</replication><mtime>1618033428095</mtime><atime>1618033428085</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741873</id><genstamp>1049</genstamp><numBytes>1351</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16465</id><type>FILE</type><name>kms-log4j.properties</name><replication>2</replication><mtime>1618033428108</mtime><atime>1618033428098</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741874</id><genstamp>1050</genstamp><numBytes>1860</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16466</id><type>FILE</type><name>kms-site.xml</name><replication>2</replication><mtime>1618033428124</mtime><atime>1618033428113</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741875</id><genstamp>1051</genstamp><numBytes>682</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16467</id><type>FILE</type><name>hadoop-env.sh</name><replication>2</replication><mtime>1618033428137</mtime><atime>1618033428127</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741876</id><genstamp>1052</genstamp><numBytes>16803</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16468</id><type>FILE</type><name>core-site.xml</name><replication>2</replication><mtime>1618033428151</mtime><atime>1618033428141</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741877</id><genstamp>1053</genstamp><numBytes>991</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16469</id><type>FILE</type><name>hdfs-site.xml</name><replication>2</replication><mtime>1618033428164</mtime><atime>1618033428154</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741878</id><genstamp>1054</genstamp><numBytes>994</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16470</id><type>FILE</type><name>mapred-site.xml</name><replication>2</replication><mtime>1618033428179</mtime><atime>1618033428167</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741879</id><genstamp>1055</genstamp><numBytes>862</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16471</id><type>FILE</type><name>yarn-site.xml</name><replication>2</replication><mtime>1618033428193</mtime><atime>1618033428183</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741880</id><genstamp>1056</genstamp><numBytes>1105</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16472</id><type>FILE</type><name>workers</name><replication>2</replication><mtime>1618033428207</mtime><atime>1618033428198</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741881</id><genstamp>1057</genstamp><numBytes>20</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16474</id><type>FILE</type><name>hadoopetc.txt</name><replication>2</replication><mtime>1618033972211</mtime><atime>1618033972120</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741883</id><genstamp>1059</genstamp><numBytes>591</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16478</id><type>FILE</type><name>winin.txt</name><replication>3</replication><mtime>1618043087108</mtime><atime>1618043086530</atime><preferredBlockSize>134217728</preferredBlockSize><permission>AmoXiang:supergroup:0644</permission><blocks><block><id>1073741886</id><genstamp>1062</genstamp><numBytes>25</numBytes></block>
</blocks>
<storagePolicyId>0</storagePolicyId></inode>
<inode><id>16481</id><type>DIRECTORY</type><name>.Trash</name><mtime>1623974400041</mtime><permission>root:supergroup:0700</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
<inode><id>16482</id><type>DIRECTORY</type><name>210618080000</name><mtime>1623956122416</mtime><permission>root:supergroup:0700</permission><nsquota>-1</nsquota><dsquota>-1</dsquota></inode>
</INodeSection>
<INodeReferenceSection></INodeReferenceSection><SnapshotSection><snapshotCounter>0</snapshotCounter><numSnapshots>0</numSnapshots></SnapshotSection>
<INodeDirectorySection><directory><parent>16385</parent><child>16431</child><child>16428</child><child>16400</child><child>16386</child></directory>
<directory><parent>16386</parent><child>16387</child></directory>
<directory><parent>16387</parent><child>16481</child></directory>
<directory><parent>16400</parent><child>16401</child></directory>
<directory><parent>16401</parent><child>16402</child></directory>
<directory><parent>16402</parent><child>16410</child><child>16403</child></directory>
<directory><parent>16403</parent><child>16404</child></directory>
<directory><parent>16410</parent><child>16411</child></directory>
<directory><parent>16411</parent><child>16412</child></directory>
<directory><parent>16412</parent><child>16426</child><child>16425</child><child>16427</child></directory>
<directory><parent>16428</parent><child>16429</child><child>16438</child><child>16474</child><child>16435</child><child>16436</child><child>16437</child></directory>
<directory><parent>16429</parent><child>16430</child></directory>
<directory><parent>16431</parent><child>16432</child></directory>
<directory><parent>16432</parent><child>16433</child></directory>
<directory><parent>16438</parent><child>16439</child></directory>
<directory><parent>16439</parent><child>16454</child><child>16455</child><child>16452</child><child>16468</child><child>16440</child><child>16467</child><child>16441</child><child>16442</child><child>16443</child><child>16469</child><child>16459</child><child>16460</child><child>16461</child><child>16462</child><child>16463</child><child>16464</child><child>16465</child><child>16466</child><child>16446</child><child>16456</child><child>16457</child><child>16458</child><child>16470</child><child>16447</child><child>16444</child><child>16445</child><child>16449</child><child>16472</child><child>16450</child><child>16451</child><child>16471</child><child>16453</child></directory>
<directory><parent>16447</parent><child>16448</child></directory>
<directory><parent>16481</parent><child>16482</child></directory>
<directory><parent>16482</parent><child>16478</child></directory>
</INodeDirectorySection>
<FileUnderConstructionSection></FileUnderConstructionSection>
<SecretManagerSection><currentId>0</currentId><tokenSequenceNumber>0</tokenSequenceNumber><numDelegationKeys>0</numDelegationKeys><numTokens>0</numTokens></SecretManagerSection><CacheManagerSection><nextDirectiveId>1</nextDirectiveId><numDirectives>0</numDirectives><numPools>0</numPools></CacheManagerSection>
</fsimage>

里面最外层是一个 fsimage 标签,看里面的 inode 标签,这个 inode 表示是 hdfs 中的每一个目录或者文件信息,例如下面这个:

<inode><id>16468</id><type>FILE</type><name>core-site.xml</name><replication>2</replication><mtime>1618033428151</mtime><atime>1618033428141</atime><preferredBlockSize>134217728<

以上是关于2021年 全网最细大数据学习笔记:Hadoop 之 HDFS 进程详解的主要内容,如果未能解决你的问题,请参考以下文章

2022年全网最细 AndroidStudio 安装配置学习笔记

2022年全网最细 AndroidStudio 安装配置学习笔记

❤万字长文JS全网最细笔记①(全网最强,建议收藏)❤

❤万字长文JS全网最细笔记2️⃣(全网最强,建议收藏)❤

全网最细Spark 基础面试题

全网最细笔记java与kotlin的一些异同