HDFS是分布式文件系统,英文全称是Hadoop Distributed File System,是一个用Java实现、分布式的、可扩展的文件系统。
HDFS的主要功能是做存储用的,把每一份数据创建多个副本、做复制,默认的副本数是3份。
整体设计思路
- 大文件被切割为小文件,使用分而治之的思想让很多服务器对同一个文件进行联合管理。
- 每个小文件做冗余备份,并且分散到不同的服务器中,做到高可靠不丢失。
在HDFS的架构中,主要有三个角色:NameNode(元数据节点,NN)、DataNode(从数据节点,DN)、SecondaryNameNode(从数据节点,snn)。
架构中三个角色的作用
1. NameNode:是Master节点,集群老大
(1)管理文件系统中文件的元数据信息;
(2)维护文件到块、块到节点的对应关系;
(3)维护用户对文件的操作信息(增删改查)。
2. DataNode:Slave节点
(1)负责存储客户端(client)发来的数据块block;
(2)执行数据块的读写操作。
3.SecondaryNameNode:严格来说并不是NameNode备份节点,主要给NameNode分担压力
(1)周期性的将元数据节点的fsimage(文件系统目录树)和fsedits(文件系统元数据操作日志)合并,以防止日志文件过大。
(2)合并后的fsimage在从元数据节点保存了一份,以防止元数据节点失败时恢复。
特性
- HDFS中的文件在物理分块上是分块存储(block),配置参数dfs.blocksize在Hadoop2.x版本中默认128M,而老版本为64M;
- HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件。形如:hdfs://hadoop01:9000/software/hadoop-2.6.5-centOS-6.7.tar.gz
- 目录结构及文件分块位置信息(元数据)的管理由NameNode节点分担;
- 文件的各个block块的存储管理由DataNode节点承担。副本数参数设置:dfs.replication(默认是3份);
- 适应一次写入、多次写出的场景,且不支持文件的修改。
优缺点
-
优点:
(1)可构建在廉价机器上;
(2)高容错性;
(3)适合批处理;
(4)适合大数据处理;
(5)流式文件访问。 -
缺点:
(1)不适用于低延时数据访问;
(2)不适用小文件存取;
(3)不适用并发写入、文件随机修改。
#### 补充:
为什么HDFS不适合存储小文件:
(1)所有的元数据都是存储在NameNode内存中的,而一个NameNode节点的内存是有限的;
(2)小文件的存取占用了大量的NameNode内存,导致寻道时间超过了读取时间;
(3)NameNode存储block数目是有限的。
一个block元信息消耗大约150byte内存,加入存储一亿个block,则大约需要20GB内存。如果一个文件大小为10KB,则一亿个文件大小仅为1TB,但NameNode就要消耗20GB内存。