什么是HDFS?
HDFS来源于google的GFS的一篇论文,这篇论文发表于2003年,HDFS是GFS的开源实现。提供了高可靠性、高扩展性、高吞吐率的数据存储服务。HDFS是Hadoop平台上两大核心组件之一,Hadoop是大数据技术的一个代表平台,解决的最核心的两个问题,一个是大数据的分布式存储,一个是大数据的分布式处理,HDFS就是来解决海量数据的分布式存储问题。那么下面看看分布式文件系统是什么。
分布式文件系统
在大数据时代,数据量的规模很大,对于单个节点的一台计算机是无法存储海量数据的,单纯的通过增大硬盘容量和个数是无法满足日益增长数据存储的需求,所以需要借助计算机集群来存储这么多的数据,将之前的单点存储扩展到将数据分布到多个节点存储。将固定于某个地点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络。
HDFS的特点:
文件以多副本方式进行存储。
2.运行在普通廉价的机器上。
3.易扩展,为用户提供性能不错的文件存储服务(因为部署在脸颊的机器上,容易出现硬件问题,所以要求可以自动检测局部的硬件错误并快速恢复)。
基于此目标,考虑应用场景出于简化设计和实现的目的,HDFS 假设了一种 write-once-read-many 的文件访问模型。这种一次写入并被大量读出的模型在现实中确实适应很多业务场景,架构设计的此类假设是合理的。正因为此类假设的存在,也限定了它的应用场景。
HDFS架构总揽图:
上图来源于官方文档 地址:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
HDFS是基于Master/Slave架构,从图中可见 HDFS 的架构包括三个部分,每个部分有各自清晰的职责划分。HDFS包含3种节点,NameNode (NN), DataNode (DN),secondary NameNode (SNN) 它是NameNode的一个助手节点。下面看具体部分的作用。
- NameNode:
主要职责是管理整个文件系统的元信息(Metadata),集群启动时候这些信息是存在内存中的,元信息主要包括:
- File system namesapce
HDFS 支持传统的文件层级目录架构,类似单机文件系统以目录树的形式组织文件,称为 file system namespace。
- Replication factor
文件副本数,针对每个文件设置
- Mapping of blocks to DataNodes
文件块到数据节点的映射关系,就是记录数据块block存放在哪个DataNode上。
- 响应客户端的请求
- DataNode:
- 真正存储文件块(block)的地方。
- 定期向NameNode发送心跳信息,汇报本身健康状况及其所有block信息
- 服务响应 Client 的文件读写的请求
- 执行文件块的创建、删除和复制
- Client: 考虑到 HDFS 交互过程的复杂性,所以特地提供了针特定编程语言的 Client 以简化使用。Client 的职责如下:
- 提供面向应用编程语言的一致 API,简化应用编程
- 改善访问性能
从图中可见,HDFS 采用的是中心总控式架构,NameNode 就是集群的中心节点,一般NameNode和DataNode谁部署在不同机器上。
文件会被拆分成block,一个block的大小是根据blocksize决定的,一般blocksize=128M,如果一个文件是150M,那么这个文件会被拆分成两个block,一个是128M,另一个是22M。
HDFS优缺点
优点:
1. 高容错性:数据自动保存多个副本,副本丢失后,自动恢复,可靠性同时也实现了加快处理速度,A节点负载高,可读取B节点
2. 适合批处理:移动计算而非数据,数据位置暴漏给计算框架
3. 适合大数据处理:甚至PB级数据,百万规模以上文件数量,10k+节点
4. 可构建在廉价机器上:通过多副本提高可靠性,提供容错和恢复机制
缺点:
1.低延迟数据访问:比如订单是不适合存储HDFS中的,要求数据毫秒级就要查出来
2. HDFS 不适合存储大量的小文件,这里的小文件指小于块大小的文件。,如真有这种需求的话,要对小文件进行压缩。
3. 并发写入、文件随机修改:不适合修改,实际中网盘、云盘内容是不允许修改的,只能删了从新上传,他们都是hadoop做的。