HDFS概述
Posted Lyy11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS概述相关的知识,希望对你有一定的参考价值。
HDFS,它是一个文件系统,用于存储文件,通过目 录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务 器有各自的角色。
HDFS 的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭 之后就不需要改变。
HDFS 文件块大小,块的大小可以通过配置参数 ( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M
HDFS 的 Shell 操作
上传
moveFromLocal:从本地剪切粘贴到 HDFS
hadoop fs -moveFromLocal ./shuguo.txt /sanguo
-copyFromLocal/-put:从本地文件系统中拷贝文件到 HDFS 路径去
hadoop fs -put ./wuguo.txt /sanguo
-appendToFile:追加一个文件到已经存在的文件末尾
下载
-copyToLocal / -get:从 HDFS 拷贝到本地
hadoop fs -get /sanguo/shuguo.txt ./
-ls |
显示目录信息 |
-cat | 显示文件内容 |
-chgrp、-chmod、-chown |
修改文件所属权限 |
-mkdir | 创建路径 |
-cp |
拷贝 |
-mv | 在 HDFS 目录中移动文件 |
-tail | 显示一个文件的末尾 1kb 的数据 |
-rm -r |
递归删除目录及目录里面内容 |
-du | 统计文件夹的大小信息 |
-setrep | 设置 HDFS 中文件的副本数量 |
HDFS写文件流程
(1)客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件,NameNode查目标文件是否已存在,父目录是否存在。 (2)NameNode 返回是否可以上传。
(3)客户端请求第一个 Block 上传到哪几个 DataNode 服务器上。 (4)NameNode 返回 3 个 DataNode 节点,分别为 dn1、dn2、dn3。 (5)客户端通过 FSDataOutputStream 模块请求 dn1 上传数据,dn1 收到请求会继续调用 dn2,然后 dn2 调用 dn3,将这个通信管道建立完成。 (6)dn1、dn2、dn3 逐级应答客户端。
(7)客户端开始往 dn1 上传第一个 Block(先从磁盘读取数据放到一个本地内存缓存), 以 Packet 为单位,dn1 收到一个 Packet 就会传给 dn2,dn2 传给 dn3;dn1 每传一个 packet 会放入一个应答队列等待应答。
(8)当一个 Block 传输完成之后,客户端再次请求 NameNode 上传第二个 Block 的服务 器。(重复 3-7 步)。
HDFS读数据流程
(2)挑选一台 DataNode(就近原则,然后随机)服务器,请求读取数据。 (3)DataNode 开始传输数据给客户端(从磁盘里面读取数据输入流,以 Packet 为单位 来做校验)。
(4)客户端以 Packet 为单位接收,先在本地缓存,然后写入目标文件。
NN 和 2NN 工作机制
如果存储在NameNode节点的磁盘中,因为经常需要进行随机访 问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在 内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的 FsImage。
当在内存中的元数据更新时,如果同时更新FsImage,就会导 致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数 据丢失。因此,引入 Edits 文件(只进行追加操作,效率很高)。每当元数据有更新或者添 加元数据时,修改内存中的元数据并追加到 Edits 中。这样,一旦 NameNode 节点断电,可 以通过 FsImage 和 Edits 的合并,合成元数据。
如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦 断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits 的合并,如果这 个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode, 专门用于 FsImage 和 Edits 的合并。
1)通常情况下,SecondaryNameNode 每隔一小时执行一次。
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600s</value>
</property>
2)一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode 执行一次。
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作动作次数</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60s</value>
<description> 1 分钟检查一次操作次数</description>
</property>
DataNode 工作机制
DataNode 启动后向 NameNode 注册,通过后,周期性(6 小时)的向 NameNode 上 报所有的块信息。 DN 向 NN 汇报当前解读信息的时间间隔,默认 6 小时;DN 扫描自己节点块信息列表的时间,默认 6 小时
心跳是每 3 秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令如复制块 数据到另一台机器,或删除某个数据块。如果超过 10 分钟没有收到某个 DataNode 的心跳, 则认为该节点不可用。
数据完整性
当 DataNode 读取 Block 的时候,它会计算 CheckSum。如果计算后的 CheckSum,与 Block 创建时值不一样,说明 Block 已经损坏。
常见的校验算法 crc(32),md5(128),sha1(160)
DataNode进程死亡或 者网络故障造成DataNode 无法与NameNode通信时,NameNode不会立即把该节点判定 为死亡,要经过一段时间,这段时间 暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。
以上是关于HDFS概述的主要内容,如果未能解决你的问题,请参考以下文章