参考资料
一、HDFS 背景以及定义
背景: 数据量越来越大,操作系统存不了所有数据,需要能管理多台机器上的文件的系统,即分布式文件管理系统,HDFS就是其中的一种。
定义: HDFS,全称 Hadoop Distributed File System,是一个文件系统,通过 目录树 来定位文件,具有分布性,是由多个服务器联合起来实现的存储功能。
适用场景:一次写入,多次读出。 即一个文件经过创建、写入和关闭后就不需要改变的情况。
二、HDFS 优缺点
2.1 优点
-
高容错性: 数据自动保存多个副本,可增加副本来提高容错性,某个副本丢失后,可自动恢复。
-
适合处理大数据:(1)数据规模:能处理达到GB、TB甚至PB级别的数据;(2)能处理百万规模以上的文件数量。
-
可构建在廉价机器上: 通过多副本机制,提高可靠性。
2.2 缺点
- 不适合低延时数据访问,比如无法做到毫秒级存储数据。
- 无法高效的对大量小文件进行存储。
- 存储大量小文件时,会占用 NameNode节点大量的内存来存储文件目录和块信息。
- 小文件存储的寻址时间会超过读读取时间,违反了HDFS设计理念。
- 不支持并发写入、文件随机修改
- 不允许多个线程对同一个文件进行写操作
- 仅支持数据 append(追加),不允许文件的随机修改
三、HDFS组成架构
图片来自 Hadoop3.1.3 HDFS官方文档
3.1 NameNode(NN)
Master,是主管、管理者的身份
- 管理HDFS的名称空间
- 配置副本策略
- 管理数据块(Block)映射信息
- 处理客户端读写请求
3.2 DataNode (DN)
Slave,执行NameNode下达的命令
- 存储实际的数据块
- 执行数据块的读 / 写操作
3.3 Client
客户端,shell客户端或者web客户端
- 文件切分。文件上传到 HDFS 时, Client 将文件切分成一个一个的Block,然后上传
- 与 NameNode 交互,获取文件的位置信息
- 与 DataNode 交互,读取或者写入数据
- Client 提供一些命令来管理 HDFS,比如 NameNode 格式化
- Client 可以通过一些命令来访问 HDFS,比如对 HDF