主页 > 新闻资讯 > 大数据学习:HDFS文件管理基础入门

大数据学习:HDFS文件管理基础入门

作者:张老师 浏览次数: 2021-04-30 16:43
HDFS作为Hadoop生态的分布式文件系统,对于底层存储来说,提供重要的支持,在学习Hadoop框架的前期,基本上都是从HDFS开始学起。今天的大数据学习分享,我们就从HDFS的入门讲起,来看看HDFS的文件管理是如何做的?

1、HDFS的块分布

HDFS会将数据文件切分成一个个小的数据块进行存储,同时会将这些数据块的副本保存多份,分别保存到不同的DataNode上。HDFS中数据块的副本数由hdfs-site.xml文件中的dfs.replication属性决定,配置属性如下:

<property>
<name>dfs.replication</name>
<value>3</value>
</property>

Hadoop默认的副本数为3,并且在机架的存放上也有一定的策略。Hadoop的默认布局策略,即默认的副本存放策略如下:

(1)第1个副本存放在HDFS客户端所在的节点上。

(2)第2个副本存放在与第1个副本不同的机架上,并且是随机选择的节点。

(3)第3个副本存放在与第2个副本相同的机架上,并且是不同的节点。

2、数据读取

HDFS的数据读取过程需要客户端先访问NameNode,获取元数据信息,然后到具体的DataNode上读取数据,如下图所示:

大数据学习:HDFS文件管理基础入门

(1)客户端向NameNode发起请求,读取元数据信息。NameNode上存储着整个HDFS集群的元数据信息,这些元数据信息包括文件名,所有者,所在组,权限,数据块和DataNode列表。

这个过程中还要对客户端的身份信息进行验证,同时检测是否存在要读取的文件,并且需要验证客户端的身份是否具有访问权限。

(2)NameNode将相关的元数据信息返回给客户端。

(3)客户端到指定的DataNode上读取相应的数据块。

(4)DataNode返回相应的数据块信息。

第(3)和(4)步会持续进行,一直到文件的所有数据块都读取完毕或者HDFS客户端主动关闭了文件流为止。

3、数据写入

HDFS中的数据写入过程同样需要客户端先访问NameNode,获取元数据信息,然后到具体的DataNode上写入数据,如图所示

大数据学习:HDFS文件管理基础入门

以下是具体步骤:

(1)客户端请求NameNode获取元数据信息。这个过程中,NameNode要对客户端的身份信息进行验证,同时需要验证客户端的身份是否具有写权限。

(2)NameNode返回相应的元数据信息给客户端。

(3)客户端向第一个DataNode写数据。

(4)第1个DataNode向第2个DataNode写数据。

(5)第2个DataNode向第3个DataNode写数据。

(6)第3个DataNode向第2个DataNode返回确认结果信息。

(7)第2个DataNode向第1个DataNode返回确认结果信息。

(8)第1个DataNode向客户端返回确认结果信息。

其中,第(4)步和第(5)步是异步执行的,当HDFS中的多个DataNode发生故障或者发生错误时,只要正确写入了满足最少数目要求的数据副本数,HDFS客户端就可以从数据块的副本中恢复数据。

最少数目要求的数据副本数由hdfs-site.xml文件中的dfs.namenode.replication.min属性决定,配置属性如下:

<property>
<name>dfs.namenode.replication.min</name>
<value>1</value>
</property>

最少数目要求的数据副本数默认为1,即只要正确写入了数据的一个副本,客户端就可以从数据副本中恢复数据。

4、数据完整性

通常,在校验数据是否损坏时可以用如下方式。

(1)当数据第一次引入时,计算校验和。

(2)当数据经过一系列的传输或者复制时,再次计算校验和。

(3)对比第(1)和第(2)步的校验和是否一致,如果两次数据的校验和不一致,则证明数据已经被破坏。

注意:这种使用校验和来验证数据的技术只能检测数据是否被损坏,并不能修复数据。

HDFS中校验数据是否损坏使用的也是校验和技术,无论是进行数据的写入还是进行数据的读取,都会验证数据的校验和。校验和的字节数由core-site.xml文件中的io.bytes.per.checksum属性指定,默认的字节长度为512 B,具体配置如下:

<property>
<name>io.bytes.per.checksum</name>
<value>512</value>
</property>

当HDFS写数据时,HDFS客户端会将要写入的数据及对应数据的校验和发送到DataNode组成的复制管道中,其中最后一个DataNode负责验证数据的校验和是否一致。如果检测到校验和与HDFS客户端发送的校验和不一致,则HDFS客户端会收到校验和异常的信息,可以在程序中捕获到这个异常,进行相应的处理,如重新写入数据或者用其他方式处理。

HDFS读数据时也会验证校验和,此时会将它们与DataNode中存储的校验和进行比较。如果其与DataNode中存储的校验和不一致,则说明数据已经损坏,需要重新从其他DataNode读取数据。其中,每个DataNode都会保存一个校验和日志,客户端成功验证一个数据块之后,DataNode会更新该校验和日志。

除此之外,每个DataNode也会在后台运行一个扫描器(DataBlockScanner),定期验证存储在这个DataNode上的所有数据块。

由于HDFS提供的数据块副本机制,当一个数据块损坏时,HDFS能够自动复制其他完好的数据块来修复损坏的数据块,得到一个新的,完好的数据块,以达到系统设置的副本数要求,因此在某些数据块出现损坏时,保证了数据的完整性。

关于大数据学习,HDFS文件管理基础入门,以上就为大家做了基本的讲解了。HDFS的文件管理,其实在底层来说,是做了非常细致的考量的,学习当中以先理解,再结合到源码,会有更深的收获。成都加米谷大数据,专业大数据培训,大数据开发,数据分析与挖掘,零基础班本月正在招生中,课程大纲及学习资料,可联系客服获取!
热点排行
推荐文章
立即申请>>