HDFS细节

时间:2023-01-01 13:18:52

DFS架构图

HDFS细节

知识点

1.HDFS Hadoop Distributed File System  Hadoop的分布式文件系统,可以存储海量数据(文件,图片,影音等),实际工作中,一般存储的都是用户的访问日志(.txt)

2.HDFS之所以能够存储海量数据,原因是一个可扩展的分布式架构,硬盘存储空间不够,加服务器即可。

3.HDFS是基于Google的一篇论文《Google File System》

4.namenode,名字节点。最主要的职责是管理和存储HDFS的元数据信息(比如文件名,文件大小,文件切块的数量,每个文件块的大小,文件块编号,存储在哪个datanode上),可以通过指令:

hadoop  fsck  /park01/1.txt  -files  -blocks -locations

5.namenode不存储文件块

6.namenode除了存储元数据信息以外,还会通过RPC心跳机制来管理各个datanode

7.namenode会把元数据信息放在namenode服务器的内存里,目的是供用户快速查询。

8.namenode为了确保元数据存储的可靠性,会将元数据落地,存储的目录路径有core-site.xml里的hadoop.tmp.dir来指定的。

注意:此属性默认是放在linux的 /tmp 目录,所以在工作中一定要更换此目录。

9.namenode底层是通过两个文件来进行元数据管理:

①Edits文件 当客户端发起写请求时,Edits文件都会进行记录

写请求,比如:-mkdir  -put  -mv

②Fsimage文件 存储元数据信息的

以上这个两个文件会定期做一次合并,合并的目的是确保Fsimage文件里的数据是最新的。合并周期默认是3600s(1小时)

10.以上这个两个文件可以在配置的元数据目tmp/dfs/name/current找到

11.格式化指令:hadoop namenode -format

它的作用是在元数据目录生成新的Edits和Fsimage文件。

这个指令 在初次Hadoop时需要执行一次。

12.格式化指令很危险,因为它会清空之前所有的元数据。所以在实际工作,初次使用完之后,会通过配置文件的使得这个指令失效。

13.Edits和Fsimage文件可以通过指令手动合并:hadoop dfsadmin -rollEdits

14.为了当namenode宕机后,SNN能够工作,我们需要SNN具有元数据数据,

所以Hadoop底层机制是让SNN来做元数据的合并工作,通过这机制使得NN和SNN都有元数据信息了。

注意:以上这个机制存在一个问题,就是可能会造成元数据丢失

比如:

3:00  Edits和Fsimage 合并一次

3:30  namenode 宕机了

相当于丢失了30分钟之内的元数据信息。

这个机制是Hadoop1.0的机制,是存在问题的,即SNN合并不能达到实时热备,所以会元数据丢失,即Hadoop1.0的namenode还是会存在单点故障问题。

HDFS细节

15.下图是Hadoop2.0 集群的架构图。

Hadoop2.0如果伪分布式模式,会看到SNN,但实际没有作用

Hadoop2.0如果是完全分布式,就没有SNN进程了

HDFS细节

16.可以指令单独启停某个进程:

启动:

hadoop-daemon.sh start namenode

hadoop-daemon.sh start datanode

hadoop-daemon.sh start secondarynamenode

停止:

hadoop-daemon.sh stop namenode

此外,掌握:start-dfs.sh  启动和HDFS相关的所有进程

17.当namenode挂掉再次启动时,底层会将Edits和Fsimage合并一次。

3:10 namenode 宕机

即3:00 ~3:10会产生一些操作记录,

所以通过这种机制,可以确保namenode宕机再启动之后,Fsimage是最新的

18.当整个HDFS启动(namenode和datanode)时,底层每台datanode都会向namenode汇报自身的存储状态信息(存储了哪些文件块),namenode收到这写数据后,汇总并检查。检查文件块是否缺少,数据是否丢失,以及每个文件块的副本数量是否达到要求(集群环境,3副本),如果检查有问题,HDFS会进入安全模式,在安全模式下,要完成数据的修复、副本的复制。安全模式直到数据恢复完毕之后自动退出

19.如果HDFS处于安全模式,对外只能提供读服务,不能提供写服务。

可以通过指令:

hadoop dfsadmin -safemode enter

hadoop dfsadmin -safemode leave

20.如果是伪分布式模式,在hdfs-site.xml 配置副本数量,只能配置1,因为如果大于1,会使得HDFS一直安全模式而不退出(因为副本数量一直满足不了要求,就一台服务器,只能存一个副本)

21.datanode,数据节点,专门用来存储和管理文件块。

22.datanode会定期向namenode发送心跳,心跳周期默认是3s

23.配置datanode地址列表是在slaves配置文件里配置的

24.HDFS存储文件的方式是切块存储,

Hadoop 1.0  切块大小64MB

Hadoop 2.0  切块大小128MB

比如:上传来个文件①1.txt 257MB  ②2.txt 100MB ,并设定副本数=1

①1.txt  1块:128MB  2块:128MB  3块:1MB

②2.txt  1块:100MB

综上,共4个文件块。

强调:切块是以文件为单位的,不同文件的文件块不能共用。

块是多大,在磁盘上就占多大。比如1MB文件块就占1MB,不会浪费127MB的磁盘空间的。

25.HDFS的特点:当文件上传HDFS之后,就不允许修改此文件。所以HDFS的适用场景:once-write-many-read  (一次写入,多次读取)

26.HDFS不允许修改数据,但允许追加数据

27.HDFS是否适合存储海量的小文件(比如几kb,几mb)?

不适合,因为每个文件都会占用一条元数据信息,根据经验,一条元数据大约在150字节,即如果由海量小文件时,会占用大量的namenode服务内存空间。