HDFS支持主从结构,主节点称为NameNode,NameNode支持多个;从节点称为DataNode,从节点上面运行的有DataNode进程,DataNode支持多个;HDFS中还包含一个SecondaryNameNode进程;他们的关系有点类似于:

  • 公司BOSS:NameNode
  • 秘书: SecondaryNameNode
  • 员工: DataNode

image-20230904165145867

# NameNode

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

  • 文件/目录的信息:表示文件/目录的的一些基本信息,所有者、属组、修改时间、文件大小等信息;
  • 每个文件对应的数据块列表:如果一个文件太大,那么在集群中存储的时候会对文件进行切割,这个时候就类似于会给文件分成一块一块的,存储到不同机器上面。所以HDFS还要记录一下一个文件到底被分了多少块,每一块都在什么地方存储着。

NameNode主要包含以下几个文件:

  1. VERSION:这个文件存储了NameNode的版本信息,用于在启动时检查NameNode的版本一致性。
  2. fsimage:这个文件包含了文件系统的镜像,也就是文件系统的状态快照。NameNode会定期生成fsimage文件,并将其保存到磁盘上,以便在出现故障时进行恢复。
  3. edits:这个文件存储了NameNode对fsimage所做的编辑操作,例如创建、删除、移动文件等。这些编辑操作会被持久化到磁盘上,以确保数据的完整性。

# SecondaryNameNode

SecondaryNameNode主要负责定期的把edits文件中的内容合并到fsimage中,这个合并操作称为checkpoint,在合并的时候会对edits中的内容进行转换生成新的内容保存到fsimage文件中。

注意:在NameNode的HA架构中没有SecondaryNameNode进程,文件合并操作会由standbyNameNode负责实现,所以在Hadoop集群中,SecondaryNameNode进程并不是必须的。

# DataNode

DataNode是提供真实文件数据的存储服务针对datanode主要掌握两个概念,block和replication

  • blodk:HDFS会按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block, HDFS默认Block大小是128MB;Blokc块是HDFS读写数据的基本单位,不管你的文件是文本文件还是视频或者音频文件,针对hdfs而言都是字节。
  • replication:数据的副本数量,用于提高数据的可靠性和容错能力。

# HDFS回收站

HDFS回收站默认是不开启的,我们需要修改配置来开启回收站功能,因此第一步是停止Hadoop服务,下面的操作需要在所有节点上都操作一遍。

[root@bigdata01 ~]# cd /usr/local/soft/hadoop/hadoop-3.2.3
[root@bigdata01 hadoop-3.2.3]# sbin/stop-all.sh
[root@bigdata01 hadoop-3.2.3]# vi etc/hadoop/core-site.xml 

修改后的内容如下,1440表示1440分钟也就是一天,一天内没有恢复的话就会永久删除。

<configuration>
  <property>
        <name>fs.defaultFS</name>
        <value>hdfs://bigdata01:9000</value>
    </property>
    <property>
        <name>hadoop.tem.dir</name>
        <value>/data/hadoop_repo</value>
    </property>
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
</configuration>

然后重新启动即可,如果某些文件确定不需要了想直接删除不经过回收站,该如何操作呢?--加上-skipTrash参数即可。

[root@bigdata01 hadoop-3.2.3]# hdfs dfs -rm -skipTrash /user.txt

# HDFS的安全模式

操作HDFS的时候,有时候可能会遇到这个问题,特别是刚启动集群的时候去.上传或者删除文件,会发现报错,提示NameNode处于safe mode。

这个属于HDFS的安全模式,因为在集群每次重新启动的时候,HDFS都会检查集群中文件信息是否完整,例如副本是否缺少之类的信息,所以这个时间段内是不允许对集群有修改操作的,如果遇到了这个情况,可以稍微等一会, 等HDFS自检完毕,就会自动退出安全模式。