在现代的企业环境中,单机容量过小,没法存储海量的数据,这时候就须要多机器存储。node
—— 统一管理分布在集群上的文件,这样的系统就称为分布式文件系统。缓存
HDFS(Hadoop Distributed File System,Hadoop 分布式文件系统),是 Apache Hadoop 项目的一个子项目。架构
咱们知道,Hadoop 天生就是为了存储海量数据(好比 TB 和 PB级别)而设计的,它的存储系统就是 HDFS。app
HDFS 使用多台计算机存储文件,并提供统一的访问接口,像是访问一个普通文件系统同样使用分布式文件系统。分布式
Doug Cutting 在作 Lucene 的时候,须要编写一个爬虫服务,过程当中遇到了一些问题,诸如:如何存储大规模的数据,如何保证集群的可伸缩性,如何动态容错等。oop
2003年的时候,Google 发布了三篇论文,被称做为三驾马车,其中有一篇叫作 GFS,描述了 Google 内部的一个叫作 GFS 的分布式大规模文件系统,具备强大的可伸缩性和容错性。性能
Doug Cutting 后来根据 GFS 的论文, 创造了一个新的文件系统, 叫作 HDFS设计
低延时的数据访问:对延时要求在毫秒级别的应用,不适合采用 HDFS。HDFS 是为高吞吐数据传输设计的,延时较高。blog
大量小文件:HDFS 系统中,文件的元数据保存在 NameNode 的内存中, 文件数量会受限于 NameNode 的内存大小。接口
一般,一个文件/目录/文件块的元数据内存空间约=150Byte。若是有100万个文件,每一个文件占用1个 block,则须要大约300MB的内存。所以十亿级别的文件数量在现有商用机器上难以支持。
多方读写,须要任意的文件修改:HDFS采用追加(append-only)的方式写入数据。不支持文件任意 offset 的修改,也不支持多个写入器(writer)。
HDFS是一个 主/从(Mater/Slave)体系结构,HDFS由四部分组成,分别是:
HDFS Client、NameNode、DataNode 和 SecondaryNameNode。
一、Client:就是客户端。
二、NameNode:就是 master,是管理者。
三、DataNode:就是 Slave。NameNode 下达命令,DataNode 执行实际的操做。
四、Secondary NameNode:不是 NameNode 的热备份 —— NameNode 挂掉的时候,它并不能立刻替换 NameNode 并提供服务。
NameNode 在内存中保存着整个文件系统的名称空间和文件数据块的地址映射。
HDFS 集群可存储的文件个数受限于 NameNode 的内存大小 。
一、NameNode 存储元数据信息
元数据包括:文件名,文件目录结构,文件属性(生成时间、副本数、权限等),每一个文件的块列表,以及列表中的块与块所在的DataNode 之间的地址映射关系;
在内存中加载每一个文件和每一个数据块的引用关系(文件、block、DataNode之间的映射信息);
数据会按期保存到本地磁盘(fsImage 文件和 edits 文件)。
二、NameNode 文件元数据的操做
DataNode 负责处理文件内容的读写请求,数据流不会通过 NameNode,而是从 NameNode 获取数据真正要流向的 DataNode。
三、NameNode 副本
文件数据块到底存放到哪些 DataNode 上,是由 NameNode 决定的,它会根据全局的状况(机架感知机制),作出副本存放位置的决定。
四、NameNode 心跳机制
全权管理数据块的复制,周期性的接受心跳和块的状态报告信息(包含该DataNode上全部数据块的列表)
若接受到心跳信息,NameNode认为DataNode工做正常,若是在10分钟后还接受到不到DN的心跳,那么NameNode认为DataNode已经宕机 ,这时候NN准备要把DN上的数据块进行从新的复制。 块的状态报告包含了一个DN上全部数据块的列表,blocks report 每一个1小时发送一次.
提供真实文件数据的存储服务。
DataNode 以数据块的形式存储 HDFS 文件
DataNode 响应 HDFS 客户端的读写请求
DataNode 周期性向 NameNode 汇报心跳信息
DataNode 周期性向 NameNode 汇报数据块信息
DataNode 周期性向 NameNode 汇报缓存数据块信息
版权声明
出处:博客园-瘦风的南墙(https://www.cnblogs.com/shoufeng)
感谢阅读,公众号 「瘦风的南墙」 ,手机端阅读更佳,还有其余福利和心得输出,欢迎扫码关注🤝
本文版权归博主全部,欢迎转载,但 [必须在页面明显位置标明原文连接],不然博主保留追究相关人士法律责任的权利。