第一章 HDFS概述
1.1 HDFS 产出背景及定义
- HDFS 产生背景
- 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。
- HDFS 只是分布式文件管理系统中的一种。
- HDFS 定义
- HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件
- 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
- HDFS 的使用场景:
- 适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。
1.2 HDFS 优缺点
-
优点
- 高容错性
- 数据自动保存多个副本,它通过增加副本的形式,提高容错性
- 某一个副本丢失有以后,他可以自动恢复
- 适合处理大数据
- 数据规模:能够处理数据规模达到TB,GB,甚至PB级别
- 文件规模:能够处理百万规模以上的文件数量
- 可构建在廉价的机器上,通过多副本机制,可以提高可靠性
- 高容错性
-
缺点
- 不适合低延迟数据访问
- 比如毫秒级别的数据访问
- 无法高效的对大量小文件进行存储
- 存储大量小文件的话, 它会占用NameNode大量的内存来存储文件目录和块信息,这样是不可取的,因为NameNode的内存是有限的.
- 小文件的寻址时间会超过读取时间,这违反了HDFS的设计初衷
- 不支持并发写入,文件随机修改
- 一个文件只能有一个写入,不能支持并发写入
- 仅支持数据的追加写append,不支持文件的随机修改
- 不适合低延迟数据访问
1.3 HDFS 组成架构
-
HDFS的组织架构以及功能作用
- NameNode 就是Master,它是一个管理者
- 管理HDFS的名称空间
- 配置副本策略
- 管理数据块(Block)映射信息
- 处理客户端的读写请求
- DataNode 就是slave,NameNode下达命令,DataNode执行实际的操作
- 存储实际的数据块
- 执行数据块的读写操作
- client
- 文件切分.文件上传HDFS的时候,Client将we年切分成一个个的Block,然后进行上传
- 与NameNode交互,获取文件的位置信息
- 与DataNode交互,读取或者写入数据
- Client提供一些命令来听给管理HDFS,比如NameNode格式化
- Client可以通过命令来访问HDFS,比如对HDFS的增删改查操作
- SecondaryNameNode 并非NameNode的热备,当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
- 辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode
- 在紧急情况下,可辅助恢复NameNode
- NameNode 就是Master,它是一个管理者
1.4 HDFS 文件块大小(面试重点)
HDFS文件块大小
- HDSf中的文件在物理上是分块(Block)存储的,块的大小可以通过配置参数(dfs.blocksize)来规定,默认在Hadoop2.x/3.x是128M, 在1.x是64M.
- 如果寻址时间约为10MS,也就是查找到目标block的时间为10ms
- 寻址时间为传输时间的1%时,则为最佳状态,这是中国的专家说的,因此,传输时间=10ms/0.01=1000ms=1s
- 而目前磁盘的传输速度普遍为100M/s
- block大小=1s*100MB/s = 100MB 距离128更近,所以设置默认为128M
思考:为什么块的大小不能设置的太小,也不能设置的太大
-
HDFS的块如果设置的太小,会增加寻址时间,程序一直在找块的开始位置
-
如果块设置的太大,从磁盘传输数据的时间,会明显大于定位这块块开始位置需要的时间,导致程序在处理这块数据的时候,会非常慢
总结:HDFS块的大小设置主要取决于磁盘传输速率