文章目录

  • 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 使用场景

  1. 适合一次写入,多次读出的场景
  • 一个文件经过创建、写入和关闭后就不再改变
  1. 把一个文件丢入 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
用途

  1. 管理HDFS的名称空间
  • 记录所有文件的元数据信息
    - 文件名
    - 路径
    - 副本数
  1. 配置副本策略
  • 集群上的不同文件可以配置不同的副本策略
    - a文件:3副本
    - b文件:10副本
  1. 管理数据块(Block)的映射信息
  • 指管理每一个副本都在哪些服务器上
  1. 处理客户端的读写请求
  • 客户端读写HDFS时,先访问NameNode的元数据信息

3.2 DataNode

Slave
用途

  1. 数据实际存储的地方
  2. 执行数据块的读写操作

3.3 Secondary NameNode

秘书,生产环境下一般会搭建2个NameNode的高可用来代替Secondary NameNode
用途

  1. 辅助 NameNode,分担其工作量,例如定期合并Fsimage和Edit,并推送给NameNode
  2. 紧急的情况下,可以恢复NameNode
  • 只能恢复一部分数据

3.4 Client

客户
用途

  1. 文件切分
  • 上传文件时,按照NameNode的文件块来做切分
  • 比如200M的文件,拆分成128M和72M
  1. 与NameNode交互
  • 获取文件信息
  • 允许读,有没有文件
  1. 与DataNode交互
  • 读取或者写入数据
  • 实际干活
  1. 提供一些命令来管理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 依据

  1. 寻址时间为10ms
    - 指找到Block的时间为10ms
  2. 寻址时间 = 传输时间的 1% 时为最佳状态
    - 推测出传输时间=1s
  3. 块大小取决于1s磁盘传输速率
    - 普通磁盘1s能传输100M左右,取进制单元128M
    - 固态硬盘1s能传输200-300M左右,取进制单元256M