文章目录
- 1、HDFS产出背景及定义
- 1.1 背景
- 1.2 定义
- 1.3 使用场景
- 2、HDFS优缺点
- 2.1 优点
- 2.2 缺点
- 3、HDFS组成架构
- 3.1 NameNode
- 3.2 DataNode
- 3.3 Secondary NameNode
- 3.4 Client
- 4、HDFS文件块大小(面试重点)
- 4.1 大小
- 4.2 依据
1、HDFS产出背景及定义
1.1 背景
某个数据文件大到一台服务器存不下,需要使用多台服务器协同存储
1.2 定义
- 本质上是一个文件系统,用于管理文件
和 linux 目录结构一样 - 其次是分布式的
由多台服务器一起工作
1.3 使用场景
- 适合一次写入,多次读出的场景
- 一个文件经过创建、写入和关闭后就不再改变
- 把一个文件丢入 HDFS 后
- insert into / alter table … add columns …
- 在文件末尾追加新内容
- 在文件夹下追加新文件
- insert overwrite / alter table … replace columns (替换原表所有字段) …
- 将老版本文件删掉后,放入新文件
2、HDFS优缺点
2.1 优点
a、高容错性
数据会保存多个副本
当其中的一个副本挂了后,会自动恢复
b、适合处理大数据
数据规模达到GB、TB,甚至是PB级别
- 某一个文件大
能够处理百万以上规模的文件数据
- 文件多
c、可以部署在廉价机器上
笔记本电脑也可以做服务器
2.2 缺点
a、不擅长毫秒级的数据访问
- 不会像mysql那样,一查就马上有结果返回
b、无法高效对小文件进行存储
- 一个小文件会占用NameNode 150字节
- 找到小文件花的时间可能比读取文件内容花的时间还要长,违法了HDFS的设计原则
c、不支持并发写入,随机修改
- 一个文件只能被一个线程写入数据,不能同时写
- 数据只可以追加写入,不可以随机修改
3、HDFS组成架构
3.1 NameNode
Master
用途
- 管理HDFS的名称空间
- 记录所有文件的元数据信息
- 文件名
- 路径
- 副本数
- 配置副本策略
- 集群上的不同文件可以配置不同的副本策略
- a文件:3副本
- b文件:10副本
- 管理数据块(Block)的映射信息
- 指管理每一个副本都在哪些服务器上
- 处理客户端的读写请求
- 客户端读写HDFS时,先访问NameNode的元数据信息
3.2 DataNode
Slave
用途
- 数据实际存储的地方
- 执行数据块的读写操作
3.3 Secondary NameNode
秘书,生产环境下一般会搭建2个NameNode的高可用来代替Secondary NameNode
用途
- 辅助 NameNode,分担其工作量,例如定期合并Fsimage和Edit,并推送给NameNode
- 紧急的情况下,可以恢复NameNode
- 只能恢复一部分数据
3.4 Client
客户
用途
- 文件切分
- 上传文件时,按照NameNode的文件块来做切分
- 比如200M的文件,拆分成128M和72M
- 与NameNode交互
- 获取文件信息
- 允许读,有没有文件
- 与DataNode交互
- 读取或者写入数据
- 实际干活
- 提供一些命令来管理HDFS,比如NameNode格式化
4、HDFS文件块大小(面试重点)
4.1 大小
Hadoop 1.x 是64M , Hadoop 2.x/3.x 是128M
Hadoop 3.1.3 - 配置- hdfs-default
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
<description>
The default block size for new files, in bytes.
You can use the following suffix (case insensitive):
k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa) to specify the size (such as 128k, 512m, 1g, etc.),
Or provide complete size in bytes (such as 134217728 for 128 MB).
</description>
</property>
134217728 / 1024 / 1024 = 128
4.2 依据
- 寻址时间为10ms
- 指找到Block的时间为10ms - 寻址时间 = 传输时间的 1% 时为最佳状态
- 推测出传输时间=1s - 块大小取决于1s磁盘传输速率
- 普通磁盘1s能传输100M左右,取进制单元128M
- 固态硬盘1s能传输200-300M左右,取进制单元256M