一、架构原理HDFS 是Hadoop Distributed File System的简称,是HADOOP抽象文件系统的一种实现 。Hadoop抽象文件系统可以与本地系统、Amazon S3等集成,甚至可以通过Web协议(webhsfs)来操作 。
HDFS是由一个NAMENODE与多个DATANODE构成,如下图 。
其中NAMENODE负责管理分布式文件系统的命名空间(Namespace) 。
DATANODE 数据节点,用来具体的存储文件,维护了blockId 与 datanode本地文件的映射 。
换个理解方法就是MASTER WORKER 模式,其中NAMENODE 对应是master,进所有datanode的datanode mate 信息的关联以及监控等相关事情 。而DATANODE只负责存储数据 。
文章插图
HDFS基础知识思维导图如下:
文章插图
二、写文件过程
文章插图
- Client 调用 DistributedFileSystem 对象的 create 方法,创建一个文件输出流(FSDataOutputStream)对象;
- 通过 DistributedFileSystem 对象与集群的 NameNode 进行一次 RPC 远程调用,在 HDFS 的 Namespace 中创建一个文件条目(Entry),此时该条目没有任何的 Block,NameNode 会返回该数据每个块需要拷贝的 DataNode 地址信息;
- 通过 FSDataOutputStream 对象,开始向 DataNode 写入数据,数据首先被写入 FSDataOutputStream 对象内部的数据队列中,数据队列由 DataStreamer 使用,它通过选择合适的 DataNode 列表来存储副本,从而要求 NameNode 分配新的 block;
- DataStreamer 将数据包以流式传输的方式传输到分配的第一个 DataNode 中,该数据流将数据包存储到第一个 DataNode 中并将其转发到第二个 DataNode 中,接着第二个 DataNode 节点会将数据包转发到第三个 DataNode 节点;
- DataNode 确认数据传输完成,最后由第一个 DataNode 通知 client 数据写入成功;
- 完成向文件写入数据,Client 在文件输出流(FSDataOutputStream)对象上调用 close 方法,完成文件写入;
- 调用 DistributedFileSystem 对象的 complete 方法,通知 NameNode 文件写入成功,NameNode 会将相关结果记录到 editlog 中 。
文章插图
- Client 通过 DistributedFileSystem 对象与集群的 NameNode 进行一次 RPC 远程调用,获取文件 block 位置信息;
- NameNode 返回存储的每个块的 DataNode 列表;
- Client 将连接到列表中最近的 DataNode;
- Client 开始从 DataNode 并行读取数据;
- 一旦 Client 获得了所有必须的 block,它就会将这些 block 组合起来形成一个文件 。
解决办法:在客户端读取到数据后,会采用MD5和sha1对数据块进行校验,以确定读取到正确的数据 。
具体流程:
- 在文件被创建的时候,客户端对文件进行摘录,并把这些信息写入数据的同一路径隐藏文件中 。
- 当客户端读取文件的时候,会先读取该信息文件,然后利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据接地那读取该文件快,并且向NAMENODE报告这个文件块有错误,NAMENODE会定期检查并且重新复制这个块 。
解决思路主要是通过心跳的方式
解决流程:
- 每个数据节点会定期向NAMEnode 节点发送心跳,向namenode报告自己的状态 。
- 当数据节点发生故障或者网络发生断网时,namenode节点就无法收到来自以下数据节点的心跳信息 。这些数据节点就会被标记为宕机,节点上面的所有数据都会标记为不可读,namenode不会再给他们发送任何的IO请求 。
- 这时,有可能出现一种情况,由于一些数据节点的不可用,会导致一些数据块的副本量小于冗余因子 。
- namenode 会定期检查这些数据情况,一旦发现某些数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生产新的副本 。
- HDFS和其他分布式文件系统最大的区别就是可以调整冗余数据的位置 。
推荐阅读
- 一文带你搞懂前端本地存储
- 多条件查询,一个万能公式,不理解可以直接套用
- 一文带你了解不一样的SQL,惊喜多多
- iOS|iOS 16前的最后一个版本!iOS 15.5登场:一文了解详情
- 深入理解流计算中的 Watermark
- 一文读懂Redis的dict字典数据结构
- 新疆维吾尔自治区|一文带你了解和田玉“前世今生”
- HDMI 2.0已淘汰!HDMI 2.1上位:一文看懂新接口优势
- 索尼|PS5存储扩容需要注意啥?一文读懂
- 一文读懂AI计算机视觉技术